summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Android.mk62
-rw-r--r--apache/org/apache/james/mime4j/BodyDescriptor.java392
-rw-r--r--apache/org/apache/james/mime4j/CloseShieldInputStream.java129
-rw-r--r--apache/org/apache/james/mime4j/ContentHandler.java177
-rw-r--r--apache/org/apache/james/mime4j/EOLConvertingInputStream.java139
-rw-r--r--apache/org/apache/james/mime4j/Log.java114
-rw-r--r--apache/org/apache/james/mime4j/LogFactory.java29
-rw-r--r--apache/org/apache/james/mime4j/MimeBoundaryInputStream.java184
-rw-r--r--apache/org/apache/james/mime4j/MimeStreamParser.java324
-rw-r--r--apache/org/apache/james/mime4j/RootInputStream.java111
-rw-r--r--apache/org/apache/james/mime4j/codec/EncoderUtil.java630
-rw-r--r--apache/org/apache/james/mime4j/decoder/Base64InputStream.java151
-rw-r--r--apache/org/apache/james/mime4j/decoder/ByteQueue.java62
-rw-r--r--apache/org/apache/james/mime4j/decoder/DecoderUtil.java284
-rw-r--r--apache/org/apache/james/mime4j/decoder/QuotedPrintableInputStream.java229
-rw-r--r--apache/org/apache/james/mime4j/decoder/UnboundedFifoByteBuffer.java272
-rw-r--r--apache/org/apache/james/mime4j/field/AddressListField.java65
-rw-r--r--apache/org/apache/james/mime4j/field/ContentTransferEncodingField.java88
-rw-r--r--apache/org/apache/james/mime4j/field/ContentTypeField.java259
-rw-r--r--apache/org/apache/james/mime4j/field/DateTimeField.java96
-rw-r--r--apache/org/apache/james/mime4j/field/DefaultFieldParser.java45
-rw-r--r--apache/org/apache/james/mime4j/field/DelegatingFieldParser.java47
-rw-r--r--apache/org/apache/james/mime4j/field/Field.java192
-rw-r--r--apache/org/apache/james/mime4j/field/FieldParser.java21
-rw-r--r--apache/org/apache/james/mime4j/field/MailboxField.java70
-rw-r--r--apache/org/apache/james/mime4j/field/MailboxListField.java67
-rw-r--r--apache/org/apache/james/mime4j/field/UnstructuredField.java49
-rw-r--r--apache/org/apache/james/mime4j/field/address/Address.java52
-rw-r--r--apache/org/apache/james/mime4j/field/address/AddressList.java138
-rw-r--r--apache/org/apache/james/mime4j/field/address/Builder.java243
-rw-r--r--apache/org/apache/james/mime4j/field/address/DomainList.java76
-rw-r--r--apache/org/apache/james/mime4j/field/address/Group.java75
-rw-r--r--apache/org/apache/james/mime4j/field/address/Mailbox.java121
-rw-r--r--apache/org/apache/james/mime4j/field/address/MailboxList.java71
-rw-r--r--apache/org/apache/james/mime4j/field/address/NamedMailbox.java71
-rw-r--r--apache/org/apache/james/mime4j/field/address/parser/ASTaddr_spec.java19
-rw-r--r--apache/org/apache/james/mime4j/field/address/parser/ASTaddress.java19
-rw-r--r--apache/org/apache/james/mime4j/field/address/parser/ASTaddress_list.java19
-rw-r--r--apache/org/apache/james/mime4j/field/address/parser/ASTangle_addr.java19
-rw-r--r--apache/org/apache/james/mime4j/field/address/parser/ASTdomain.java19
-rw-r--r--apache/org/apache/james/mime4j/field/address/parser/ASTgroup_body.java19
-rw-r--r--apache/org/apache/james/mime4j/field/address/parser/ASTlocal_part.java19
-rw-r--r--apache/org/apache/james/mime4j/field/address/parser/ASTmailbox.java19
-rw-r--r--apache/org/apache/james/mime4j/field/address/parser/ASTname_addr.java19
-rw-r--r--apache/org/apache/james/mime4j/field/address/parser/ASTphrase.java19
-rw-r--r--apache/org/apache/james/mime4j/field/address/parser/ASTroute.java19
-rw-r--r--apache/org/apache/james/mime4j/field/address/parser/AddressListParser.java977
-rw-r--r--apache/org/apache/james/mime4j/field/address/parser/AddressListParser.jj595
-rw-r--r--apache/org/apache/james/mime4j/field/address/parser/AddressListParserConstants.java76
-rw-r--r--apache/org/apache/james/mime4j/field/address/parser/AddressListParserTokenManager.java1009
-rw-r--r--apache/org/apache/james/mime4j/field/address/parser/AddressListParserTreeConstants.java35
-rw-r--r--apache/org/apache/james/mime4j/field/address/parser/AddressListParserVisitor.java19
-rw-r--r--apache/org/apache/james/mime4j/field/address/parser/BaseNode.java30
-rw-r--r--apache/org/apache/james/mime4j/field/address/parser/JJTAddressListParserState.java123
-rw-r--r--apache/org/apache/james/mime4j/field/address/parser/Node.java37
-rw-r--r--apache/org/apache/james/mime4j/field/address/parser/ParseException.java207
-rw-r--r--apache/org/apache/james/mime4j/field/address/parser/SimpleCharStream.java454
-rw-r--r--apache/org/apache/james/mime4j/field/address/parser/SimpleNode.java87
-rw-r--r--apache/org/apache/james/mime4j/field/address/parser/Token.java96
-rw-r--r--apache/org/apache/james/mime4j/field/address/parser/TokenMgrError.java148
-rw-r--r--apache/org/apache/james/mime4j/field/contenttype/parser/ContentTypeParser.java268
-rw-r--r--apache/org/apache/james/mime4j/field/contenttype/parser/ContentTypeParserConstants.java62
-rw-r--r--apache/org/apache/james/mime4j/field/contenttype/parser/ContentTypeParserTokenManager.java877
-rw-r--r--apache/org/apache/james/mime4j/field/contenttype/parser/ParseException.java207
-rw-r--r--apache/org/apache/james/mime4j/field/contenttype/parser/SimpleCharStream.java454
-rw-r--r--apache/org/apache/james/mime4j/field/contenttype/parser/Token.java96
-rw-r--r--apache/org/apache/james/mime4j/field/contenttype/parser/TokenMgrError.java148
-rw-r--r--apache/org/apache/james/mime4j/field/datetime/DateTime.java127
-rw-r--r--apache/org/apache/james/mime4j/field/datetime/parser/DateTimeParser.java570
-rw-r--r--apache/org/apache/james/mime4j/field/datetime/parser/DateTimeParserConstants.java86
-rw-r--r--apache/org/apache/james/mime4j/field/datetime/parser/DateTimeParserTokenManager.java882
-rw-r--r--apache/org/apache/james/mime4j/field/datetime/parser/ParseException.java207
-rw-r--r--apache/org/apache/james/mime4j/field/datetime/parser/SimpleCharStream.java454
-rw-r--r--apache/org/apache/james/mime4j/field/datetime/parser/Token.java96
-rw-r--r--apache/org/apache/james/mime4j/field/datetime/parser/TokenMgrError.java148
-rw-r--r--apache/org/apache/james/mime4j/util/CharsetUtil.java1249
-rw-r--r--assets/quantum/res/drawable/quantum_ic_business_vd_theme_24.xml10
-rw-r--r--assets/quantum/res/drawable/quantum_ic_report_vd_theme_24.xml10
-rw-r--r--assets/quantum/res/drawable/quantum_ic_voicemail_vd_theme_24.xml10
-rw-r--r--java/com/android/contacts/common/ContactPhotoManager.java18
-rw-r--r--java/com/android/contacts/common/dialog/CallSubjectDialog.java12
-rw-r--r--java/com/android/contacts/common/lettertiles/LetterTileDrawable.java100
-rw-r--r--java/com/android/contacts/common/list/OnPhoneNumberPickerActionListener.java4
-rw-r--r--java/com/android/contacts/common/list/PhoneNumberPickerFragment.java19
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_ab_search.pngbin0 -> 1115 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_arrow_back_24dp.pngbin0 -> 612 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_business_white_120dp.pngbin0 -> 2477 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_call_24dp.pngbin0 -> 340 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_call_note_white_24dp.pngbin0 -> 373 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_close_dk.pngbin0 -> 609 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_create_24dp.pngbin0 -> 370 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_group_white_24dp.pngbin0 -> 389 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_history_white_drawable_24dp.pngbin0 -> 525 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_info_outline_24dp.pngbin0 -> 485 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_menu_back.pngbin0 -> 799 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_menu_group_dk.pngbin0 -> 1954 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_menu_group_lt.pngbin0 -> 1922 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_menu_overflow_lt.pngbin0 -> 220 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_menu_person_dk.pngbin0 -> 1439 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_menu_person_lt.pngbin0 -> 1416 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_menu_remove_field_holo_light.pngbin0 -> 515 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_menu_star_dk.pngbin0 -> 1438 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_menu_star_holo_light.pngbin0 -> 1211 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_menu_star_lt.pngbin0 -> 1414 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_person_24dp.pngbin0 -> 273 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_phone_attach.pngbin0 -> 828 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_rx_videocam.pngbin0 -> 413 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_scroll_handle.pngbin0 -> 544 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_tx_videocam.pngbin0 -> 370 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_videocam.pngbin0 -> 269 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/ic_voicemail_avatar.pngbin0 -> 2856 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/list_activated_holo.9.pngbin0 -> 154 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/list_background_holo.9.pngbin0 -> 224 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/list_focused_holo.9.pngbin0 -> 235 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/list_longpressed_holo_light.9.pngbin0 -> 158 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/list_pressed_holo_light.9.pngbin0 -> 159 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/list_section_divider_holo_custom.9.pngbin0 -> 205 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-hdpi/list_title_holo.9.pngbin0 -> 267 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-mdpi/ic_business_white_120dp.pngbin2040 -> 0 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-mdpi/ic_voicemail_avatar.pngbin1752 -> 0 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-xhdpi/ic_business_white_120dp.pngbin2916 -> 0 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-xhdpi/ic_voicemail_avatar.pngbin3783 -> 0 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-xxhdpi/ic_business_white_120dp.pngbin2541 -> 0 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-xxhdpi/ic_voicemail_avatar.pngbin6206 -> 0 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-xxxhdpi/ic_business_white_120dp.pngbin2915 -> 0 bytes
-rw-r--r--java/com/android/contacts/common/res/drawable-xxxhdpi/ic_voicemail_avatar.pngbin8570 -> 0 bytes
-rw-r--r--java/com/android/contacts/common/res/mipmap-hdpi/ic_contacts_launcher.pngbin0 -> 3169 bytes
-rw-r--r--java/com/android/contacts/common/res/values-b+sr+Latn/strings.xml267
-rw-r--r--java/com/android/contacts/common/res/values/colors.xml2
-rw-r--r--java/com/android/dialer/app/AndroidManifest.xml10
-rw-r--r--java/com/android/dialer/app/DialtactsActivity.java6
-rw-r--r--java/com/android/dialer/app/calllog/BlockReportSpamListener.java13
-rw-r--r--java/com/android/dialer/app/calllog/CallLogActivity.java2
-rw-r--r--java/com/android/dialer/app/calllog/CallLogAdapter.java160
-rw-r--r--java/com/android/dialer/app/calllog/CallLogListItemHelper.java2
-rw-r--r--java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java192
-rw-r--r--java/com/android/dialer/app/calllog/DefaultVoicemailNotifier.java110
-rw-r--r--java/com/android/dialer/app/calllog/IntentProvider.java6
-rw-r--r--java/com/android/dialer/app/calllog/MissedCallNotifier.java2
-rw-r--r--java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java7
-rw-r--r--java/com/android/dialer/app/calllog/VisualVoicemailCallLogFragment.java18
-rw-r--r--java/com/android/dialer/app/calllog/VoicemailQueryHandler.java4
-rw-r--r--java/com/android/dialer/app/contactinfo/ContactInfoCache.java5
-rw-r--r--java/com/android/dialer/app/dialpad/DialpadFragment.java2
-rw-r--r--java/com/android/dialer/app/filterednumber/BlockedNumbersAdapter.java4
-rw-r--r--java/com/android/dialer/app/filterednumber/BlockedNumbersSettingsActivity.java2
-rw-r--r--java/com/android/dialer/app/list/BlockedListSearchFragment.java14
-rw-r--r--java/com/android/dialer/app/list/DialtactsPagerAdapter.java47
-rw-r--r--java/com/android/dialer/app/list/ListsFragment.java13
-rw-r--r--java/com/android/dialer/app/list/OldSpeedDialFragment.java16
-rw-r--r--java/com/android/dialer/app/list/RegularSearchFragment.java4
-rw-r--r--java/com/android/dialer/app/list/SearchFragment.java28
-rw-r--r--java/com/android/dialer/app/list/SmartDialSearchFragment.java4
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/empty_call_log.pngbin0 -> 3538 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/empty_contacts.pngbin0 -> 2461 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/empty_speed_dial.pngbin0 -> 6041 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_archive_white_24dp.pngbin0 -> 247 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_content_copy_24dp.pngbin0 -> 203 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_delete_24dp.pngbin0 -> 242 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_dialer_fork_add_call.pngbin0 -> 1649 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_dialer_fork_current_call.pngbin0 -> 2305 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_dialer_fork_tt_keypad.pngbin0 -> 2419 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_grade_24dp.pngbin0 -> 370 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_handle.pngbin0 -> 543 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_menu_history_lt.pngbin0 -> 1565 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_mic_grey600.pngbin0 -> 377 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_more_vert_24dp.pngbin0 -> 134 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_not_interested_googblue_24dp.pngbin0 -> 565 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_not_spam.pngbin0 -> 858 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_pause_24dp.pngbin0 -> 105 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_people_24dp.pngbin0 -> 299 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_phone_24dp.pngbin0 -> 347 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_play_arrow_24dp.pngbin0 -> 195 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_remove.pngbin0 -> 884 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_results_phone.pngbin0 -> 1084 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_schedule_24dp.pngbin0 -> 575 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_share_white_24dp.pngbin0 -> 397 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_star.pngbin0 -> 732 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_unblock.pngbin0 -> 1049 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_vm_sound_off_dis.pngbin0 -> 1339 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_vm_sound_off_dk.pngbin0 -> 1337 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_vm_sound_on_dis.pngbin0 -> 1755 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_vm_sound_on_dk.pngbin0 -> 1750 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_voicemail_24dp.pngbin0 -> 478 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_volume_down_24dp.pngbin0 -> 186 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/ic_volume_up_24dp.pngbin0 -> 365 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/search_shadow.9.pngbin0 -> 183 bytes
-rw-r--r--java/com/android/dialer/app/res/drawable-hdpi/shadow_contact_photo.pngbin0 -> 960 bytes
-rw-r--r--java/com/android/dialer/app/res/layout/all_contacts_fragment.xml4
-rw-r--r--java/com/android/dialer/app/res/menu/actionbar_delete.xml2
-rw-r--r--java/com/android/dialer/app/res/mipmap-hdpi/ic_launcher_phone.pngbin0 -> 2780 bytes
-rw-r--r--java/com/android/dialer/app/res/values-af/strings.xml7
-rw-r--r--java/com/android/dialer/app/res/values-am/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-ar/strings.xml7
-rw-r--r--java/com/android/dialer/app/res/values-az/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-b+sr+Latn/strings.xml234
-rw-r--r--java/com/android/dialer/app/res/values-be/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-bg/strings.xml7
-rw-r--r--java/com/android/dialer/app/res/values-bn/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-bs/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-ca/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-cs/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-da/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-de/strings.xml10
-rw-r--r--java/com/android/dialer/app/res/values-el/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-en-rAU/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-en-rGB/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-en-rIN/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-es-rUS/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-es/strings.xml7
-rw-r--r--java/com/android/dialer/app/res/values-et/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-eu/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-fa/strings.xml10
-rw-r--r--java/com/android/dialer/app/res/values-fi/strings.xml7
-rw-r--r--java/com/android/dialer/app/res/values-fr-rCA/strings.xml7
-rw-r--r--java/com/android/dialer/app/res/values-fr/strings.xml7
-rw-r--r--java/com/android/dialer/app/res/values-gl/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-gu/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-hi/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-hr/strings.xml10
-rw-r--r--java/com/android/dialer/app/res/values-hu/strings.xml10
-rw-r--r--java/com/android/dialer/app/res/values-hy/strings.xml7
-rw-r--r--java/com/android/dialer/app/res/values-in/strings.xml12
-rw-r--r--java/com/android/dialer/app/res/values-is/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-it/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-iw/strings.xml7
-rw-r--r--java/com/android/dialer/app/res/values-ja/strings.xml7
-rw-r--r--java/com/android/dialer/app/res/values-ka/strings.xml10
-rw-r--r--java/com/android/dialer/app/res/values-kk/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-km/strings.xml7
-rw-r--r--java/com/android/dialer/app/res/values-kn/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-ko/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-ky/strings.xml10
-rw-r--r--java/com/android/dialer/app/res/values-lo/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-lt/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-lv/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-mk/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-ml/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-mn/strings.xml7
-rw-r--r--java/com/android/dialer/app/res/values-mr/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-ms/strings.xml10
-rw-r--r--java/com/android/dialer/app/res/values-my/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-nb/strings.xml7
-rw-r--r--java/com/android/dialer/app/res/values-ne/strings.xml7
-rw-r--r--java/com/android/dialer/app/res/values-nl/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-no/strings.xml7
-rw-r--r--java/com/android/dialer/app/res/values-pa/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-pl/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-pt-rBR/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-pt-rPT/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-pt/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-ro/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-ru/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-si/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-sk/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-sl/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-sq/strings.xml10
-rw-r--r--java/com/android/dialer/app/res/values-sr/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-sv/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-sw/strings.xml10
-rw-r--r--java/com/android/dialer/app/res/values-ta/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-te/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-th/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-tl/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-tr/strings.xml10
-rw-r--r--java/com/android/dialer/app/res/values-uk/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-ur/strings.xml10
-rw-r--r--java/com/android/dialer/app/res/values-uz/strings.xml10
-rw-r--r--java/com/android/dialer/app/res/values-vi/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-zh-rCN/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values-zh-rHK/strings.xml7
-rw-r--r--java/com/android/dialer/app/res/values-zh-rTW/strings.xml10
-rw-r--r--java/com/android/dialer/app/res/values-zu/strings.xml8
-rw-r--r--java/com/android/dialer/app/res/values/strings.xml12
-rw-r--r--java/com/android/dialer/app/voicemail/LegacyVoicemailNotificationReceiver.java90
-rw-r--r--java/com/android/dialer/app/voicemail/VoicemailErrorManager.java70
-rw-r--r--java/com/android/dialer/app/voicemail/VoicemailPlaybackLayout.java2
-rw-r--r--java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java2
-rw-r--r--java/com/android/dialer/app/voicemail/error/OmtpVoicemailMessageCreator.java21
-rw-r--r--java/com/android/dialer/app/voicemail/error/VoicemailErrorAlert.java2
-rw-r--r--java/com/android/dialer/app/voicemail/error/VoicemailErrorMessage.java8
-rw-r--r--java/com/android/dialer/app/voicemail/error/VoicemailStatus.java63
-rw-r--r--java/com/android/dialer/app/voicemail/error/VoicemailStatusCorruptionHandler.java2
-rw-r--r--java/com/android/dialer/app/voicemail/error/Vvm3VoicemailMessageCreator.java11
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/drawable-hdpi/ic_voicemail_error_24px.pngbin0 -> 638 bytes
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/drawable-mdpi/ic_voicemail_error_24px.pngbin0 -> 339 bytes
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/drawable-xhdpi/ic_voicemail_error_24px.pngbin0 -> 589 bytes
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/drawable-xxhdpi/ic_voicemail_error_24px.pngbin0 -> 813 bytes
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/drawable-xxxhdpi/ic_voicemail_error_24px.pngbin0 -> 1043 bytes
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/layout/voicemail_error_message_fragment.xml149
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-af/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-am/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-ar/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-az/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-b+sr+Latn/strings.xml110
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-be/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-bg/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-bn/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-bs/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-ca/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-cs/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-da/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-de/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-el/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-en-rAU/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-en-rGB/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-en-rIN/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-es-rUS/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-es/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-et/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-eu/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-fa/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-fi/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-fr-rCA/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-fr/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-gl/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-gu/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-hi/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-hr/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-hu/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-hy/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-in/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-is/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-it/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-iw/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-ja/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-ka/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-kk/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-km/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-kn/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-ko/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-ky/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-lo/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-lt/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-lv/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-mk/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-ml/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-mn/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-mr/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-ms/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-my/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-nb/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-ne/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-nl/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-no/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-pa/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-pl/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-pt-rBR/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-pt-rPT/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-pt/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-ro/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-ru/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-si/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-sk/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-sl/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-sq/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-sr/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-sv/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-sw/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-ta/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-te/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-th/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-tl/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-tr/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-uk/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-ur/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-uz/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-vi/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-zh-rCN/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-zh-rHK/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-zh-rTW/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values-zu/strings.xml8
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values/dimens.xml13
-rw-r--r--java/com/android/dialer/app/voicemail/error/res/values/strings.xml8
-rw-r--r--java/com/android/dialer/backup/DialerBackupAgent.java5
-rw-r--r--java/com/android/dialer/backup/DialerBackupUtils.java111
-rw-r--r--java/com/android/dialer/backup/nano/VoicemailInfo.java399
-rw-r--r--java/com/android/dialer/backup/proto/voicemail_info.proto30
-rw-r--r--java/com/android/dialer/binary/aosp/AospDialerRootComponent.java2
-rw-r--r--java/com/android/dialer/binary/basecomponent/BaseDialerRootComponent.java6
-rw-r--r--java/com/android/dialer/binary/common/DialerApplication.java2
-rw-r--r--java/com/android/dialer/blocking/BlockNumberDialogFragment.java2
-rw-r--r--java/com/android/dialer/blocking/FilteredNumbersUtil.java2
-rw-r--r--java/com/android/dialer/blocking/res/drawable-hdpi/ic_block_24dp.pngbin0 -> 478 bytes
-rw-r--r--java/com/android/dialer/blocking/res/drawable-hdpi/ic_report_24dp.pngbin0 -> 240 bytes
-rw-r--r--java/com/android/dialer/blocking/res/drawable-hdpi/ic_report_white_36dp.pngbin0 -> 312 bytes
-rw-r--r--java/com/android/dialer/blocking/res/values-b+sr+Latn/strings.xml46
-rw-r--r--java/com/android/dialer/callcomposer/CallComposerActivity.java103
-rw-r--r--java/com/android/dialer/callcomposer/CameraComposerFragment.java2
-rw-r--r--java/com/android/dialer/callcomposer/CopyAndResizeImageWorker.java70
-rw-r--r--java/com/android/dialer/callcomposer/GalleryComposerFragment.java65
-rw-r--r--java/com/android/dialer/callcomposer/camera/ImagePersistTask.java6
-rw-r--r--java/com/android/dialer/callcomposer/cameraui/res/values-b+sr+Latn/strings.xml11
-rw-r--r--java/com/android/dialer/callcomposer/nano/CallComposerContact.java220
-rw-r--r--java/com/android/dialer/callcomposer/proto/call_composer_contact.proto18
-rw-r--r--java/com/android/dialer/callcomposer/res/values-b+sr+Latn/strings.xml33
-rw-r--r--java/com/android/dialer/callcomposer/util/BitmapResizer.java67
-rw-r--r--java/com/android/dialer/callcomposer/util/CopyAndResizeImageTask.java124
-rw-r--r--java/com/android/dialer/calldetails/CallDetailsActivity.java33
-rw-r--r--java/com/android/dialer/calldetails/CallDetailsAdapter.java24
-rw-r--r--java/com/android/dialer/calldetails/CallDetailsEntryViewHolder.java49
-rw-r--r--java/com/android/dialer/calldetails/CallDetailsFooterViewHolder.java8
-rw-r--r--java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java36
-rw-r--r--java/com/android/dialer/calldetails/nano/CallDetailsEntries.java440
-rw-r--r--java/com/android/dialer/calldetails/proto/call_details_entries.proto23
-rw-r--r--java/com/android/dialer/calldetails/res/layout/call_details_footer.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/layout/contact_container.xml10
-rw-r--r--java/com/android/dialer/calldetails/res/values-af/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-am/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-ar/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-az/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-b+sr+Latn/strings.xml29
-rw-r--r--java/com/android/dialer/calldetails/res/values-be/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-bg/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-bn/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-bs/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-ca/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-cs/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-da/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-de/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-el/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-en-rAU/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-en-rGB/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-en-rIN/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-es-rUS/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-es/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-et/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-eu/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-fa/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-fi/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-fr-rCA/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-fr/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-gl/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-gu/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-hi/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-hr/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-hu/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-hy/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-in/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-is/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-it/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-iw/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-ja/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-ka/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-kk/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-km/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-kn/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-ko/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-ky/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-lo/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-lt/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-lv/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-mk/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-ml/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-mn/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-mr/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-ms/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-my/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-nb/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-ne/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-nl/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-no/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-pa/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-pl/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-pt-rBR/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-pt-rPT/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-pt/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-ro/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-ru/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-si/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-sk/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-sl/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-sq/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-sr/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-sv/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-sw/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-ta/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-te/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-th/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-tl/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-tr/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-uk/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-ur/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-uz/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-vi/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-zh-rCN/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-zh-rHK/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-zh-rTW/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values-zu/strings.xml1
-rw-r--r--java/com/android/dialer/calldetails/res/values/dimens.xml10
-rw-r--r--java/com/android/dialer/calldetails/res/values/strings.xml7
-rw-r--r--java/com/android/dialer/callintent/CallIntentBuilder.java15
-rw-r--r--java/com/android/dialer/callintent/CallIntentParser.java9
-rw-r--r--java/com/android/dialer/callintent/call_initiation_type.proto60
-rw-r--r--java/com/android/dialer/callintent/call_specific_app_data.proto20
-rw-r--r--java/com/android/dialer/callintent/nano/CallInitiationType.java102
-rw-r--r--java/com/android/dialer/callintent/nano/CallSpecificAppData.java143
-rw-r--r--java/com/android/dialer/calllog/CallLogComponent.java37
-rw-r--r--java/com/android/dialer/calllog/CallLogFramework.java117
-rw-r--r--java/com/android/dialer/calllog/CallLogModule.java62
-rw-r--r--java/com/android/dialer/calllog/DataSources.java31
-rw-r--r--java/com/android/dialer/calllog/RefreshAnnotatedCallLogWorker.java183
-rw-r--r--java/com/android/dialer/calllog/database/AnnotatedCallLog.java53
-rw-r--r--java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java58
-rw-r--r--java/com/android/dialer/calllog/database/CallLogMutations.java58
-rw-r--r--java/com/android/dialer/calllog/datasources/CallLogDataSource.java68
-rw-r--r--java/com/android/dialer/calllog/datasources/contacts/ContactsDataSource.java58
-rw-r--r--java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java114
-rw-r--r--java/com/android/dialer/calllog/ui/AndroidManifest.xml16
-rw-r--r--java/com/android/dialer/calllog/ui/AnnotatedCallLogCursorLoader.java48
-rw-r--r--java/com/android/dialer/calllog/ui/NewCallLogFragment.java138
-rw-r--r--java/com/android/dialer/calllog/ui/res/layout/new_call_log_entry.xml33
-rw-r--r--java/com/android/dialer/calllog/ui/res/layout/new_call_log_fragment.xml22
-rw-r--r--java/com/android/dialer/calllogutils/CallEntryFormatter.java19
-rw-r--r--java/com/android/dialer/calllogutils/CallTypeIconsView.java28
-rw-r--r--java/com/android/dialer/calllogutils/PhoneCallDetails.java4
-rw-r--r--java/com/android/dialer/calllogutils/res/values-af/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-am/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-ar/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-az/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-b+sr+Latn/strings.xml42
-rw-r--r--java/com/android/dialer/calllogutils/res/values-be/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-bg/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-bn/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-bs/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-ca/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-cs/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-da/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-de/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-el/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-en-rAU/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-en-rGB/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-en-rIN/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-es-rUS/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-es/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-et/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-eu/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-fa/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-fi/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-fr-rCA/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-fr/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-gl/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-gu/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-hi/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-hr/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-hu/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-hy/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-in/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-is/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-it/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-iw/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-ja/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-ka/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-kk/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-km/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-kn/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-ko/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-ky/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-lo/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-lt/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-lv/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-mk/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-ml/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-mn/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-mr/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-ms/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-my/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-nb/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-ne/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-nl/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-no/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-pa/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-pl/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-pt-rBR/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-pt-rPT/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-pt/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-ro/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-ru/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-si/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-sk/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-sl/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-sq/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-sr/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-sv/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-sw/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-ta/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-te/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-th/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-tl/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-tr/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-uk/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-ur/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-uz/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-vi/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-zh-rCN/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-zh-rHK/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-zh-rTW/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values-zu/strings.xml6
-rw-r--r--java/com/android/dialer/calllogutils/res/values/strings.xml10
-rw-r--r--java/com/android/dialer/common/concurrent/DefaultDialerExecutorFactory.java21
-rw-r--r--java/com/android/dialer/common/concurrent/DialerExecutor.java2
-rw-r--r--java/com/android/dialer/common/res/values-b+sr+Latn/strings.xml6
-rw-r--r--java/com/android/dialer/constants/ScheduledJobIds.java3
-rw-r--r--java/com/android/dialer/contactsfragment/AndroidManifest.xml16
-rw-r--r--java/com/android/dialer/contactsfragment/ContactViewHolder.java82
-rw-r--r--java/com/android/dialer/contactsfragment/ContactsAdapter.java149
-rw-r--r--java/com/android/dialer/contactsfragment/ContactsCursorLoader.java53
-rw-r--r--java/com/android/dialer/contactsfragment/ContactsFragment.java112
-rw-r--r--java/com/android/dialer/contactsfragment/res/layout/contact_row.xml55
-rw-r--r--java/com/android/dialer/contactsfragment/res/layout/fragment_contacts.xml30
-rw-r--r--java/com/android/dialer/contactsfragment/res/layout/header.xml26
-rw-r--r--java/com/android/dialer/contactsfragment/res/values/dimens.xml28
-rw-r--r--java/com/android/dialer/dialpadview/res/drawable-hdpi/ic_close_black_24dp.pngbin0 -> 207 bytes
-rw-r--r--java/com/android/dialer/dialpadview/res/drawable-hdpi/ic_dialpad_delete.pngbin0 -> 805 bytes
-rw-r--r--java/com/android/dialer/dialpadview/res/drawable-hdpi/ic_dialpad_voicemail.pngbin0 -> 623 bytes
-rw-r--r--java/com/android/dialer/dialpadview/res/drawable-hdpi/ic_overflow_menu.pngbin0 -> 503 bytes
-rw-r--r--java/com/android/dialer/dialpadview/res/layout/dialpad_view.xml2
-rw-r--r--java/com/android/dialer/dialpadview/res/layout/dialpad_view_unthemed.xml1
-rw-r--r--java/com/android/dialer/dialpadview/res/values-b+sr+Latn/strings.xml25
-rw-r--r--java/com/android/dialer/dialpadview/res/values/attrs.xml1
-rw-r--r--java/com/android/dialer/dialpadview/res/values/styles.xml1
-rw-r--r--java/com/android/dialer/enrichedcall/EnrichedCallManager.java6
-rw-r--r--java/com/android/dialer/enrichedcall/historyquery/nano/HistoryResult.java203
-rw-r--r--java/com/android/dialer/enrichedcall/historyquery/proto/history_result.proto23
-rw-r--r--java/com/android/dialer/enrichedcall/stub/EnrichedCallManagerStub.java6
-rw-r--r--java/com/android/dialer/interactions/PhoneNumberInteraction.java2
-rw-r--r--java/com/android/dialer/interactions/res/values-b+sr+Latn/strings.xml23
-rw-r--r--java/com/android/dialer/logging/LoggingBindings.java22
-rw-r--r--java/com/android/dialer/logging/LoggingBindingsStub.java10
-rw-r--r--java/com/android/dialer/logging/contact_lookup_result.proto32
-rw-r--r--java/com/android/dialer/logging/contact_source.proto38
-rw-r--r--java/com/android/dialer/logging/dialer_impression.proto384
-rw-r--r--java/com/android/dialer/logging/interaction_event.proto46
-rw-r--r--java/com/android/dialer/logging/nano/ContactLookupResult.java92
-rw-r--r--java/com/android/dialer/logging/nano/ContactSource.java91
-rw-r--r--java/com/android/dialer/logging/nano/DialerImpression.java249
-rw-r--r--java/com/android/dialer/logging/nano/InteractionEvent.java95
-rw-r--r--java/com/android/dialer/logging/nano/ReportingLocation.java88
-rw-r--r--java/com/android/dialer/logging/nano/ScreenEvent.java104
-rw-r--r--java/com/android/dialer/logging/reporting_location.proto16
-rw-r--r--java/com/android/dialer/logging/screen_event.proto71
-rw-r--r--java/com/android/dialer/notification/NotificationChannelManager.java2
-rw-r--r--java/com/android/dialer/notification/res/values-b+sr+Latn/strings.xml26
-rw-r--r--java/com/android/dialer/notification/res/values/ids.xml3
-rw-r--r--java/com/android/dialer/persistentlog/PersistentLogFileHandler.java3
-rw-r--r--java/com/android/dialer/phonenumbercache/CachedNumberLookupService.java28
-rw-r--r--java/com/android/dialer/phonenumbercache/ContactInfo.java9
-rw-r--r--java/com/android/dialer/phonenumbercache/ContactInfoHelper.java11
-rw-r--r--java/com/android/dialer/phonenumberutil/res/values-b+sr+Latn/strings.xml22
-rw-r--r--java/com/android/dialer/postcall/PostCall.java2
-rw-r--r--java/com/android/dialer/postcall/res/values-b+sr+Latn/strings.xml27
-rw-r--r--java/com/android/dialer/protos/ProtoParsers.java167
-rw-r--r--java/com/android/dialer/shortcuts/CallContactActivity.java10
-rw-r--r--java/com/android/dialer/shortcuts/res/values-b+sr+Latn/strings.xml25
-rw-r--r--java/com/android/dialer/spam/SpamBindings.java43
-rw-r--r--java/com/android/dialer/spam/SpamBindingsStub.java28
-rw-r--r--java/com/android/dialer/speeddial/res/values-b+sr+Latn/strings.xml20
-rw-r--r--java/com/android/dialer/theme/res/drawable-hdpi/ic_block_24dp.pngbin0 -> 478 bytes
-rw-r--r--java/com/android/dialer/theme/res/values-b+sr+Latn/strings.xml23
-rw-r--r--java/com/android/dialer/util/res/values-b+sr+Latn/strings.xml26
-rw-r--r--java/com/android/dialer/voicemailstatus/res/values-b+sr+Latn/strings.xml26
-rw-r--r--java/com/android/dialer/widget/DialerToolbar.java1
-rw-r--r--java/com/android/dialer/widget/MessageFragment.java11
-rw-r--r--java/com/android/dialer/widget/res/layout/fragment_message.xml4
-rw-r--r--java/com/android/dialer/widget/res/values-af/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-am/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-ar/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-az/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-b+sr+Latn/strings.xml6
-rw-r--r--java/com/android/dialer/widget/res/values-be/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-bg/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-bn/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-bs/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-ca/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-cs/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-da/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-de/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-el/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-en-rAU/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-en-rGB/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-en-rIN/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-es-rUS/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-es/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-et/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-eu/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-fa/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-fi/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-fr-rCA/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-fr/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-gl/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-gu/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-hi/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-hr/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-hu/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-hy/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-in/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-is/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-it/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-iw/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-ja/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-ka/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-kk/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-km/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-kn/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-ko/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-ky/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-lo/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-lt/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-lv/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-mk/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-ml/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-mn/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-mr/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-ms/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-my/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-nb/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-ne/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-nl/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-no/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-pa/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-pl/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-pt-rBR/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-pt-rPT/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-pt/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-ro/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-ru/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-si/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-sk/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-sl/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-sq/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-sr/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-sv/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-sw/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-ta/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-te/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-th/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-tl/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-tr/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-uk/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-ur/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-uz/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-vi/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-zh-rCN/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-zh-rHK/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-zh-rTW/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values-zu/strings.xml1
-rw-r--r--java/com/android/dialer/widget/res/values/dimens.xml1
-rw-r--r--java/com/android/dialer/widget/res/values/strings.xml3
-rw-r--r--java/com/android/incallui/AnswerScreenPresenter.java17
-rw-r--r--java/com/android/incallui/CallButtonPresenter.java10
-rw-r--r--java/com/android/incallui/CallCardPresenter.java11
-rw-r--r--java/com/android/incallui/ConferenceManagerFragment.java2
-rw-r--r--java/com/android/incallui/ContactInfoCache.java34
-rw-r--r--java/com/android/incallui/InCallActivity.java2
-rw-r--r--java/com/android/incallui/InCallActivityCommon.java3
-rw-r--r--java/com/android/incallui/InCallPresenter.java20
-rw-r--r--java/com/android/incallui/InCallServiceImpl.java1
-rw-r--r--java/com/android/incallui/NotificationBroadcastReceiver.java2
-rw-r--r--java/com/android/incallui/ProximitySensor.java3
-rw-r--r--java/com/android/incallui/StatusBarNotifier.java24
-rw-r--r--java/com/android/incallui/answer/impl/AnswerFragment.java2
-rw-r--r--java/com/android/incallui/answer/impl/answermethod/FlingUpDownMethod.java76
-rw-r--r--java/com/android/incallui/answer/impl/answermethod/res/layout/swipe_up_down_method.xml167
-rw-r--r--java/com/android/incallui/answer/impl/answermethod/res/values-b+sr+Latn/strings.xml12
-rw-r--r--java/com/android/incallui/answer/impl/hint/PawSecretCodeListener.java2
-rw-r--r--java/com/android/incallui/answer/impl/hint/res/values-b+sr+Latn/strings.xml6
-rw-r--r--java/com/android/incallui/answer/impl/res/layout/fragment_avatar.xml3
-rw-r--r--java/com/android/incallui/answer/impl/res/layout/fragment_incoming_call.xml201
-rw-r--r--java/com/android/incallui/answer/impl/res/values-b+sr+Latn/strings.xml24
-rw-r--r--java/com/android/incallui/answer/impl/res/values-h480dp/dimens.xml1
-rw-r--r--java/com/android/incallui/answer/impl/res/values-h540dp/dimens.xml1
-rw-r--r--java/com/android/incallui/answer/impl/res/values/dimens.xml1
-rw-r--r--java/com/android/incallui/audiomode/AudioModeProvider.java (renamed from java/com/android/incallui/AudioModeProvider.java)2
-rw-r--r--java/com/android/incallui/audioroute/res/values-b+sr+Latn/strings.xml8
-rw-r--r--java/com/android/incallui/bindings/PhoneNumberService.java3
-rw-r--r--java/com/android/incallui/call/CallList.java6
-rw-r--r--java/com/android/incallui/call/DialerCall.java127
-rw-r--r--java/com/android/incallui/calllocation/impl/LocationFragment.java2
-rw-r--r--java/com/android/incallui/calllocation/impl/LocationPresenter.java2
-rw-r--r--java/com/android/incallui/commontheme/res/values-b+sr+Latn/strings.xml18
-rw-r--r--java/com/android/incallui/contactgrid/res/values-b+sr+Latn/strings.xml22
-rw-r--r--java/com/android/incallui/hold/res/values-b+sr+Latn/strings.xml5
-rw-r--r--java/com/android/incallui/incall/impl/ButtonChooserFactory.java6
-rw-r--r--java/com/android/incallui/incall/impl/InCallFragment.java4
-rw-r--r--java/com/android/incallui/incall/impl/res/layout/frag_incall_voice.xml4
-rw-r--r--java/com/android/incallui/incall/impl/res/values-b+sr+Latn/strings.xml18
-rw-r--r--java/com/android/incallui/res/drawable-hdpi/ic_block_grey600_24dp.pngbin0 -> 518 bytes
-rw-r--r--java/com/android/incallui/res/drawable-hdpi/ic_call_end_white_24dp.pngbin0 -> 454 bytes
-rw-r--r--java/com/android/incallui/res/drawable-hdpi/ic_call_split_white_24dp.pngbin0 -> 326 bytes
-rw-r--r--java/com/android/incallui/res/drawable-hdpi/ic_close_grey600_24dp.pngbin0 -> 225 bytes
-rw-r--r--java/com/android/incallui/res/drawable-hdpi/ic_location_on_white_24dp.pngbin0 -> 371 bytes
-rw-r--r--java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_01.pngbin0 -> 577 bytes
-rw-r--r--java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_02.pngbin0 -> 650 bytes
-rw-r--r--java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_03.pngbin0 -> 803 bytes
-rw-r--r--java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_04.pngbin0 -> 1009 bytes
-rw-r--r--java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_05.pngbin0 -> 946 bytes
-rw-r--r--java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_06.pngbin0 -> 856 bytes
-rw-r--r--java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_07.pngbin0 -> 577 bytes
-rw-r--r--java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_08.pngbin0 -> 577 bytes
-rw-r--r--java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_09.pngbin0 -> 577 bytes
-rw-r--r--java/com/android/incallui/res/drawable-hdpi/ic_person_add_grey600_24dp.pngbin0 -> 300 bytes
-rw-r--r--java/com/android/incallui/res/drawable-hdpi/ic_phone_paused_white_24dp.pngbin0 -> 458 bytes
-rw-r--r--java/com/android/incallui/res/drawable-hdpi/ic_question_mark.pngbin0 -> 845 bytes
-rw-r--r--java/com/android/incallui/res/drawable-hdpi/ic_schedule_white_24dp.pngbin0 -> 575 bytes
-rw-r--r--java/com/android/incallui/res/drawable-hdpi/img_business.pngbin0 -> 3311 bytes
-rw-r--r--java/com/android/incallui/res/drawable-hdpi/img_conference.pngbin0 -> 7037 bytes
-rw-r--r--java/com/android/incallui/res/drawable-hdpi/img_no_image.pngbin0 -> 5362 bytes
-rw-r--r--java/com/android/incallui/res/drawable-hdpi/img_phone.pngbin0 -> 6157 bytes
-rw-r--r--java/com/android/incallui/res/layout/incall_dialpad_fragment.xml2
-rw-r--r--java/com/android/incallui/res/values-af/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-am/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-ar/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-az/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-b+sr+Latn/strings.xml141
-rw-r--r--java/com/android/incallui/res/values-be/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-bg/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-bn/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-bs/strings.xml6
-rw-r--r--java/com/android/incallui/res/values-ca/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-cs/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-da/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-de/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-el/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-en-rAU/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-en-rGB/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-en-rIN/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-es-rUS/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-es/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-et/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-eu/strings.xml55
-rw-r--r--java/com/android/incallui/res/values-fa/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-fi/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-fr-rCA/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-fr/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-gl/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-gu/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-hi/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-hr/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-hu/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-hy/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-in/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-is/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-it/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-iw/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-ja/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-ka/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-kk/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-km/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-kn/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-ko/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-ky/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-lo/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-lt/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-lv/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-mk/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-ml/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-mn/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-mr/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-ms/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-my/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-nb/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-ne/strings.xml36
-rw-r--r--java/com/android/incallui/res/values-nl/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-no/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-pa/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-pl/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-pt-rBR/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-pt-rPT/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-pt/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-ro/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-ru/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-si/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-sk/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-sl/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-sq/strings.xml20
-rw-r--r--java/com/android/incallui/res/values-sr/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-sv/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-sw/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-ta/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-te/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-th/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-tl/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-tr/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-uk/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-ur/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-uz/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-vi/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-zh-rCN/strings.xml20
-rw-r--r--java/com/android/incallui/res/values-zh-rHK/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-zh-rTW/strings.xml4
-rw-r--r--java/com/android/incallui/res/values-zu/strings.xml4
-rw-r--r--java/com/android/incallui/res/values/strings.xml11
-rw-r--r--java/com/android/incallui/res/values/styles.xml1
-rw-r--r--java/com/android/incallui/spam/SpamCallListListener.java4
-rw-r--r--java/com/android/incallui/spam/SpamNotificationActivity.java38
-rw-r--r--java/com/android/incallui/spam/SpamNotificationService.java11
-rw-r--r--java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java14
-rw-r--r--java/com/android/incallui/video/impl/VideoCallFragment.java3
-rw-r--r--java/com/android/incallui/video/impl/res/layout-land/videocall_controls_surfaceview.xml129
-rw-r--r--java/com/android/incallui/video/impl/res/layout/frag_videocall_land_surfaceview.xml93
-rw-r--r--java/com/android/incallui/video/impl/res/layout/frag_videocall_surfaceview.xml33
-rw-r--r--java/com/android/incallui/video/impl/res/layout/videocall_controls_surfaceview.xml130
-rw-r--r--java/com/android/incallui/video/impl/res/values-b+sr+Latn/strings.xml12
-rw-r--r--java/com/android/incallui/video/impl/res/values-h580dp-land/dimens.xml19
-rw-r--r--java/com/android/incallui/video/impl/res/values-h580dp/dimens.xml16
-rw-r--r--java/com/android/incallui/video/impl/res/values-land/dimens.xml19
-rw-r--r--java/com/android/incallui/video/impl/res/values-land/styles.xml26
-rw-r--r--java/com/android/incallui/video/impl/res/values-w460dp-land/dimens.xml19
-rw-r--r--java/com/android/incallui/video/impl/res/values-w460dp/dimens.xml16
-rw-r--r--java/com/android/incallui/video/impl/res/values/dimens.xml16
-rw-r--r--java/com/android/incallui/video/impl/res/values/styles.xml24
-rw-r--r--java/com/android/incallui/videotech/VideoTech.java2
-rw-r--r--java/com/android/incallui/videotech/ims/ImsVideoCallCallback.java16
-rw-r--r--java/com/android/incallui/videotech/ims/ImsVideoTech.java20
-rw-r--r--java/com/android/incallui/wifi/res/values-b+sr+Latn/strings.xml5
-rw-r--r--java/com/android/voicemail/VoicemailClient.java32
-rw-r--r--java/com/android/voicemail/VoicemailPermissionHelper.java60
-rw-r--r--java/com/android/voicemail/impl/ActivationTask.java21
-rw-r--r--java/com/android/voicemail/impl/AndroidManifest.xml26
-rw-r--r--java/com/android/voicemail/impl/OmtpReceiver.java2
-rw-r--r--java/com/android/voicemail/impl/OmtpVvmCarrierConfigHelper.java2
-rw-r--r--java/com/android/voicemail/impl/StatusCheckJobService.java71
-rw-r--r--java/com/android/voicemail/impl/StatusCheckTask.java128
-rw-r--r--java/com/android/voicemail/impl/VoicemailBootReceiver.java31
-rw-r--r--java/com/android/voicemail/impl/VoicemailClientImpl.java19
-rw-r--r--java/com/android/voicemail/impl/VoicemailModule.java19
-rw-r--r--java/com/android/voicemail/impl/VvmPackageInstallReceiver.java34
-rw-r--r--java/com/android/voicemail/impl/fetch/FetchVoicemailReceiver.java10
-rw-r--r--java/com/android/voicemail/impl/mail/Address.java8
-rw-r--r--java/com/android/voicemail/impl/mail/internet/MimeMessage.java40
-rw-r--r--java/com/android/voicemail/impl/mail/internet/MimeUtility.java9
-rw-r--r--java/com/android/voicemail/impl/mail/store/ImapFolder.java36
-rw-r--r--java/com/android/voicemail/impl/mail/store/ImapStore.java3
-rw-r--r--java/com/android/voicemail/impl/protocol/Vvm3Protocol.java11
-rw-r--r--java/com/android/voicemail/impl/res/values-af/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-am/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-ar/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-az/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-b+sr+Latn/strings.xml53
-rw-r--r--java/com/android/voicemail/impl/res/values-be/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-bg/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-bn/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-bs/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-ca/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-cs/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-da/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-de/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-el/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-en-rAU/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-en-rGB/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-en-rIN/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-es-rUS/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-es/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-et/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-eu/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-fa/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-fi/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-fr-rCA/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-fr/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-gl/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-gu/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-hi/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-hr/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-hu/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-hy/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-in/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-is/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-it/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-iw/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-ja/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-ka/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-kk/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-km/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-kn/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-ko/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-ky/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-lo/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-lt/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-lv/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-mk/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-ml/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-mn/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-mr/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-ms/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-my/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-nb/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-ne/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-nl/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-no/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-pa/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-pl/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-pt-rBR/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-pt-rPT/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-pt/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-ro/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-ru/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-si/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-sk/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-sl/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-sq/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-sr/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-sv/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-sw/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-ta/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-te/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-th/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-tl/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-tr/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-uk/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-ur/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-uz/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-vi/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-zh-rCN/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-zh-rHK/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-zh-rTW/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values-zu/strings.xml1
-rw-r--r--java/com/android/voicemail/impl/res/values/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/scheduling/BaseTask.java36
-rw-r--r--java/com/android/voicemail/impl/scheduling/BlockerTask.java14
-rw-r--r--java/com/android/voicemail/impl/scheduling/MinimalIntervalPolicy.java5
-rw-r--r--java/com/android/voicemail/impl/scheduling/Policy.java4
-rw-r--r--java/com/android/voicemail/impl/scheduling/PostponePolicy.java6
-rw-r--r--java/com/android/voicemail/impl/scheduling/RetryPolicy.java11
-rw-r--r--java/com/android/voicemail/impl/scheduling/Task.java38
-rw-r--r--java/com/android/voicemail/impl/scheduling/TaskQueue.java149
-rw-r--r--java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java158
-rw-r--r--java/com/android/voicemail/impl/scheduling/TaskSchedulerService.java294
-rw-r--r--java/com/android/voicemail/impl/scheduling/Tasks.java73
-rw-r--r--java/com/android/voicemail/impl/settings/VisualVoicemailSettingsUtil.java2
-rw-r--r--java/com/android/voicemail/impl/settings/VoicemailChangePinActivity.java7
-rw-r--r--java/com/android/voicemail/impl/settings/VoicemailSettingsFragment.java4
-rw-r--r--java/com/android/voicemail/impl/sms/LegacyModeSmsHandler.java92
-rw-r--r--java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java33
-rw-r--r--java/com/android/voicemail/impl/sync/SyncOneTask.java20
-rw-r--r--java/com/android/voicemail/impl/sync/SyncTask.java18
-rw-r--r--java/com/android/voicemail/impl/sync/UploadTask.java7
-rw-r--r--java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java36
-rw-r--r--java/com/android/voicemail/impl/utils/LoggerUtils.java33
-rw-r--r--java/com/android/voicemail/stub/StubVoicemailClient.java14
1039 files changed, 9132 insertions, 20071 deletions
diff --git a/Android.mk b/Android.mk
index c753cfefd..b00519f48 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,11 +1,9 @@
# Local modifications:
-# * b/31757757 Precompiled proto classes have been included.
# * removed com.google.android.backup.api_key. This should be added to
# the manifest in the top level directory.
# * removed com.google.android.geo.API_KEY key. This should be added to
# the manifest files in java/com/android/incallui/calllocation/impl/
# and /java/com/android/incallui/maps/impl/
-# * b/35391680 apache temporarily included in the top level directory.
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
@@ -20,7 +18,6 @@ BASE_DIR := java/com/android
# Primary dialer module sources.
SRC_DIRS := \
- apache \
$(BASE_DIR)/contacts/common \
$(BASE_DIR)/dialer \
$(BASE_DIR)/incallui \
@@ -57,8 +54,10 @@ RES_DIRS := \
$(BASE_DIR)/dialer/callcomposer/cameraui/res \
$(BASE_DIR)/dialer/callcomposer/res \
$(BASE_DIR)/dialer/calldetails/res \
+ $(BASE_DIR)/dialer/calllog/ui/res \
$(BASE_DIR)/dialer/calllogutils/res \
$(BASE_DIR)/dialer/common/res \
+ $(BASE_DIR)/dialer/contactsfragment/res \
$(BASE_DIR)/dialer/dialpadview/res \
$(BASE_DIR)/dialer/interactions/res \
$(BASE_DIR)/dialer/notification/res \
@@ -87,7 +86,7 @@ RES_DIRS := \
$(BASE_DIR)/incallui/video/impl/res \
$(BASE_DIR)/incallui/video/protocol/res \
$(BASE_DIR)/incallui/wifi/res \
- $(BASE_DIR)/voicemail/impl/res
+ $(BASE_DIR)/voicemail/impl/res \
# Dialer manifest files to merge.
@@ -104,8 +103,10 @@ DIALER_MANIFEST_FILES += \
$(BASE_DIR)/dialer/callcomposer/camera/camerafocus/AndroidManifest.xml \
$(BASE_DIR)/dialer/callcomposer/cameraui/AndroidManifest.xml \
$(BASE_DIR)/dialer/calldetails/AndroidManifest.xml \
+ $(BASE_DIR)/dialer/calllog/ui/AndroidManifest.xml \
$(BASE_DIR)/dialer/calllogutils/AndroidManifest.xml \
$(BASE_DIR)/dialer/common/AndroidManifest.xml \
+ $(BASE_DIR)/dialer/contactsfragment/AndroidManifest.xml \
$(BASE_DIR)/dialer/dialpadview/AndroidManifest.xml \
$(BASE_DIR)/dialer/interactions/AndroidManifest.xml \
$(BASE_DIR)/dialer/notification/AndroidManifest.xml \
@@ -134,7 +135,7 @@ DIALER_MANIFEST_FILES += \
$(BASE_DIR)/incallui/video/impl/AndroidManifest.xml \
$(BASE_DIR)/incallui/video/protocol/AndroidManifest.xml \
$(BASE_DIR)/incallui/wifi/AndroidManifest.xml \
- $(BASE_DIR)/voicemail/impl/AndroidManifest.xml
+ $(BASE_DIR)/voicemail/impl/AndroidManifest.xml \
# Merge all manifest files.
@@ -142,12 +143,9 @@ LOCAL_FULL_LIBS_MANIFEST_FILES := \
$(addprefix $(LOCAL_PATH)/, $(DIALER_MANIFEST_FILES))
LOCAL_SRC_FILES := $(call all-java-files-under, $(SRC_DIRS))
LOCAL_SRC_FILES := $(filter-out $(EXCLUDE_FILES),$(LOCAL_SRC_FILES))
-# Native protobuf compilation disabled b/36564333
-# Include protocol buffers and use the nano compiler.
-# LOCAL_SRC_FILES += $(call all-proto-files-under, $(SRC_DIRS))
-# LOCAL_PROTOC_OPTIMIZE_TYPE := nano
-# LOCAL_PROTOC_FLAGS := --proto_path=$(LOCAL_PATH)
-# LOCAL_PROTO_JAVA_OUTPUT_PARAMS := enum_style=java,generate_clear=true,store_unknown_fields=true,generate_equals=true
+LOCAL_SRC_FILES += $(call all-proto-files-under, $(SRC_DIRS))
+LOCAL_PROTOC_FLAGS := --proto_path=$(LOCAL_PATH)
+
LOCAL_RESOURCE_DIR := \
$(addprefix $(LOCAL_PATH)/, $(RES_DIRS)) \
$(support_library_root_dir)/design/res \
@@ -156,8 +154,6 @@ LOCAL_RESOURCE_DIR := \
$(support_library_root_dir)/v7/cardview/res \
$(support_library_root_dir)/v7/recyclerview/res
-LOCAL_USE_AAPT2 := true
-
# We specify each package explicitly to glob resource files.
LOCAL_AAPT_FLAGS := \
--auto-add-overlay \
@@ -171,8 +167,10 @@ LOCAL_AAPT_FLAGS := \
--extra-packages com.android.dialer.callcomposer.camera.camerafocus \
--extra-packages com.android.dialer.callcomposer.cameraui \
--extra-packages com.android.dialer.calldetails \
+ --extra-packages com.android.dialer.calllog.ui \
--extra-packages com.android.dialer.calllogutils \
--extra-packages com.android.dialer.common \
+ --extra-packages com.android.dialer.contactsfragment \
--extra-packages com.android.dialer.dialpadview \
--extra-packages com.android.dialer.interactions \
--extra-packages com.android.dialer.notification \
@@ -223,9 +221,10 @@ LOCAL_STATIC_JAVA_LIBRARIES := \
dialer-javax-annotation-api-target \
dialer-javax-inject-target \
dialer-libshortcutbadger-target \
+ dialer-mime4j-core-target \
+ dialer-mime4j-dom-target \
jsr305 \
libphonenumber \
- libprotobuf-java-nano \
volley \
LOCAL_STATIC_ANDROID_LIBRARIES := \
@@ -278,6 +277,11 @@ LOCAL_MODULE_TAGS := optional
LOCAL_PACKAGE_NAME := Dialer
LOCAL_CERTIFICATE := shared
LOCAL_PRIVILEGED_MODULE := true
+LOCAL_USE_AAPT2 := true
+
+# b/37483961 - Jack Not Compiling Dagger Class Properly
+LOCAL_JACK_ENABLED := javac_frontend
+
include $(BUILD_PACKAGE)
# Cleanup local state
@@ -293,10 +297,10 @@ PROCESSOR_JARS :=
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \
- dialer-dagger2-compiler:../../../prebuilts/tools/common/m2/repository/com/google/dagger/dagger-compiler/2.6/dagger-compiler-2.6$(COMMON_JAVA_PACKAGE_SUFFIX) \
+ dialer-dagger2-compiler:../../../prebuilts/tools/common/m2/repository/com/google/dagger/dagger-compiler/2.7/dagger-compiler-2.7$(COMMON_JAVA_PACKAGE_SUFFIX) \
dialer-auto-value:../../../prebuilts/tools/common/m2/repository/com/google/auto/value/auto-value/1.3/auto-value-1.3$(COMMON_JAVA_PACKAGE_SUFFIX) \
- dialer-dagger2:../../../prebuilts/tools/common/m2/repository/com/google/dagger/dagger/2.6/dagger-2.6$(COMMON_JAVA_PACKAGE_SUFFIX) \
- dialer-dagger2-producers:../../../prebuilts/tools/common/m2/repository/com/google/dagger/dagger-producers/2.6/dagger-producers-2.6$(COMMON_JAVA_PACKAGE_SUFFIX) \
+ dialer-dagger2:../../../prebuilts/tools/common/m2/repository/com/google/dagger/dagger/2.7/dagger-2.7$(COMMON_JAVA_PACKAGE_SUFFIX) \
+ dialer-dagger2-producers:../../../prebuilts/tools/common/m2/repository/com/google/dagger/dagger-producers/2.7/dagger-producers-2.7$(COMMON_JAVA_PACKAGE_SUFFIX) \
dialer-guava:../../../prebuilts/tools/common/m2/repository/com/google/guava/guava/20.0/guava-20.0$(COMMON_JAVA_PACKAGE_SUFFIX) \
dialer-javax-annotation-api:../../../prebuilts/tools/common/m2/repository/javax/annotation/javax.annotation-api/1.2/javax.annotation-api-1.2$(COMMON_JAVA_PACKAGE_SUFFIX) \
dialer-javax-inject:../../../prebuilts/tools/common/m2/repository/javax/inject/javax.inject/1/javax.inject-1$(COMMON_JAVA_PACKAGE_SUFFIX)
@@ -320,7 +324,7 @@ include $(CLEAR_VARS)
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE := dialer-dagger2-target
LOCAL_SDK_VERSION := current
-LOCAL_SRC_FILES := ../../../prebuilts/tools/common/m2/repository/com/google/dagger/dagger/2.6/dagger-2.6$(COMMON_JAVA_PACKAGE_SUFFIX)
+LOCAL_SRC_FILES := ../../../prebuilts/tools/common/m2/repository/com/google/dagger/dagger/2.7/dagger-2.7$(COMMON_JAVA_PACKAGE_SUFFIX)
LOCAL_UNINSTALLABLE_MODULE := true
include $(BUILD_PREBUILT)
@@ -387,8 +391,6 @@ include $(BUILD_PREBUILT)
include $(CLEAR_VARS)
-include $(CLEAR_VARS)
-
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE := dialer-commons-io-target
LOCAL_SDK_VERSION := current
@@ -398,3 +400,23 @@ LOCAL_UNINSTALLABLE_MODULE := true
include $(BUILD_PREBUILT)
include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+LOCAL_MODULE := dialer-mime4j-core-target
+LOCAL_SDK_VERSION := current
+LOCAL_SRC_FILES := ../../../prebuilts/tools/common/m2/repository/org/apache/james/apache-mime4j-core/0.7.2/apache-mime4j-core-0.7.2$(COMMON_JAVA_PACKAGE_SUFFIX)
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_PREBUILT)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+LOCAL_MODULE := dialer-mime4j-dom-target
+LOCAL_SDK_VERSION := current
+LOCAL_SRC_FILES := ../../../prebuilts/tools/common/m2/repository/org/apache/james/apache-mime4j-dom/0.7.2/apache-mime4j-dom-0.7.2$(COMMON_JAVA_PACKAGE_SUFFIX)
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_PREBUILT)
+
+include $(CLEAR_VARS) \ No newline at end of file
diff --git a/apache/org/apache/james/mime4j/BodyDescriptor.java b/apache/org/apache/james/mime4j/BodyDescriptor.java
deleted file mode 100644
index 867c43d86..000000000
--- a/apache/org/apache/james/mime4j/BodyDescriptor.java
+++ /dev/null
@@ -1,392 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Encapsulates the values of the MIME-specific header fields
- * (which starts with <code>Content-</code>).
- *
- *
- * @version $Id: BodyDescriptor.java,v 1.4 2005/02/11 10:08:37 ntherning Exp $
- */
-public class BodyDescriptor {
- private static Log log = LogFactory.getLog(BodyDescriptor.class);
-
- private String mimeType = "text/plain";
- private String boundary = null;
- private String charset = "us-ascii";
- private String transferEncoding = "7bit";
- private Map<String, String> parameters = new HashMap<String, String>();
- private boolean contentTypeSet = false;
- private boolean contentTransferEncSet = false;
-
- /**
- * Creates a new root <code>BodyDescriptor</code> instance.
- */
- public BodyDescriptor() {
- this(null);
- }
-
- /**
- * Creates a new <code>BodyDescriptor</code> instance.
- *
- * @param parent the descriptor of the parent or <code>null</code> if this
- * is the root descriptor.
- */
- public BodyDescriptor(BodyDescriptor parent) {
- if (parent != null && parent.isMimeType("multipart/digest")) {
- mimeType = "message/rfc822";
- } else {
- mimeType = "text/plain";
- }
- }
-
- /**
- * Should be called for each <code>Content-</code> header field of
- * a MIME message or part.
- *
- * @param name the field name.
- * @param value the field value.
- */
- public void addField(String name, String value) {
-
- name = name.trim().toLowerCase();
-
- if (name.equals("content-transfer-encoding") && !contentTransferEncSet) {
- contentTransferEncSet = true;
-
- value = value.trim().toLowerCase();
- if (value.length() > 0) {
- transferEncoding = value;
- }
-
- } else if (name.equals("content-type") && !contentTypeSet) {
- contentTypeSet = true;
-
- value = value.trim();
-
- /*
- * Unfold Content-Type value
- */
- StringBuffer sb = new StringBuffer();
- for (int i = 0; i < value.length(); i++) {
- char c = value.charAt(i);
- if (c == '\r' || c == '\n') {
- continue;
- }
- sb.append(c);
- }
-
- Map<String, String> params = getHeaderParams(sb.toString());
-
- String main = params.get("");
- if (main != null) {
- main = main.toLowerCase().trim();
- int index = main.indexOf('/');
- boolean valid = false;
- if (index != -1) {
- String type = main.substring(0, index).trim();
- String subtype = main.substring(index + 1).trim();
- if (type.length() > 0 && subtype.length() > 0) {
- main = type + "/" + subtype;
- valid = true;
- }
- }
-
- if (!valid) {
- main = null;
- }
- }
- String b = params.get("boundary");
-
- if (main != null
- && ((main.startsWith("multipart/") && b != null)
- || !main.startsWith("multipart/"))) {
-
- mimeType = main;
- }
-
- if (isMultipart()) {
- boundary = b;
- }
-
- String c = params.get("charset");
- if (c != null) {
- c = c.trim();
- if (c.length() > 0) {
- charset = c.toLowerCase();
- }
- }
-
- /*
- * Add all other parameters to parameters.
- */
- parameters.putAll(params);
- parameters.remove("");
- parameters.remove("boundary");
- parameters.remove("charset");
- }
- }
-
- private Map<String, String> getHeaderParams(String headerValue) {
- Map<String, String> result = new HashMap<String, String>();
-
- // split main value and parameters
- String main;
- String rest;
- if (headerValue.indexOf(";") == -1) {
- main = headerValue;
- rest = null;
- } else {
- main = headerValue.substring(0, headerValue.indexOf(";"));
- rest = headerValue.substring(main.length() + 1);
- }
-
- result.put("", main);
- if (rest != null) {
- char[] chars = rest.toCharArray();
- StringBuffer paramName = new StringBuffer();
- StringBuffer paramValue = new StringBuffer();
-
- final byte READY_FOR_NAME = 0;
- final byte IN_NAME = 1;
- final byte READY_FOR_VALUE = 2;
- final byte IN_VALUE = 3;
- final byte IN_QUOTED_VALUE = 4;
- final byte VALUE_DONE = 5;
- final byte ERROR = 99;
-
- byte state = READY_FOR_NAME;
- boolean escaped = false;
- for (int i = 0; i < chars.length; i++) {
- char c = chars[i];
-
- switch (state) {
- case ERROR:
- if (c == ';')
- state = READY_FOR_NAME;
- break;
-
- case READY_FOR_NAME:
- if (c == '=') {
- log.error("Expected header param name, got '='");
- state = ERROR;
- break;
- }
-
- paramName = new StringBuffer();
- paramValue = new StringBuffer();
-
- state = IN_NAME;
- // $FALL-THROUGH$
-
- case IN_NAME:
- if (c == '=') {
- if (paramName.length() == 0)
- state = ERROR;
- else
- state = READY_FOR_VALUE;
- break;
- }
-
- // not '='... just add to name
- paramName.append(c);
- break;
-
- case READY_FOR_VALUE:
- boolean fallThrough = false;
- switch (c) {
- case ' ':
- case '\t':
- break; // ignore spaces, especially before '"'
-
- case '"':
- state = IN_QUOTED_VALUE;
- break;
-
- default:
- state = IN_VALUE;
- fallThrough = true;
- break;
- }
- if (!fallThrough)
- break;
-
- // $FALL-THROUGH$
-
- case IN_VALUE:
- fallThrough = false;
- switch (c) {
- case ';':
- case ' ':
- case '\t':
- result.put(
- paramName.toString().trim().toLowerCase(),
- paramValue.toString().trim());
- state = VALUE_DONE;
- fallThrough = true;
- break;
- default:
- paramValue.append(c);
- break;
- }
- if (!fallThrough)
- break;
-
- // $FALL-THROUGH$
-
- case VALUE_DONE:
- switch (c) {
- case ';':
- state = READY_FOR_NAME;
- break;
-
- case ' ':
- case '\t':
- break;
-
- default:
- state = ERROR;
- break;
- }
- break;
-
- case IN_QUOTED_VALUE:
- switch (c) {
- case '"':
- if (!escaped) {
- // don't trim quoted strings; the spaces could be intentional.
- result.put(
- paramName.toString().trim().toLowerCase(),
- paramValue.toString());
- state = VALUE_DONE;
- } else {
- escaped = false;
- paramValue.append(c);
- }
- break;
-
- case '\\':
- if (escaped) {
- paramValue.append('\\');
- }
- escaped = !escaped;
- break;
-
- default:
- if (escaped) {
- paramValue.append('\\');
- }
- escaped = false;
- paramValue.append(c);
- break;
- }
- break;
-
- }
- }
-
- // done looping. check if anything is left over.
- if (state == IN_VALUE) {
- result.put(
- paramName.toString().trim().toLowerCase(),
- paramValue.toString().trim());
- }
- }
-
- return result;
- }
-
-
- public boolean isMimeType(String mimeType) {
- return this.mimeType.equals(mimeType.toLowerCase());
- }
-
- /**
- * Return true if the BodyDescriptor belongs to a message
- */
- public boolean isMessage() {
- return mimeType.equals("message/rfc822");
- }
-
- /**
- * Return true if the BodyDescripotro belongs to a multipart
- */
- public boolean isMultipart() {
- return mimeType.startsWith("multipart/");
- }
-
- /**
- * Return the MimeType
- */
- public String getMimeType() {
- return mimeType;
- }
-
- /**
- * Return the boundary
- */
- public String getBoundary() {
- return boundary;
- }
-
- /**
- * Return the charset
- */
- public String getCharset() {
- return charset;
- }
-
- /**
- * Return all parameters for the BodyDescriptor
- */
- public Map<String, String> getParameters() {
- return parameters;
- }
-
- /**
- * Return the TransferEncoding
- */
- public String getTransferEncoding() {
- return transferEncoding;
- }
-
- /**
- * Return true if it's base64 encoded
- */
- public boolean isBase64Encoded() {
- return "base64".equals(transferEncoding);
- }
-
- /**
- * Return true if it's quoted-printable
- */
- public boolean isQuotedPrintableEncoded() {
- return "quoted-printable".equals(transferEncoding);
- }
-
- @Override
- public String toString() {
- return mimeType;
- }
-} \ No newline at end of file
diff --git a/apache/org/apache/james/mime4j/CloseShieldInputStream.java b/apache/org/apache/james/mime4j/CloseShieldInputStream.java
deleted file mode 100644
index d9f3b078a..000000000
--- a/apache/org/apache/james/mime4j/CloseShieldInputStream.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j;
-
-import java.io.InputStream;
-import java.io.IOException;
-
-/**
- * InputStream that shields its underlying input stream from
- * being closed.
- *
- *
- * @version $Id: CloseShieldInputStream.java,v 1.2 2004/10/02 12:41:10 ntherning Exp $
- */
-public class CloseShieldInputStream extends InputStream {
-
- /**
- * Underlying InputStream
- */
- private InputStream is;
-
- public CloseShieldInputStream(InputStream is) {
- this.is = is;
- }
-
- public InputStream getUnderlyingStream() {
- return is;
- }
-
- /**
- * @see java.io.InputStream#read()
- */
- public int read() throws IOException {
- checkIfClosed();
- return is.read();
- }
-
- /**
- * @see java.io.InputStream#available()
- */
- public int available() throws IOException {
- checkIfClosed();
- return is.available();
- }
-
-
- /**
- * Set the underlying InputStream to null
- */
- public void close() throws IOException {
- is = null;
- }
-
- /**
- * @see java.io.FilterInputStream#reset()
- */
- public synchronized void reset() throws IOException {
- checkIfClosed();
- is.reset();
- }
-
- /**
- * @see java.io.FilterInputStream#markSupported()
- */
- public boolean markSupported() {
- if (is == null)
- return false;
- return is.markSupported();
- }
-
- /**
- * @see java.io.FilterInputStream#mark(int)
- */
- public synchronized void mark(int readlimit) {
- if (is != null)
- is.mark(readlimit);
- }
-
- /**
- * @see java.io.FilterInputStream#skip(long)
- */
- public long skip(long n) throws IOException {
- checkIfClosed();
- return is.skip(n);
- }
-
- /**
- * @see java.io.FilterInputStream#read(byte[])
- */
- public int read(byte b[]) throws IOException {
- checkIfClosed();
- return is.read(b);
- }
-
- /**
- * @see java.io.FilterInputStream#read(byte[], int, int)
- */
- public int read(byte b[], int off, int len) throws IOException {
- checkIfClosed();
- return is.read(b, off, len);
- }
-
- /**
- * Check if the underlying InputStream is null. If so throw an Exception
- *
- * @throws IOException if the underlying InputStream is null
- */
- private void checkIfClosed() throws IOException {
- if (is == null)
- throw new IOException("Stream is closed");
- }
-} \ No newline at end of file
diff --git a/apache/org/apache/james/mime4j/ContentHandler.java b/apache/org/apache/james/mime4j/ContentHandler.java
deleted file mode 100644
index b437e739e..000000000
--- a/apache/org/apache/james/mime4j/ContentHandler.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * <p>
- * Receives notifications of the content of a plain RFC822 or MIME message.
- * Implement this interface and register an instance of that implementation
- * with a <code>MimeStreamParser</code> instance using its
- * {@link org.apache.james.mime4j.MimeStreamParser#setContentHandler(ContentHandler)}
- * method. The parser uses the <code>ContentHandler</code> instance to report
- * basic message-related events like the start and end of the body of a
- * part in a multipart MIME entity.
- * </p>
- * <p>
- * Events will be generated in the order the corresponding elements occur in
- * the message stream parsed by the parser. E.g.:
- * <pre>
- * startMessage()
- * startHeader()
- * field(...)
- * field(...)
- * ...
- * endHeader()
- * startMultipart()
- * preamble(...)
- * startBodyPart()
- * startHeader()
- * field(...)
- * field(...)
- * ...
- * endHeader()
- * body()
- * endBodyPart()
- * startBodyPart()
- * startHeader()
- * field(...)
- * field(...)
- * ...
- * endHeader()
- * body()
- * endBodyPart()
- * epilogue(...)
- * endMultipart()
- * endMessage()
- * </pre>
- * The above shows an example of a MIME message consisting of a multipart
- * body containing two body parts.
- * </p>
- * <p>
- * See MIME RFCs 2045-2049 for more information on the structure of MIME
- * messages and RFC 822 and 2822 for the general structure of Internet mail
- * messages.
- * </p>
- *
- *
- * @version $Id: ContentHandler.java,v 1.3 2004/10/02 12:41:10 ntherning Exp $
- */
-public interface ContentHandler {
- /**
- * Called when a new message starts (a top level message or an embedded
- * rfc822 message).
- */
- void startMessage();
-
- /**
- * Called when a message ends.
- */
- void endMessage();
-
- /**
- * Called when a new body part starts inside a
- * <code>multipart/*</code> entity.
- */
- void startBodyPart();
-
- /**
- * Called when a body part ends.
- */
- void endBodyPart();
-
- /**
- * Called when a header (of a message or body part) is about to be parsed.
- */
- void startHeader();
-
- /**
- * Called for each field of a header.
- *
- * @param fieldData the raw contents of the field
- * (<code>Field-Name: field value</code>). The value will not be
- * unfolded.
- */
- void field(String fieldData);
-
- /**
- * Called when there are no more header fields in a message or body part.
- */
- void endHeader();
-
- /**
- * Called for the preamble (whatever comes before the first body part)
- * of a <code>multipart/*</code> entity.
- *
- * @param is used to get the contents of the preamble.
- * @throws IOException should be thrown on I/O errors.
- */
- void preamble(InputStream is) throws IOException;
-
- /**
- * Called for the epilogue (whatever comes after the final body part)
- * of a <code>multipart/*</code> entity.
- *
- * @param is used to get the contents of the epilogue.
- * @throws IOException should be thrown on I/O errors.
- */
- void epilogue(InputStream is) throws IOException;
-
- /**
- * Called when the body of a multipart entity is about to be parsed.
- *
- * @param bd encapsulates the values (either read from the
- * message stream or, if not present, determined implictly
- * as described in the
- * MIME rfc:s) of the <code>Content-Type</code> and
- * <code>Content-Transfer-Encoding</code> header fields.
- */
- void startMultipart(BodyDescriptor bd);
-
- /**
- * Called when the body of an entity has been parsed.
- */
- void endMultipart();
-
- /**
- * Called when the body of a discrete (non-multipart) entity is about to
- * be parsed.
- *
- * @param bd see {@link #startMultipart(BodyDescriptor)}
- * @param is the contents of the body. NOTE: this is the raw body contents
- * - it will not be decoded if encoded. The <code>bd</code>
- * parameter should be used to determine how the stream data
- * should be decoded.
- * @throws IOException should be thrown on I/O errors.
- */
- void body(BodyDescriptor bd, InputStream is) throws IOException;
-
- /**
- * Called when a new entity (message or body part) starts and the
- * parser is in <code>raw</code> mode.
- *
- * @param is the raw contents of the entity.
- * @throws IOException should be thrown on I/O errors.
- * @see MimeStreamParser#setRaw(boolean)
- */
- void raw(InputStream is) throws IOException;
-} \ No newline at end of file
diff --git a/apache/org/apache/james/mime4j/EOLConvertingInputStream.java b/apache/org/apache/james/mime4j/EOLConvertingInputStream.java
deleted file mode 100644
index d6ef706b2..000000000
--- a/apache/org/apache/james/mime4j/EOLConvertingInputStream.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PushbackInputStream;
-
-/**
- * InputStream which converts <code>\r</code>
- * bytes not followed by <code>\n</code> and <code>\n</code> not
- * preceded by <code>\r</code> to <code>\r\n</code>.
- *
- *
- * @version $Id: EOLConvertingInputStream.java,v 1.4 2004/11/29 13:15:42 ntherning Exp $
- */
-public class EOLConvertingInputStream extends InputStream {
- /** Converts single '\r' to '\r\n' */
- public static final int CONVERT_CR = 1;
- /** Converts single '\n' to '\r\n' */
- public static final int CONVERT_LF = 2;
- /** Converts single '\r' and '\n' to '\r\n' */
- public static final int CONVERT_BOTH = 3;
-
- private PushbackInputStream in = null;
- private int previous = 0;
- private int flags = CONVERT_BOTH;
- private int size = 0;
- private int pos = 0;
- private int nextTenPctPos;
- private int tenPctSize;
- private Callback callback;
-
- public interface Callback {
- public void report(int bytesRead);
- }
-
- /**
- * Creates a new <code>EOLConvertingInputStream</code>
- * instance converting bytes in the given <code>InputStream</code>.
- * The flag <code>CONVERT_BOTH</code> is the default.
- *
- * @param in the <code>InputStream</code> to read from.
- */
- public EOLConvertingInputStream(InputStream _in) {
- super();
- in = new PushbackInputStream(_in, 2);
- }
-
- /**
- * Creates a new <code>EOLConvertingInputStream</code>
- * instance converting bytes in the given <code>InputStream</code>.
- *
- * @param _in the <code>InputStream</code> to read from.
- * @param _size the size of the input stream (need not be exact)
- * @param _callback a callback reporting when each 10% of stream's size is reached
- */
- public EOLConvertingInputStream(InputStream _in, int _size, Callback _callback) {
- this(_in);
- size = _size;
- tenPctSize = size / 10;
- nextTenPctPos = tenPctSize;
- callback = _callback;
- }
-
- /**
- * Closes the underlying stream.
- *
- * @throws IOException on I/O errors.
- */
- public void close() throws IOException {
- in.close();
- }
-
- private int readByte() throws IOException {
- int b = in.read();
- if (b != -1) {
- if (callback != null && pos++ == nextTenPctPos) {
- nextTenPctPos += tenPctSize;
- if (callback != null) {
- callback.report(pos);
- }
- }
- }
- return b;
- }
-
- private void unreadByte(int c) throws IOException {
- in.unread(c);
- pos--;
- }
-
- /**
- * @see java.io.InputStream#read()
- */
- public int read() throws IOException {
- int b = readByte();
-
- if (b == -1) {
- pos = size;
- return -1;
- }
-
- if ((flags & CONVERT_CR) != 0 && b == '\r') {
- int c = readByte();
- if (c != -1) {
- unreadByte(c);
- }
- if (c != '\n') {
- unreadByte('\n');
- }
- } else if ((flags & CONVERT_LF) != 0 && b == '\n' && previous != '\r') {
- b = '\r';
- unreadByte('\n');
- }
-
- previous = b;
-
- return b;
- }
-
-} \ No newline at end of file
diff --git a/apache/org/apache/james/mime4j/Log.java b/apache/org/apache/james/mime4j/Log.java
deleted file mode 100644
index 5eeead5f3..000000000
--- a/apache/org/apache/james/mime4j/Log.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.james.mime4j;
-
-/**
- * Empty stub for the apache logging library.
- */
-public class Log {
- private static final String LOG_TAG = "Email Log";
-
- public Log(Class mClazz) {
- }
-
- public boolean isDebugEnabled() {
- return false;
- }
-
- public boolean isErrorEnabled() {
- return true;
- }
-
- public boolean isFatalEnabled() {
- return true;
- }
-
- public boolean isInfoEnabled() {
- return false;
- }
-
- public boolean isTraceEnabled() {
- return false;
- }
-
- public boolean isWarnEnabled() {
- return true;
- }
-
- public void trace(Object message) {
- if (!isTraceEnabled()) return;
- android.util.Log.v(LOG_TAG, toString(message, null));
- }
-
- public void trace(Object message, Throwable t) {
- if (!isTraceEnabled()) return;
- android.util.Log.v(LOG_TAG, toString(message, t));
- }
-
- public void debug(Object message) {
- if (!isDebugEnabled()) return;
- android.util.Log.d(LOG_TAG, toString(message, null));
- }
-
- public void debug(Object message, Throwable t) {
- if (!isDebugEnabled()) return;
- android.util.Log.d(LOG_TAG, toString(message, t));
- }
-
- public void info(Object message) {
- if (!isInfoEnabled()) return;
- android.util.Log.i(LOG_TAG, toString(message, null));
- }
-
- public void info(Object message, Throwable t) {
- if (!isInfoEnabled()) return;
- android.util.Log.i(LOG_TAG, toString(message, t));
- }
-
- public void warn(Object message) {
- android.util.Log.w(LOG_TAG, toString(message, null));
- }
-
- public void warn(Object message, Throwable t) {
- android.util.Log.w(LOG_TAG, toString(message, t));
- }
-
- public void error(Object message) {
- android.util.Log.e(LOG_TAG, toString(message, null));
- }
-
- public void error(Object message, Throwable t) {
- android.util.Log.e(LOG_TAG, toString(message, t));
- }
-
- public void fatal(Object message) {
- android.util.Log.e(LOG_TAG, toString(message, null));
- }
-
- public void fatal(Object message, Throwable t) {
- android.util.Log.e(LOG_TAG, toString(message, t));
- }
-
- private static String toString(Object o, Throwable t) {
- String m = (o == null) ? "(null)" : o.toString();
- if (t == null) {
- return m;
- } else {
- return m + " " + t.getMessage();
- }
- }
-} \ No newline at end of file
diff --git a/apache/org/apache/james/mime4j/LogFactory.java b/apache/org/apache/james/mime4j/LogFactory.java
deleted file mode 100644
index ed6e3de3d..000000000
--- a/apache/org/apache/james/mime4j/LogFactory.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.james.mime4j;
-
-/**
- * Empty stub for the apache logging library.
- */
-public final class LogFactory {
- private LogFactory() {
- }
-
- public static Log getLog(Class clazz) {
- return new Log(clazz);
- }
-} \ No newline at end of file
diff --git a/apache/org/apache/james/mime4j/MimeBoundaryInputStream.java b/apache/org/apache/james/mime4j/MimeBoundaryInputStream.java
deleted file mode 100644
index c6d6f248a..000000000
--- a/apache/org/apache/james/mime4j/MimeBoundaryInputStream.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PushbackInputStream;
-
-/**
- * Stream that constrains itself to a single MIME body part.
- * After the stream ends (i.e. read() returns -1) {@link #hasMoreParts()}
- * can be used to determine if a final boundary has been seen or not.
- * If {@link #parentEOF()} is <code>true</code> an unexpected end of stream
- * has been detected in the parent stream.
- *
- *
- *
- * @version $Id: MimeBoundaryInputStream.java,v 1.2 2004/11/29 13:15:42 ntherning Exp $
- */
-public class MimeBoundaryInputStream extends InputStream {
-
- private PushbackInputStream s = null;
- private byte[] boundary = null;
- private boolean first = true;
- private boolean eof = false;
- private boolean parenteof = false;
- private boolean moreParts = true;
-
- /**
- * Creates a new MimeBoundaryInputStream.
- * @param s The underlying stream.
- * @param boundary Boundary string (not including leading hyphens).
- */
- public MimeBoundaryInputStream(InputStream s, String boundary)
- throws IOException {
-
- this.s = new PushbackInputStream(s, boundary.length() + 4);
-
- boundary = "--" + boundary;
- this.boundary = new byte[boundary.length()];
- for (int i = 0; i < this.boundary.length; i++) {
- this.boundary[i] = (byte) boundary.charAt(i);
- }
-
- /*
- * By reading one byte we will update moreParts to be as expected
- * before any bytes have been read.
- */
- int b = read();
- if (b != -1) {
- this.s.unread(b);
- }
- }
-
- /**
- * Closes the underlying stream.
- *
- * @throws IOException on I/O errors.
- */
- public void close() throws IOException {
- s.close();
- }
-
- /**
- * Determines if the underlying stream has more parts (this stream has
- * not seen an end boundary).
- *
- * @return <code>true</code> if there are more parts in the underlying
- * stream, <code>false</code> otherwise.
- */
- public boolean hasMoreParts() {
- return moreParts;
- }
-
- /**
- * Determines if the parent stream has reached EOF
- *
- * @return <code>true</code> if EOF has been reached for the parent stream,
- * <code>false</code> otherwise.
- */
- public boolean parentEOF() {
- return parenteof;
- }
-
- /**
- * Consumes all unread bytes of this stream. After a call to this method
- * this stream will have reached EOF.
- *
- * @throws IOException on I/O errors.
- */
- public void consume() throws IOException {
- while (read() != -1) {
- }
- }
-
- /**
- * @see java.io.InputStream#read()
- */
- public int read() throws IOException {
- if (eof) {
- return -1;
- }
-
- if (first) {
- first = false;
- if (matchBoundary()) {
- return -1;
- }
- }
-
- int b1 = s.read();
- int b2 = s.read();
-
- if (b1 == '\r' && b2 == '\n') {
- if (matchBoundary()) {
- return -1;
- }
- }
-
- if (b2 != -1) {
- s.unread(b2);
- }
-
- parenteof = b1 == -1;
- eof = parenteof;
-
- return b1;
- }
-
- private boolean matchBoundary() throws IOException {
-
- for (int i = 0; i < boundary.length; i++) {
- int b = s.read();
- if (b != boundary[i]) {
- if (b != -1) {
- s.unread(b);
- }
- for (int j = i - 1; j >= 0; j--) {
- s.unread(boundary[j]);
- }
- return false;
- }
- }
-
- /*
- * We have a match. Is it an end boundary?
- */
- int prev = s.read();
- int curr = s.read();
- moreParts = !(prev == '-' && curr == '-');
- do {
- if (curr == '\n' && prev == '\r') {
- break;
- }
- prev = curr;
- } while ((curr = s.read()) != -1);
-
- if (curr == -1) {
- moreParts = false;
- parenteof = true;
- }
-
- eof = true;
-
- return true;
- }
-} \ No newline at end of file
diff --git a/apache/org/apache/james/mime4j/MimeStreamParser.java b/apache/org/apache/james/mime4j/MimeStreamParser.java
deleted file mode 100644
index a8aad5a38..000000000
--- a/apache/org/apache/james/mime4j/MimeStreamParser.java
+++ /dev/null
@@ -1,324 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j;
-
-import org.apache.james.mime4j.decoder.Base64InputStream;
-import org.apache.james.mime4j.decoder.QuotedPrintableInputStream;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.BitSet;
-import java.util.LinkedList;
-
-/**
- * <p>
- * Parses MIME (or RFC822) message streams of bytes or characters and reports
- * parsing events to a <code>ContentHandler</code> instance.
- * </p>
- * <p>
- * Typical usage:<br/>
- * <pre>
- * ContentHandler handler = new MyHandler();
- * MimeStreamParser parser = new MimeStreamParser();
- * parser.setContentHandler(handler);
- * parser.parse(new BufferedInputStream(new FileInputStream("mime.msg")));
- * </pre>
- * <strong>NOTE:</strong> All lines must end with CRLF
- * (<code>\r\n</code>). If you are unsure of the line endings in your stream
- * you should wrap it in a {@link org.apache.james.mime4j.EOLConvertingInputStream} instance.
- *
- *
- * @version $Id: MimeStreamParser.java,v 1.8 2005/02/11 10:12:02 ntherning Exp $
- */
-public class MimeStreamParser {
- private static final Log log = LogFactory.getLog(MimeStreamParser.class);
-
- private static BitSet fieldChars = null;
-
- private RootInputStream rootStream = null;
- private LinkedList<BodyDescriptor> bodyDescriptors = new LinkedList<BodyDescriptor>();
- private ContentHandler handler = null;
- private boolean raw = false;
- private boolean prematureEof = false;
-
- static {
- fieldChars = new BitSet();
- for (int i = 0x21; i <= 0x39; i++) {
- fieldChars.set(i);
- }
- for (int i = 0x3b; i <= 0x7e; i++) {
- fieldChars.set(i);
- }
- }
-
- /**
- * Creates a new <code>MimeStreamParser</code> instance.
- */
- public MimeStreamParser() {
- }
-
- /**
- * Parses a stream of bytes containing a MIME message.
- *
- * @param is the stream to parse.
- * @throws IOException on I/O errors.
- */
- public void parse(InputStream is) throws IOException {
- rootStream = new RootInputStream(is);
- parseMessage(rootStream);
- }
-
- /**
- * Determines if this parser is currently in raw mode.
- *
- * @return <code>true</code> if in raw mode, <code>false</code>
- * otherwise.
- * @see #setRaw(boolean)
- */
- public boolean isRaw() {
- return raw;
- }
-
- /**
- * Enables or disables raw mode. In raw mode all future entities
- * (messages or body parts) in the stream will be reported to the
- * {@link ContentHandler#raw(InputStream)} handler method only.
- * The stream will contain the entire unparsed entity contents
- * including header fields and whatever is in the body.
- *
- * @param raw <code>true</code> enables raw mode, <code>false</code>
- * disables it.
- */
- public void setRaw(boolean raw) {
- this.raw = raw;
- }
-
- /**
- * Finishes the parsing and stops reading lines.
- * NOTE: No more lines will be parsed but the parser
- * will still call
- * {@link ContentHandler#endMultipart()},
- * {@link ContentHandler#endBodyPart()},
- * {@link ContentHandler#endMessage()}, etc to match previous calls
- * to
- * {@link ContentHandler#startMultipart(BodyDescriptor)},
- * {@link ContentHandler#startBodyPart()},
- * {@link ContentHandler#startMessage()}, etc.
- */
- public void stop() {
- rootStream.truncate();
- }
-
- /**
- * Parses an entity which consists of a header followed by a body containing
- * arbitrary data, body parts or an embedded message.
- *
- * @param is the stream to parse.
- * @throws IOException on I/O errors.
- */
- private void parseEntity(InputStream is) throws IOException {
- BodyDescriptor bd = parseHeader(is);
-
- if (bd.isMultipart()) {
- bodyDescriptors.addFirst(bd);
-
- handler.startMultipart(bd);
-
- MimeBoundaryInputStream tempIs =
- new MimeBoundaryInputStream(is, bd.getBoundary());
- handler.preamble(new CloseShieldInputStream(tempIs));
- tempIs.consume();
-
- while (tempIs.hasMoreParts()) {
- tempIs = new MimeBoundaryInputStream(is, bd.getBoundary());
- parseBodyPart(tempIs);
- tempIs.consume();
- if (tempIs.parentEOF()) {
- prematureEof = true;
-// if (log.isWarnEnabled()) {
-// log.warn("Line " + rootStream.getLineNumber()
-// + ": Body part ended prematurely. "
-// + "Higher level boundary detected or "
-// + "EOF reached.");
-// }
- break;
- }
- }
-
- handler.epilogue(new CloseShieldInputStream(is));
-
- handler.endMultipart();
-
- bodyDescriptors.removeFirst();
-
- } else if (bd.isMessage()) {
- if (bd.isBase64Encoded()) {
- log.warn("base64 encoded message/rfc822 detected");
- is = new EOLConvertingInputStream(
- new Base64InputStream(is));
- } else if (bd.isQuotedPrintableEncoded()) {
- log.warn("quoted-printable encoded message/rfc822 detected");
- is = new EOLConvertingInputStream(
- new QuotedPrintableInputStream(is));
- }
- bodyDescriptors.addFirst(bd);
- parseMessage(is);
- bodyDescriptors.removeFirst();
- } else {
- handler.body(bd, new CloseShieldInputStream(is));
- }
-
- /*
- * Make sure the stream has been consumed.
- */
- while (is.read() != -1) {
- }
- }
-
- private void parseMessage(InputStream is) throws IOException {
- if (raw) {
- handler.raw(new CloseShieldInputStream(is));
- } else {
- handler.startMessage();
- parseEntity(is);
- handler.endMessage();
- }
- }
-
- public boolean getPrematureEof() {
- return prematureEof;
- }
-
- private void parseBodyPart(InputStream is) throws IOException {
- if (raw) {
- handler.raw(new CloseShieldInputStream(is));
- } else {
- handler.startBodyPart();
- parseEntity(is);
- handler.endBodyPart();
- }
- }
-
- /**
- * Parses a header.
- *
- * @param is the stream to parse.
- * @return a <code>BodyDescriptor</code> describing the body following
- * the header.
- */
- private BodyDescriptor parseHeader(InputStream is) throws IOException {
- BodyDescriptor bd = new BodyDescriptor(bodyDescriptors.isEmpty()
- ? null : (BodyDescriptor) bodyDescriptors.getFirst());
-
- handler.startHeader();
-
- int lineNumber = rootStream.getLineNumber();
-
- StringBuffer sb = new StringBuffer();
- int curr = 0;
- int prev = 0;
- while ((curr = is.read()) != -1) {
- if (curr == '\n' && (prev == '\n' || prev == 0)) {
- /*
- * [\r]\n[\r]\n or an immediate \r\n have been seen.
- */
- sb.deleteCharAt(sb.length() - 1);
- break;
- }
- sb.append((char) curr);
- prev = curr == '\r' ? prev : curr;
- }
-
-// if (curr == -1 && log.isWarnEnabled()) {
-// log.warn("Line " + rootStream.getLineNumber()
-// + ": Unexpected end of headers detected. "
-// + "Boundary detected in header or EOF reached.");
-// }
-
- int start = 0;
- int pos = 0;
- int startLineNumber = lineNumber;
- while (pos < sb.length()) {
- while (pos < sb.length() && sb.charAt(pos) != '\r') {
- pos++;
- }
- if (pos < sb.length() - 1 && sb.charAt(pos + 1) != '\n') {
- pos++;
- continue;
- }
-
- if (pos >= sb.length() - 2 || fieldChars.get(sb.charAt(pos + 2))) {
-
- /*
- * field should be the complete field data excluding the
- * trailing \r\n.
- */
- String field = sb.substring(start, pos);
- start = pos + 2;
-
- /*
- * Check for a valid field.
- */
- int index = field.indexOf(':');
- boolean valid = false;
- if (index != -1 && fieldChars.get(field.charAt(0))) {
- valid = true;
- String fieldName = field.substring(0, index).trim();
- for (int i = 0; i < fieldName.length(); i++) {
- if (!fieldChars.get(fieldName.charAt(i))) {
- valid = false;
- break;
- }
- }
-
- if (valid) {
- handler.field(field);
- bd.addField(fieldName, field.substring(index + 1));
- }
- }
-
- if (!valid && log.isWarnEnabled()) {
- log.warn("Line " + startLineNumber
- + ": Ignoring invalid field: '" + field.trim() + "'");
- }
-
- startLineNumber = lineNumber;
- }
-
- pos += 2;
- lineNumber++;
- }
-
- handler.endHeader();
-
- return bd;
- }
-
- /**
- * Sets the <code>ContentHandler</code> to use when reporting
- * parsing events.
- *
- * @param h the <code>ContentHandler</code>.
- */
- public void setContentHandler(ContentHandler h) {
- this.handler = h;
- }
-
-} \ No newline at end of file
diff --git a/apache/org/apache/james/mime4j/RootInputStream.java b/apache/org/apache/james/mime4j/RootInputStream.java
deleted file mode 100644
index cc8b2411c..000000000
--- a/apache/org/apache/james/mime4j/RootInputStream.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * <code>InputStream</code> used by the parser to wrap the original user
- * supplied stream. This stream keeps track of the current line number and
- * can also be truncated. When truncated the stream will appear to have
- * reached end of file. This is used by the parser's
- * {@link org.apache.james.mime4j.MimeStreamParser#stop()} method.
- *
- *
- * @version $Id: RootInputStream.java,v 1.2 2004/10/02 12:41:10 ntherning Exp $
- */
-class RootInputStream extends InputStream {
- private InputStream is = null;
- private int lineNumber = 1;
- private int prev = -1;
- private boolean truncated = false;
-
- /**
- * Creates a new <code>RootInputStream</code>.
- *
- * @param in the stream to read from.
- */
- public RootInputStream(InputStream is) {
- this.is = is;
- }
-
- /**
- * Gets the current line number starting at 1
- * (the number of <code>\r\n</code> read so far plus 1).
- *
- * @return the current line number.
- */
- public int getLineNumber() {
- return lineNumber;
- }
-
- /**
- * Truncates this <code>InputStream</code>. After this call any
- * call to {@link #read()}, {@link #read(byte[]) or
- * {@link #read(byte[], int, int)} will return
- * -1 as if end-of-file had been reached.
- */
- public void truncate() {
- this.truncated = true;
- }
-
- /**
- * @see java.io.InputStream#read()
- */
- public int read() throws IOException {
- if (truncated) {
- return -1;
- }
-
- int b = is.read();
- if (prev == '\r' && b == '\n') {
- lineNumber++;
- }
- prev = b;
- return b;
- }
-
- /**
- *
- * @see java.io.InputStream#read(byte[], int, int)
- */
- public int read(byte[] b, int off, int len) throws IOException {
- if (truncated) {
- return -1;
- }
-
- int n = is.read(b, off, len);
- for (int i = off; i < off + n; i++) {
- if (prev == '\r' && b[i] == '\n') {
- lineNumber++;
- }
- prev = b[i];
- }
- return n;
- }
-
- /**
- * @see java.io.InputStream#read(byte[])
- */
- public int read(byte[] b) throws IOException {
- return read(b, 0, b.length);
- }
-} \ No newline at end of file
diff --git a/apache/org/apache/james/mime4j/codec/EncoderUtil.java b/apache/org/apache/james/mime4j/codec/EncoderUtil.java
deleted file mode 100644
index 6841bc998..000000000
--- a/apache/org/apache/james/mime4j/codec/EncoderUtil.java
+++ /dev/null
@@ -1,630 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j.codec;
-
-import java.nio.ByteBuffer;
-import java.nio.charset.Charset;
-import java.util.BitSet;
-import java.util.Locale;
-
-import org.apache.james.mime4j.util.CharsetUtil;
-
-/**
- * ANDROID: THIS CLASS IS COPIED FROM A NEWER VERSION OF MIME4J
- */
-
-/**
- * Static methods for encoding header field values. This includes encoded-words
- * as defined in <a href='http://www.faqs.org/rfcs/rfc2047.html'>RFC 2047</a>
- * or display-names of an e-mail address, for example.
- *
- */
-public class EncoderUtil {
-
- // This array is a lookup table that translates 6-bit positive integer index
- // values into their "Base64 Alphabet" equivalents as specified in Table 1
- // of RFC 2045.
- // ANDROID: THIS TABLE IS COPIED FROM BASE64OUTPUTSTREAM
- static final byte[] BASE64_TABLE = { 'A', 'B', 'C', 'D', 'E', 'F',
- 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
- 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
- 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
- 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5',
- '6', '7', '8', '9', '+', '/' };
-
- // Byte used to pad output.
- private static final byte BASE64_PAD = '=';
-
- private static final BitSet Q_REGULAR_CHARS = initChars("=_?");
-
- private static final BitSet Q_RESTRICTED_CHARS = initChars("=_?\"#$%&'(),.:;<>@[\\]^`{|}~");
-
- private static final int MAX_USED_CHARACTERS = 50;
-
- private static final String ENC_WORD_PREFIX = "=?";
- private static final String ENC_WORD_SUFFIX = "?=";
-
- private static final int ENCODED_WORD_MAX_LENGTH = 75; // RFC 2047
-
- private static final BitSet TOKEN_CHARS = initChars("()<>@,;:\\\"/[]?=");
-
- private static final BitSet ATEXT_CHARS = initChars("()<>@.,;:\\\"[]");
-
- private static BitSet initChars(String specials) {
- BitSet bs = new BitSet(128);
- for (char ch = 33; ch < 127; ch++) {
- if (specials.indexOf(ch) == -1) {
- bs.set(ch);
- }
- }
- return bs;
- }
-
- /**
- * Selects one of the two encodings specified in RFC 2047.
- */
- public enum Encoding {
- /** The B encoding (identical to base64 defined in RFC 2045). */
- B,
- /** The Q encoding (similar to quoted-printable defined in RFC 2045). */
- Q
- }
-
- /**
- * Indicates the intended usage of an encoded word.
- */
- public enum Usage {
- /**
- * Encoded word is used to replace a 'text' token in any Subject or
- * Comments header field.
- */
- TEXT_TOKEN,
- /**
- * Encoded word is used to replace a 'word' entity within a 'phrase',
- * for example, one that precedes an address in a From, To, or Cc
- * header.
- */
- WORD_ENTITY
- }
-
- private EncoderUtil() {
- }
-
- /**
- * Encodes the display-name portion of an address. See <a
- * href='http://www.faqs.org/rfcs/rfc5322.html'>RFC 5322</a> section 3.4
- * and <a href='http://www.faqs.org/rfcs/rfc2047.html'>RFC 2047</a> section
- * 5.3. The specified string should not be folded.
- *
- * @param displayName
- * display-name to encode.
- * @return encoded display-name.
- */
- public static String encodeAddressDisplayName(String displayName) {
- // display-name = phrase
- // phrase = 1*( encoded-word / word )
- // word = atom / quoted-string
- // atom = [CFWS] 1*atext [CFWS]
- // CFWS = comment or folding white space
-
- if (isAtomPhrase(displayName)) {
- return displayName;
- } else if (hasToBeEncoded(displayName, 0)) {
- return encodeEncodedWord(displayName, Usage.WORD_ENTITY);
- } else {
- return quote(displayName);
- }
- }
-
- /**
- * Encodes the local part of an address specification as described in RFC
- * 5322 section 3.4.1. Leading and trailing CFWS should have been removed
- * before calling this method. The specified string should not contain any
- * illegal (control or non-ASCII) characters.
- *
- * @param localPart
- * the local part to encode
- * @return the encoded local part.
- */
- public static String encodeAddressLocalPart(String localPart) {
- // local-part = dot-atom / quoted-string
- // dot-atom = [CFWS] dot-atom-text [CFWS]
- // CFWS = comment or folding white space
-
- if (isDotAtomText(localPart)) {
- return localPart;
- } else {
- return quote(localPart);
- }
- }
-
- /**
- * Encodes the specified strings into a header parameter as described in RFC
- * 2045 section 5.1 and RFC 2183 section 2. The specified strings should not
- * contain any illegal (control or non-ASCII) characters.
- *
- * @param name
- * parameter name.
- * @param value
- * parameter value.
- * @return encoded result.
- */
- public static String encodeHeaderParameter(String name, String value) {
- name = name.toLowerCase(Locale.US);
-
- // value := token / quoted-string
- if (isToken(value)) {
- return name + "=" + value;
- } else {
- return name + "=" + quote(value);
- }
- }
-
- /**
- * Shortcut method that encodes the specified text into an encoded-word if
- * the text has to be encoded.
- *
- * @param text
- * text to encode.
- * @param usage
- * whether the encoded-word is to be used to replace a text token
- * or a word entity (see RFC 822).
- * @param usedCharacters
- * number of characters already used up (<code>0 <= usedCharacters <= 50</code>).
- * @return the specified text if encoding is not necessary or an encoded
- * word or a sequence of encoded words otherwise.
- */
- public static String encodeIfNecessary(String text, Usage usage,
- int usedCharacters) {
- if (hasToBeEncoded(text, usedCharacters))
- return encodeEncodedWord(text, usage, usedCharacters);
- else
- return text;
- }
-
- /**
- * Determines if the specified string has to encoded into an encoded-word.
- * Returns <code>true</code> if the text contains characters that don't
- * fall into the printable ASCII character set or if the text contains a
- * 'word' (sequence of non-whitespace characters) longer than 77 characters
- * (including characters already used up in the line).
- *
- * @param text
- * text to analyze.
- * @param usedCharacters
- * number of characters already used up (<code>0 <= usedCharacters <= 50</code>).
- * @return <code>true</code> if the specified text has to be encoded into
- * an encoded-word, <code>false</code> otherwise.
- */
- public static boolean hasToBeEncoded(String text, int usedCharacters) {
- if (text == null)
- throw new IllegalArgumentException();
- if (usedCharacters < 0 || usedCharacters > MAX_USED_CHARACTERS)
- throw new IllegalArgumentException();
-
- int nonWhiteSpaceCount = usedCharacters;
-
- for (int idx = 0; idx < text.length(); idx++) {
- char ch = text.charAt(idx);
- if (ch == '\t' || ch == ' ') {
- nonWhiteSpaceCount = 0;
- } else {
- nonWhiteSpaceCount++;
- if (nonWhiteSpaceCount > 77) {
- // Line cannot be folded into multiple lines with no more
- // than 78 characters each. Encoding as encoded-words makes
- // that possible. One character has to be reserved for
- // folding white space; that leaves 77 characters.
- return true;
- }
-
- if (ch < 32 || ch >= 127) {
- // non-printable ascii character has to be encoded
- return true;
- }
- }
- }
-
- return false;
- }
-
- /**
- * Encodes the specified text into an encoded word or a sequence of encoded
- * words separated by space. The text is separated into a sequence of
- * encoded words if it does not fit in a single one.
- * <p>
- * The charset to encode the specified text into a byte array and the
- * encoding to use for the encoded-word are detected automatically.
- * <p>
- * This method assumes that zero characters have already been used up in the
- * current line.
- *
- * @param text
- * text to encode.
- * @param usage
- * whether the encoded-word is to be used to replace a text token
- * or a word entity (see RFC 822).
- * @return the encoded word (or sequence of encoded words if the given text
- * does not fit in a single encoded word).
- * @see #hasToBeEncoded(String, int)
- */
- public static String encodeEncodedWord(String text, Usage usage) {
- return encodeEncodedWord(text, usage, 0, null, null);
- }
-
- /**
- * Encodes the specified text into an encoded word or a sequence of encoded
- * words separated by space. The text is separated into a sequence of
- * encoded words if it does not fit in a single one.
- * <p>
- * The charset to encode the specified text into a byte array and the
- * encoding to use for the encoded-word are detected automatically.
- *
- * @param text
- * text to encode.
- * @param usage
- * whether the encoded-word is to be used to replace a text token
- * or a word entity (see RFC 822).
- * @param usedCharacters
- * number of characters already used up (<code>0 <= usedCharacters <= 50</code>).
- * @return the encoded word (or sequence of encoded words if the given text
- * does not fit in a single encoded word).
- * @see #hasToBeEncoded(String, int)
- */
- public static String encodeEncodedWord(String text, Usage usage,
- int usedCharacters) {
- return encodeEncodedWord(text, usage, usedCharacters, null, null);
- }
-
- /**
- * Encodes the specified text into an encoded word or a sequence of encoded
- * words separated by space. The text is separated into a sequence of
- * encoded words if it does not fit in a single one.
- *
- * @param text
- * text to encode.
- * @param usage
- * whether the encoded-word is to be used to replace a text token
- * or a word entity (see RFC 822).
- * @param usedCharacters
- * number of characters already used up (<code>0 <= usedCharacters <= 50</code>).
- * @param charset
- * the Java charset that should be used to encode the specified
- * string into a byte array. A suitable charset is detected
- * automatically if this parameter is <code>null</code>.
- * @param encoding
- * the encoding to use for the encoded-word (either B or Q). A
- * suitable encoding is automatically chosen if this parameter is
- * <code>null</code>.
- * @return the encoded word (or sequence of encoded words if the given text
- * does not fit in a single encoded word).
- * @see #hasToBeEncoded(String, int)
- */
- public static String encodeEncodedWord(String text, Usage usage,
- int usedCharacters, Charset charset, Encoding encoding) {
- if (text == null)
- throw new IllegalArgumentException();
- if (usedCharacters < 0 || usedCharacters > MAX_USED_CHARACTERS)
- throw new IllegalArgumentException();
-
- if (charset == null)
- charset = determineCharset(text);
-
- String mimeCharset = CharsetUtil.toMimeCharset(charset.name());
- if (mimeCharset == null) {
- // cannot happen if charset was originally null
- throw new IllegalArgumentException("Unsupported charset");
- }
-
- byte[] bytes = encode(text, charset);
-
- if (encoding == null)
- encoding = determineEncoding(bytes, usage);
-
- if (encoding == Encoding.B) {
- String prefix = ENC_WORD_PREFIX + mimeCharset + "?B?";
- return encodeB(prefix, text, usedCharacters, charset, bytes);
- } else {
- String prefix = ENC_WORD_PREFIX + mimeCharset + "?Q?";
- return encodeQ(prefix, text, usage, usedCharacters, charset, bytes);
- }
- }
-
- /**
- * Encodes the specified byte array using the B encoding defined in RFC
- * 2047.
- *
- * @param bytes
- * byte array to encode.
- * @return encoded string.
- */
- public static String encodeB(byte[] bytes) {
- StringBuilder sb = new StringBuilder();
-
- int idx = 0;
- final int end = bytes.length;
- for (; idx < end - 2; idx += 3) {
- int data = (bytes[idx] & 0xff) << 16 | (bytes[idx + 1] & 0xff) << 8
- | bytes[idx + 2] & 0xff;
- sb.append((char) BASE64_TABLE[data >> 18 & 0x3f]);
- sb.append((char) BASE64_TABLE[data >> 12 & 0x3f]);
- sb.append((char) BASE64_TABLE[data >> 6 & 0x3f]);
- sb.append((char) BASE64_TABLE[data & 0x3f]);
- }
-
- if (idx == end - 2) {
- int data = (bytes[idx] & 0xff) << 16 | (bytes[idx + 1] & 0xff) << 8;
- sb.append((char) BASE64_TABLE[data >> 18 & 0x3f]);
- sb.append((char) BASE64_TABLE[data >> 12 & 0x3f]);
- sb.append((char) BASE64_TABLE[data >> 6 & 0x3f]);
- sb.append((char) BASE64_PAD);
-
- } else if (idx == end - 1) {
- int data = (bytes[idx] & 0xff) << 16;
- sb.append((char) BASE64_TABLE[data >> 18 & 0x3f]);
- sb.append((char) BASE64_TABLE[data >> 12 & 0x3f]);
- sb.append((char) BASE64_PAD);
- sb.append((char) BASE64_PAD);
- }
-
- return sb.toString();
- }
-
- /**
- * Encodes the specified byte array using the Q encoding defined in RFC
- * 2047.
- *
- * @param bytes
- * byte array to encode.
- * @param usage
- * whether the encoded-word is to be used to replace a text token
- * or a word entity (see RFC 822).
- * @return encoded string.
- */
- public static String encodeQ(byte[] bytes, Usage usage) {
- BitSet qChars = usage == Usage.TEXT_TOKEN ? Q_REGULAR_CHARS
- : Q_RESTRICTED_CHARS;
-
- StringBuilder sb = new StringBuilder();
-
- final int end = bytes.length;
- for (int idx = 0; idx < end; idx++) {
- int v = bytes[idx] & 0xff;
- if (v == 32) {
- sb.append('_');
- } else if (!qChars.get(v)) {
- sb.append('=');
- sb.append(hexDigit(v >>> 4));
- sb.append(hexDigit(v & 0xf));
- } else {
- sb.append((char) v);
- }
- }
-
- return sb.toString();
- }
-
- /**
- * Tests whether the specified string is a token as defined in RFC 2045
- * section 5.1.
- *
- * @param str
- * string to test.
- * @return <code>true</code> if the specified string is a RFC 2045 token,
- * <code>false</code> otherwise.
- */
- public static boolean isToken(String str) {
- // token := 1*<any (US-ASCII) CHAR except SPACE, CTLs, or tspecials>
- // tspecials := "(" / ")" / "<" / ">" / "@" / "," / ";" / ":" / "\" /
- // <"> / "/" / "[" / "]" / "?" / "="
- // CTL := 0.- 31., 127.
-
- final int length = str.length();
- if (length == 0)
- return false;
-
- for (int idx = 0; idx < length; idx++) {
- char ch = str.charAt(idx);
- if (!TOKEN_CHARS.get(ch))
- return false;
- }
-
- return true;
- }
-
- private static boolean isAtomPhrase(String str) {
- // atom = [CFWS] 1*atext [CFWS]
-
- boolean containsAText = false;
-
- final int length = str.length();
- for (int idx = 0; idx < length; idx++) {
- char ch = str.charAt(idx);
- if (ATEXT_CHARS.get(ch)) {
- containsAText = true;
- } else if (!CharsetUtil.isWhitespace(ch)) {
- return false;
- }
- }
-
- return containsAText;
- }
-
- // RFC 5322 section 3.2.3
- private static boolean isDotAtomText(String str) {
- // dot-atom-text = 1*atext *("." 1*atext)
- // atext = ALPHA / DIGIT / "!" / "#" / "$" / "%" / "&" / "'" / "*" /
- // "+" / "-" / "/" / "=" / "?" / "^" / "_" / "`" / "{" / "|" / "}" / "~"
-
- char prev = '.';
-
- final int length = str.length();
- if (length == 0)
- return false;
-
- for (int idx = 0; idx < length; idx++) {
- char ch = str.charAt(idx);
-
- if (ch == '.') {
- if (prev == '.' || idx == length - 1)
- return false;
- } else {
- if (!ATEXT_CHARS.get(ch))
- return false;
- }
-
- prev = ch;
- }
-
- return true;
- }
-
- // RFC 5322 section 3.2.4
- private static String quote(String str) {
- // quoted-string = [CFWS] DQUOTE *([FWS] qcontent) [FWS] DQUOTE [CFWS]
- // qcontent = qtext / quoted-pair
- // qtext = %d33 / %d35-91 / %d93-126
- // quoted-pair = ("\" (VCHAR / WSP))
- // VCHAR = %x21-7E
- // DQUOTE = %x22
-
- String escaped = str.replaceAll("[\\\\\"]", "\\\\$0");
- return "\"" + escaped + "\"";
- }
-
- private static String encodeB(String prefix, String text,
- int usedCharacters, Charset charset, byte[] bytes) {
- int encodedLength = bEncodedLength(bytes);
-
- int totalLength = prefix.length() + encodedLength
- + ENC_WORD_SUFFIX.length();
- if (totalLength <= ENCODED_WORD_MAX_LENGTH - usedCharacters) {
- return prefix + encodeB(bytes) + ENC_WORD_SUFFIX;
- } else {
- int splitOffset = text.offsetByCodePoints(text.length() / 2, -1);
-
- String part1 = text.substring(0, splitOffset);
- byte[] bytes1 = encode(part1, charset);
- String word1 = encodeB(prefix, part1, usedCharacters, charset,
- bytes1);
-
- String part2 = text.substring(splitOffset);
- byte[] bytes2 = encode(part2, charset);
- String word2 = encodeB(prefix, part2, 0, charset, bytes2);
-
- return word1 + " " + word2;
- }
- }
-
- private static int bEncodedLength(byte[] bytes) {
- return (bytes.length + 2) / 3 * 4;
- }
-
- private static String encodeQ(String prefix, String text, Usage usage,
- int usedCharacters, Charset charset, byte[] bytes) {
- int encodedLength = qEncodedLength(bytes, usage);
-
- int totalLength = prefix.length() + encodedLength
- + ENC_WORD_SUFFIX.length();
- if (totalLength <= ENCODED_WORD_MAX_LENGTH - usedCharacters) {
- return prefix + encodeQ(bytes, usage) + ENC_WORD_SUFFIX;
- } else {
- int splitOffset = text.offsetByCodePoints(text.length() / 2, -1);
-
- String part1 = text.substring(0, splitOffset);
- byte[] bytes1 = encode(part1, charset);
- String word1 = encodeQ(prefix, part1, usage, usedCharacters,
- charset, bytes1);
-
- String part2 = text.substring(splitOffset);
- byte[] bytes2 = encode(part2, charset);
- String word2 = encodeQ(prefix, part2, usage, 0, charset, bytes2);
-
- return word1 + " " + word2;
- }
- }
-
- private static int qEncodedLength(byte[] bytes, Usage usage) {
- BitSet qChars = usage == Usage.TEXT_TOKEN ? Q_REGULAR_CHARS
- : Q_RESTRICTED_CHARS;
-
- int count = 0;
-
- for (int idx = 0; idx < bytes.length; idx++) {
- int v = bytes[idx] & 0xff;
- if (v == 32) {
- count++;
- } else if (!qChars.get(v)) {
- count += 3;
- } else {
- count++;
- }
- }
-
- return count;
- }
-
- private static byte[] encode(String text, Charset charset) {
- ByteBuffer buffer = charset.encode(text);
- byte[] bytes = new byte[buffer.limit()];
- buffer.get(bytes);
- return bytes;
- }
-
- private static Charset determineCharset(String text) {
- // it is an important property of iso-8859-1 that it directly maps
- // unicode code points 0000 to 00ff to byte values 00 to ff.
- boolean ascii = true;
- final int len = text.length();
- for (int index = 0; index < len; index++) {
- char ch = text.charAt(index);
- if (ch > 0xff) {
- return CharsetUtil.UTF_8;
- }
- if (ch > 0x7f) {
- ascii = false;
- }
- }
- return ascii ? CharsetUtil.US_ASCII : CharsetUtil.ISO_8859_1;
- }
-
- private static Encoding determineEncoding(byte[] bytes, Usage usage) {
- if (bytes.length == 0)
- return Encoding.Q;
-
- BitSet qChars = usage == Usage.TEXT_TOKEN ? Q_REGULAR_CHARS
- : Q_RESTRICTED_CHARS;
-
- int qEncoded = 0;
- for (int i = 0; i < bytes.length; i++) {
- int v = bytes[i] & 0xff;
- if (v != 32 && !qChars.get(v)) {
- qEncoded++;
- }
- }
-
- int percentage = qEncoded * 100 / bytes.length;
- return percentage > 30 ? Encoding.B : Encoding.Q;
- }
-
- private static char hexDigit(int i) {
- return i < 10 ? (char) (i + '0') : (char) (i - 10 + 'A');
- }
-}
diff --git a/apache/org/apache/james/mime4j/decoder/Base64InputStream.java b/apache/org/apache/james/mime4j/decoder/Base64InputStream.java
deleted file mode 100644
index 77f5d7d4a..000000000
--- a/apache/org/apache/james/mime4j/decoder/Base64InputStream.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-/**
- * Modified to improve efficiency by Android 21-Aug-2009
- */
-
-package org.apache.james.mime4j.decoder;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * Performs Base-64 decoding on an underlying stream.
- *
- *
- * @version $Id: Base64InputStream.java,v 1.3 2004/11/29 13:15:47 ntherning Exp $
- */
-public class Base64InputStream extends InputStream {
- private final InputStream s;
- private int outCount = 0;
- private int outIndex = 0;
- private final int[] outputBuffer = new int[3];
- private final byte[] inputBuffer = new byte[4];
- private boolean done = false;
-
- public Base64InputStream(InputStream s) {
- this.s = s;
- }
-
- /**
- * Closes the underlying stream.
- *
- * @throws IOException on I/O errors.
- */
- @Override
- public void close() throws IOException {
- s.close();
- }
-
- @Override
- public int read() throws IOException {
- if (outIndex == outCount) {
- fillBuffer();
- if (outIndex == outCount) {
- return -1;
- }
- }
-
- return outputBuffer[outIndex++];
- }
-
- /**
- * Retrieve data from the underlying stream, decode it,
- * and put the results in the byteq.
- * @throws IOException
- */
- private void fillBuffer() throws IOException {
- outCount = 0;
- outIndex = 0;
- int inCount = 0;
-
- int i;
- // "done" is needed for the two successive '=' at the end
- while (!done) {
- switch (i = s.read()) {
- case -1:
- // No more input - just return, let outputBuffer drain out, and be done
- return;
- case '=':
- // once we meet the first '=', avoid reading the second '='
- done = true;
- decodeAndEnqueue(inCount);
- return;
- default:
- byte sX = TRANSLATION[i];
- if (sX < 0) continue;
- inputBuffer[inCount++] = sX;
- if (inCount == 4) {
- decodeAndEnqueue(inCount);
- return;
- }
- break;
- }
- }
- }
-
- private void decodeAndEnqueue(int len) {
- int accum = 0;
- accum |= inputBuffer[0] << 18;
- accum |= inputBuffer[1] << 12;
- accum |= inputBuffer[2] << 6;
- accum |= inputBuffer[3];
-
- // There's a bit of duplicated code here because we want to have straight-through operation
- // for the most common case of len==4
- if (len == 4) {
- outputBuffer[0] = (accum >> 16) & 0xFF;
- outputBuffer[1] = (accum >> 8) & 0xFF;
- outputBuffer[2] = (accum) & 0xFF;
- outCount = 3;
- return;
- } else if (len == 3) {
- outputBuffer[0] = (accum >> 16) & 0xFF;
- outputBuffer[1] = (accum >> 8) & 0xFF;
- outCount = 2;
- return;
- } else { // len == 2
- outputBuffer[0] = (accum >> 16) & 0xFF;
- outCount = 1;
- return;
- }
- }
-
- private static byte[] TRANSLATION = {
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 0x00 */
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 0x10 */
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, /* 0x20 */
- 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, /* 0x30 */
- -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, /* 0x40 */
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, /* 0x50 */
- -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, /* 0x60 */
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1, /* 0x70 */
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 0x80 */
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 0x90 */
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 0xA0 */
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 0xB0 */
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 0xC0 */
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 0xD0 */
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 0xE0 */
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 /* 0xF0 */
- };
-
-
-}
diff --git a/apache/org/apache/james/mime4j/decoder/ByteQueue.java b/apache/org/apache/james/mime4j/decoder/ByteQueue.java
deleted file mode 100644
index 6d7ccef52..000000000
--- a/apache/org/apache/james/mime4j/decoder/ByteQueue.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j.decoder;
-
-import java.util.Iterator;
-
-public class ByteQueue {
-
- private UnboundedFifoByteBuffer buf;
- private int initialCapacity = -1;
-
- public ByteQueue() {
- buf = new UnboundedFifoByteBuffer();
- }
-
- public ByteQueue(int initialCapacity) {
- buf = new UnboundedFifoByteBuffer(initialCapacity);
- this.initialCapacity = initialCapacity;
- }
-
- public void enqueue(byte b) {
- buf.add(b);
- }
-
- public byte dequeue() {
- return buf.remove();
- }
-
- public int count() {
- return buf.size();
- }
-
- public void clear() {
- if (initialCapacity != -1)
- buf = new UnboundedFifoByteBuffer(initialCapacity);
- else
- buf = new UnboundedFifoByteBuffer();
- }
-
- public Iterator iterator() {
- return buf.iterator();
- }
-
-
-}
diff --git a/apache/org/apache/james/mime4j/decoder/DecoderUtil.java b/apache/org/apache/james/mime4j/decoder/DecoderUtil.java
deleted file mode 100644
index 48fe07dee..000000000
--- a/apache/org/apache/james/mime4j/decoder/DecoderUtil.java
+++ /dev/null
@@ -1,284 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j.decoder;
-
-//BEGIN android-changed: Stubbing out logging
-import org.apache.james.mime4j.Log;
-import org.apache.james.mime4j.LogFactory;
-//END android-changed
-import org.apache.james.mime4j.util.CharsetUtil;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-
-/**
- * Static methods for decoding strings, byte arrays and encoded words.
- *
- *
- * @version $Id: DecoderUtil.java,v 1.3 2005/02/07 15:33:59 ntherning Exp $
- */
-public class DecoderUtil {
- private static Log log = LogFactory.getLog(DecoderUtil.class);
-
- /**
- * Decodes a string containing quoted-printable encoded data.
- *
- * @param s the string to decode.
- * @return the decoded bytes.
- */
- public static byte[] decodeBaseQuotedPrintable(String s) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
- try {
- byte[] bytes = s.getBytes("US-ASCII");
-
- QuotedPrintableInputStream is = new QuotedPrintableInputStream(
- new ByteArrayInputStream(bytes));
-
- int b = 0;
- while ((b = is.read()) != -1) {
- baos.write(b);
- }
- } catch (IOException e) {
- /*
- * This should never happen!
- */
- log.error(e);
- }
-
- return baos.toByteArray();
- }
-
- /**
- * Decodes a string containing base64 encoded data.
- *
- * @param s the string to decode.
- * @return the decoded bytes.
- */
- public static byte[] decodeBase64(String s) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
- try {
- byte[] bytes = s.getBytes("US-ASCII");
-
- Base64InputStream is = new Base64InputStream(
- new ByteArrayInputStream(bytes));
-
- int b = 0;
- while ((b = is.read()) != -1) {
- baos.write(b);
- }
- } catch (IOException e) {
- /*
- * This should never happen!
- */
- log.error(e);
- }
-
- return baos.toByteArray();
- }
-
- /**
- * Decodes an encoded word encoded with the 'B' encoding (described in
- * RFC 2047) found in a header field body.
- *
- * @param encodedWord the encoded word to decode.
- * @param charset the Java charset to use.
- * @return the decoded string.
- * @throws UnsupportedEncodingException if the given Java charset isn't
- * supported.
- */
- public static String decodeB(String encodedWord, String charset)
- throws UnsupportedEncodingException {
-
- return new String(decodeBase64(encodedWord), charset);
- }
-
- /**
- * Decodes an encoded word encoded with the 'Q' encoding (described in
- * RFC 2047) found in a header field body.
- *
- * @param encodedWord the encoded word to decode.
- * @param charset the Java charset to use.
- * @return the decoded string.
- * @throws UnsupportedEncodingException if the given Java charset isn't
- * supported.
- */
- public static String decodeQ(String encodedWord, String charset)
- throws UnsupportedEncodingException {
-
- /*
- * Replace _ with =20
- */
- StringBuffer sb = new StringBuffer();
- for (int i = 0; i < encodedWord.length(); i++) {
- char c = encodedWord.charAt(i);
- if (c == '_') {
- sb.append("=20");
- } else {
- sb.append(c);
- }
- }
-
- return new String(decodeBaseQuotedPrintable(sb.toString()), charset);
- }
-
- /**
- * Decodes a string containing encoded words as defined by RFC 2047.
- * Encoded words in have the form
- * =?charset?enc?Encoded word?= where enc is either 'Q' or 'q' for
- * quoted-printable and 'B' or 'b' for Base64.
- *
- * ANDROID: COPIED FROM A NEWER VERSION OF MIME4J
- *
- * @param body the string to decode.
- * @return the decoded string.
- */
- public static String decodeEncodedWords(String body) {
-
- // ANDROID: Most strings will not include "=?" so a quick test can prevent unneeded
- // object creation. This could also be handled via lazy creation of the StringBuilder.
- if (body.indexOf("=?") == -1) {
- return body;
- }
-
- int previousEnd = 0;
- boolean previousWasEncoded = false;
-
- StringBuilder sb = new StringBuilder();
-
- while (true) {
- int begin = body.indexOf("=?", previousEnd);
-
- // ANDROID: The mime4j original version has an error here. It gets confused if
- // the encoded string begins with an '=' (just after "?Q?"). This patch seeks forward
- // to find the two '?' in the "header", before looking for the final "?=".
- if (begin == -1) {
- break;
- }
- int qm1 = body.indexOf('?', begin + 2);
- if (qm1 == -1) {
- break;
- }
- int qm2 = body.indexOf('?', qm1 + 1);
- if (qm2 == -1) {
- break;
- }
- int end = body.indexOf("?=", qm2 + 1);
- if (end == -1) {
- break;
- }
- end += 2;
-
- String sep = body.substring(previousEnd, begin);
-
- String decoded = decodeEncodedWord(body, begin, end);
- if (decoded == null) {
- sb.append(sep);
- sb.append(body.substring(begin, end));
- } else {
- if (!previousWasEncoded || !CharsetUtil.isWhitespace(sep)) {
- sb.append(sep);
- }
- sb.append(decoded);
- }
-
- previousEnd = end;
- previousWasEncoded = decoded != null;
- }
-
- if (previousEnd == 0)
- return body;
-
- sb.append(body.substring(previousEnd));
- return sb.toString();
- }
-
- // return null on error. Begin is index of '=?' in body.
- public static String decodeEncodedWord(String body, int begin, int end) {
- // Skip the '?=' chars in body and scan forward from there for next '?'
- int qm1 = body.indexOf('?', begin + 2);
- if (qm1 == -1 || qm1 == end - 2)
- return null;
-
- int qm2 = body.indexOf('?', qm1 + 1);
- if (qm2 == -1 || qm2 == end - 2)
- return null;
-
- String mimeCharset = body.substring(begin + 2, qm1);
- String encoding = body.substring(qm1 + 1, qm2);
- String encodedText = body.substring(qm2 + 1, end - 2);
-
- String charset = CharsetUtil.toJavaCharset(mimeCharset);
- if (charset == null) {
- if (log.isWarnEnabled()) {
- log.warn("MIME charset '" + mimeCharset + "' in encoded word '"
- + body.substring(begin, end) + "' doesn't have a "
- + "corresponding Java charset");
- }
- return null;
- } else if (!CharsetUtil.isDecodingSupported(charset)) {
- if (log.isWarnEnabled()) {
- log.warn("Current JDK doesn't support decoding of charset '"
- + charset + "' (MIME charset '" + mimeCharset
- + "' in encoded word '" + body.substring(begin, end)
- + "')");
- }
- return null;
- }
-
- if (encodedText.length() == 0) {
- if (log.isWarnEnabled()) {
- log.warn("Missing encoded text in encoded word: '"
- + body.substring(begin, end) + "'");
- }
- return null;
- }
-
- try {
- if (encoding.equalsIgnoreCase("Q")) {
- return DecoderUtil.decodeQ(encodedText, charset);
- } else if (encoding.equalsIgnoreCase("B")) {
- return DecoderUtil.decodeB(encodedText, charset);
- } else {
- if (log.isWarnEnabled()) {
- log.warn("Warning: Unknown encoding in encoded word '"
- + body.substring(begin, end) + "'");
- }
- return null;
- }
- } catch (UnsupportedEncodingException e) {
- // should not happen because of isDecodingSupported check above
- if (log.isWarnEnabled()) {
- log.warn("Unsupported encoding in encoded word '"
- + body.substring(begin, end) + "'", e);
- }
- return null;
- } catch (RuntimeException e) {
- if (log.isWarnEnabled()) {
- log.warn("Could not decode encoded word '"
- + body.substring(begin, end) + "'", e);
- }
- return null;
- }
- }
-}
diff --git a/apache/org/apache/james/mime4j/decoder/QuotedPrintableInputStream.java b/apache/org/apache/james/mime4j/decoder/QuotedPrintableInputStream.java
deleted file mode 100644
index e43f398f9..000000000
--- a/apache/org/apache/james/mime4j/decoder/QuotedPrintableInputStream.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j.decoder;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-//BEGIN android-changed: Stubbing out logging
-import org.apache.james.mime4j.Log;
-import org.apache.james.mime4j.LogFactory;
-//END android-changed
-
-/**
- * Performs Quoted-Printable decoding on an underlying stream.
- *
- *
- *
- * @version $Id: QuotedPrintableInputStream.java,v 1.3 2004/11/29 13:15:47 ntherning Exp $
- */
-public class QuotedPrintableInputStream extends InputStream {
- private static Log log = LogFactory.getLog(QuotedPrintableInputStream.class);
-
- private InputStream stream;
- ByteQueue byteq = new ByteQueue();
- ByteQueue pushbackq = new ByteQueue();
- private byte state = 0;
-
- public QuotedPrintableInputStream(InputStream stream) {
- this.stream = stream;
- }
-
- /**
- * Closes the underlying stream.
- *
- * @throws IOException on I/O errors.
- */
- public void close() throws IOException {
- stream.close();
- }
-
- public int read() throws IOException {
- fillBuffer();
- if (byteq.count() == 0)
- return -1;
- else {
- byte val = byteq.dequeue();
- if (val >= 0)
- return val;
- else
- return val & 0xFF;
- }
- }
-
- /**
- * Pulls bytes out of the underlying stream and places them in the
- * pushback queue. This is necessary (vs. reading from the
- * underlying stream directly) to detect and filter out "transport
- * padding" whitespace, i.e., all whitespace that appears immediately
- * before a CRLF.
- *
- * @throws IOException Underlying stream threw IOException.
- */
- private void populatePushbackQueue() throws IOException {
- //Debug.verify(pushbackq.count() == 0, "PopulatePushbackQueue called when pushback queue was not empty!");
-
- if (pushbackq.count() != 0)
- return;
-
- while (true) {
- int i = stream.read();
- switch (i) {
- case -1:
- // stream is done
- pushbackq.clear(); // discard any whitespace preceding EOF
- return;
- case ' ':
- case '\t':
- pushbackq.enqueue((byte)i);
- break;
- case '\r':
- case '\n':
- pushbackq.clear(); // discard any whitespace preceding EOL
- pushbackq.enqueue((byte)i);
- return;
- default:
- pushbackq.enqueue((byte)i);
- return;
- }
- }
- }
-
- /**
- * Causes the pushback queue to get populated if it is empty, then
- * consumes and decodes bytes out of it until one or more bytes are
- * in the byte queue. This decoding step performs the actual QP
- * decoding.
- *
- * @throws IOException Underlying stream threw IOException.
- */
- private void fillBuffer() throws IOException {
- byte msdChar = 0; // first digit of escaped num
- while (byteq.count() == 0) {
- if (pushbackq.count() == 0) {
- populatePushbackQueue();
- if (pushbackq.count() == 0)
- return;
- }
-
- byte b = (byte)pushbackq.dequeue();
-
- switch (state) {
- case 0: // start state, no bytes pending
- if (b != '=') {
- byteq.enqueue(b);
- break; // state remains 0
- } else {
- state = 1;
- break;
- }
- case 1: // encountered "=" so far
- if (b == '\r') {
- state = 2;
- break;
- } else if ((b >= '0' && b <= '9') || (b >= 'A' && b <= 'F') || (b >= 'a' && b <= 'f')) {
- state = 3;
- msdChar = b; // save until next digit encountered
- break;
- } else if (b == '=') {
- /*
- * Special case when == is encountered.
- * Emit one = and stay in this state.
- */
- if (log.isWarnEnabled()) {
- log.warn("Malformed MIME; got ==");
- }
- byteq.enqueue((byte)'=');
- break;
- } else {
- if (log.isWarnEnabled()) {
- log.warn("Malformed MIME; expected \\r or "
- + "[0-9A-Z], got " + b);
- }
- state = 0;
- byteq.enqueue((byte)'=');
- byteq.enqueue(b);
- break;
- }
- case 2: // encountered "=\r" so far
- if (b == '\n') {
- state = 0;
- break;
- } else {
- if (log.isWarnEnabled()) {
- log.warn("Malformed MIME; expected "
- + (int)'\n' + ", got " + b);
- }
- state = 0;
- byteq.enqueue((byte)'=');
- byteq.enqueue((byte)'\r');
- byteq.enqueue(b);
- break;
- }
- case 3: // encountered =<digit> so far; expecting another <digit> to complete the octet
- if ((b >= '0' && b <= '9') || (b >= 'A' && b <= 'F') || (b >= 'a' && b <= 'f')) {
- byte msd = asciiCharToNumericValue(msdChar);
- byte low = asciiCharToNumericValue(b);
- state = 0;
- byteq.enqueue((byte)((msd << 4) | low));
- break;
- } else {
- if (log.isWarnEnabled()) {
- log.warn("Malformed MIME; expected "
- + "[0-9A-Z], got " + b);
- }
- state = 0;
- byteq.enqueue((byte)'=');
- byteq.enqueue(msdChar);
- byteq.enqueue(b);
- break;
- }
- default: // should never happen
- log.error("Illegal state: " + state);
- state = 0;
- byteq.enqueue(b);
- break;
- }
- }
- }
-
- /**
- * Converts '0' => 0, 'A' => 10, etc.
- * @param c ASCII character value.
- * @return Numeric value of hexadecimal character.
- */
- private byte asciiCharToNumericValue(byte c) {
- if (c >= '0' && c <= '9') {
- return (byte)(c - '0');
- } else if (c >= 'A' && c <= 'Z') {
- return (byte)(0xA + (c - 'A'));
- } else if (c >= 'a' && c <= 'z') {
- return (byte)(0xA + (c - 'a'));
- } else {
- /*
- * This should never happen since all calls to this method
- * are preceded by a check that c is in [0-9A-Za-z]
- */
- throw new IllegalArgumentException((char) c
- + " is not a hexadecimal digit");
- }
- }
-
-}
diff --git a/apache/org/apache/james/mime4j/decoder/UnboundedFifoByteBuffer.java b/apache/org/apache/james/mime4j/decoder/UnboundedFifoByteBuffer.java
deleted file mode 100644
index f01194fd1..000000000
--- a/apache/org/apache/james/mime4j/decoder/UnboundedFifoByteBuffer.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j.decoder;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * UnboundedFifoByteBuffer is a very efficient buffer implementation.
- * According to performance testing, it exhibits a constant access time, but it
- * also outperforms ArrayList when used for the same purpose.
- * <p>
- * The removal order of an <code>UnboundedFifoByteBuffer</code> is based on the insertion
- * order; elements are removed in the same order in which they were added.
- * The iteration order is the same as the removal order.
- * <p>
- * The {@link #remove()} and {@link #get()} operations perform in constant time.
- * The {@link #add(Object)} operation performs in amortized constant time. All
- * other operations perform in linear time or worse.
- * <p>
- * Note that this implementation is not synchronized. The following can be
- * used to provide synchronized access to your <code>UnboundedFifoByteBuffer</code>:
- * <pre>
- * Buffer fifo = BufferUtils.synchronizedBuffer(new UnboundedFifoByteBuffer());
- * </pre>
- * <p>
- * This buffer prevents null objects from being added.
- *
- * @since Commons Collections 3.0 (previously in main package v2.1)
- * @version $Revision: 1.1 $ $Date: 2004/08/24 06:52:02 $
- *
- *
- *
- *
- *
- *
- */
-class UnboundedFifoByteBuffer {
-
- protected byte[] buffer;
- protected int head;
- protected int tail;
-
- /**
- * Constructs an UnboundedFifoByteBuffer with the default number of elements.
- * It is exactly the same as performing the following:
- *
- * <pre>
- * new UnboundedFifoByteBuffer(32);
- * </pre>
- */
- public UnboundedFifoByteBuffer() {
- this(32);
- }
-
- /**
- * Constructs an UnboundedFifoByteBuffer with the specified number of elements.
- * The integer must be a positive integer.
- *
- * @param initialSize the initial size of the buffer
- * @throws IllegalArgumentException if the size is less than 1
- */
- public UnboundedFifoByteBuffer(int initialSize) {
- if (initialSize <= 0) {
- throw new IllegalArgumentException("The size must be greater than 0");
- }
- buffer = new byte[initialSize + 1];
- head = 0;
- tail = 0;
- }
-
- /**
- * Returns the number of elements stored in the buffer.
- *
- * @return this buffer's size
- */
- public int size() {
- int size = 0;
-
- if (tail < head) {
- size = buffer.length - head + tail;
- } else {
- size = tail - head;
- }
-
- return size;
- }
-
- /**
- * Returns true if this buffer is empty; false otherwise.
- *
- * @return true if this buffer is empty
- */
- public boolean isEmpty() {
- return (size() == 0);
- }
-
- /**
- * Adds the given element to this buffer.
- *
- * @param b the byte to add
- * @return true, always
- */
- public boolean add(final byte b) {
-
- if (size() + 1 >= buffer.length) {
- byte[] tmp = new byte[((buffer.length - 1) * 2) + 1];
-
- int j = 0;
- for (int i = head; i != tail;) {
- tmp[j] = buffer[i];
- buffer[i] = 0;
-
- j++;
- i++;
- if (i == buffer.length) {
- i = 0;
- }
- }
-
- buffer = tmp;
- head = 0;
- tail = j;
- }
-
- buffer[tail] = b;
- tail++;
- if (tail >= buffer.length) {
- tail = 0;
- }
- return true;
- }
-
- /**
- * Returns the next object in the buffer.
- *
- * @return the next object in the buffer
- * @throws BufferUnderflowException if this buffer is empty
- */
- public byte get() {
- if (isEmpty()) {
- throw new IllegalStateException("The buffer is already empty");
- }
-
- return buffer[head];
- }
-
- /**
- * Removes the next object from the buffer
- *
- * @return the removed object
- * @throws BufferUnderflowException if this buffer is empty
- */
- public byte remove() {
- if (isEmpty()) {
- throw new IllegalStateException("The buffer is already empty");
- }
-
- byte element = buffer[head];
-
- head++;
- if (head >= buffer.length) {
- head = 0;
- }
-
- return element;
- }
-
- /**
- * Increments the internal index.
- *
- * @param index the index to increment
- * @return the updated index
- */
- private int increment(int index) {
- index++;
- if (index >= buffer.length) {
- index = 0;
- }
- return index;
- }
-
- /**
- * Decrements the internal index.
- *
- * @param index the index to decrement
- * @return the updated index
- */
- private int decrement(int index) {
- index--;
- if (index < 0) {
- index = buffer.length - 1;
- }
- return index;
- }
-
- /**
- * Returns an iterator over this buffer's elements.
- *
- * @return an iterator over this buffer's elements
- */
- public Iterator iterator() {
- return new Iterator() {
-
- private int index = head;
- private int lastReturnedIndex = -1;
-
- public boolean hasNext() {
- return index != tail;
-
- }
-
- public Object next() {
- if (!hasNext()) {
- throw new NoSuchElementException();
- }
- lastReturnedIndex = index;
- index = increment(index);
- return new Byte(buffer[lastReturnedIndex]);
- }
-
- public void remove() {
- if (lastReturnedIndex == -1) {
- throw new IllegalStateException();
- }
-
- // First element can be removed quickly
- if (lastReturnedIndex == head) {
- UnboundedFifoByteBuffer.this.remove();
- lastReturnedIndex = -1;
- return;
- }
-
- // Other elements require us to shift the subsequent elements
- int i = lastReturnedIndex + 1;
- while (i != tail) {
- if (i >= buffer.length) {
- buffer[i - 1] = buffer[0];
- i = 0;
- } else {
- buffer[i - 1] = buffer[i];
- i++;
- }
- }
-
- lastReturnedIndex = -1;
- tail = decrement(tail);
- buffer[tail] = 0;
- index = decrement(index);
- }
-
- };
- }
-
-} \ No newline at end of file
diff --git a/apache/org/apache/james/mime4j/field/AddressListField.java b/apache/org/apache/james/mime4j/field/AddressListField.java
deleted file mode 100644
index df9f39835..000000000
--- a/apache/org/apache/james/mime4j/field/AddressListField.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j.field;
-
-//BEGIN android-changed: Stubbing out logging
-import org.apache.james.mime4j.Log;
-import org.apache.james.mime4j.LogFactory;
-//END android-changed
-import org.apache.james.mime4j.field.address.AddressList;
-import org.apache.james.mime4j.field.address.parser.ParseException;
-
-public class AddressListField extends Field {
- private AddressList addressList;
- private ParseException parseException;
-
- protected AddressListField(String name, String body, String raw, AddressList addressList, ParseException parseException) {
- super(name, body, raw);
- this.addressList = addressList;
- this.parseException = parseException;
- }
-
- public AddressList getAddressList() {
- return addressList;
- }
-
- public ParseException getParseException() {
- return parseException;
- }
-
- public static class Parser implements FieldParser {
- private static Log log = LogFactory.getLog(Parser.class);
-
- public Field parse(final String name, final String body, final String raw) {
- AddressList addressList = null;
- ParseException parseException = null;
- try {
- addressList = AddressList.parse(body);
- }
- catch (ParseException e) {
- if (log.isDebugEnabled()) {
- log.debug("Parsing value '" + body + "': "+ e.getMessage());
- }
- parseException = e;
- }
- return new AddressListField(name, body, raw, addressList, parseException);
- }
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/ContentTransferEncodingField.java b/apache/org/apache/james/mime4j/field/ContentTransferEncodingField.java
deleted file mode 100644
index 73d8d2339..000000000
--- a/apache/org/apache/james/mime4j/field/ContentTransferEncodingField.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j.field;
-
-
-
-/**
- * Represents a <code>Content-Transfer-Encoding</code> field.
- *
- *
- * @version $Id: ContentTransferEncodingField.java,v 1.2 2004/10/02 12:41:11 ntherning Exp $
- */
-public class ContentTransferEncodingField extends Field {
- /**
- * The <code>7bit</code> encoding.
- */
- public static final String ENC_7BIT = "7bit";
- /**
- * The <code>8bit</code> encoding.
- */
- public static final String ENC_8BIT = "8bit";
- /**
- * The <code>binary</code> encoding.
- */
- public static final String ENC_BINARY = "binary";
- /**
- * The <code>quoted-printable</code> encoding.
- */
- public static final String ENC_QUOTED_PRINTABLE = "quoted-printable";
- /**
- * The <code>base64</code> encoding.
- */
- public static final String ENC_BASE64 = "base64";
-
- private String encoding;
-
- protected ContentTransferEncodingField(String name, String body, String raw, String encoding) {
- super(name, body, raw);
- this.encoding = encoding;
- }
-
- /**
- * Gets the encoding defined in this field.
- *
- * @return the encoding or an empty string if not set.
- */
- public String getEncoding() {
- return encoding;
- }
-
- /**
- * Gets the encoding of the given field if. Returns the default
- * <code>7bit</code> if not set or if
- * <code>f</code> is <code>null</code>.
- *
- * @return the encoding.
- */
- public static String getEncoding(ContentTransferEncodingField f) {
- if (f != null && f.getEncoding().length() != 0) {
- return f.getEncoding();
- }
- return ENC_7BIT;
- }
-
- public static class Parser implements FieldParser {
- public Field parse(final String name, final String body, final String raw) {
- final String encoding = body.trim().toLowerCase();
- return new ContentTransferEncodingField(name, body, raw, encoding);
- }
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/ContentTypeField.java b/apache/org/apache/james/mime4j/field/ContentTypeField.java
deleted file mode 100644
index ad9f7f9ac..000000000
--- a/apache/org/apache/james/mime4j/field/ContentTypeField.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j.field;
-
-import java.io.StringReader;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-//BEGIN android-changed: Stubbing out logging
-import org.apache.james.mime4j.Log;
-import org.apache.james.mime4j.LogFactory;
-//END android-changed
-import org.apache.james.mime4j.field.contenttype.parser.ContentTypeParser;
-import org.apache.james.mime4j.field.contenttype.parser.ParseException;
-import org.apache.james.mime4j.field.contenttype.parser.TokenMgrError;
-
-/**
- * Represents a <code>Content-Type</code> field.
- *
- * <p>TODO: Remove dependency on Java 1.4 regexps</p>
- *
- *
- * @version $Id: ContentTypeField.java,v 1.6 2005/01/27 14:16:31 ntherning Exp $
- */
-public class ContentTypeField extends Field {
-
- /**
- * The prefix of all <code>multipart</code> MIME types.
- */
- public static final String TYPE_MULTIPART_PREFIX = "multipart/";
- /**
- * The <code>multipart/digest</code> MIME type.
- */
- public static final String TYPE_MULTIPART_DIGEST = "multipart/digest";
- /**
- * The <code>text/plain</code> MIME type.
- */
- public static final String TYPE_TEXT_PLAIN = "text/plain";
- /**
- * The <code>message/rfc822</code> MIME type.
- */
- public static final String TYPE_MESSAGE_RFC822 = "message/rfc822";
- /**
- * The name of the <code>boundary</code> parameter.
- */
- public static final String PARAM_BOUNDARY = "boundary";
- /**
- * The name of the <code>charset</code> parameter.
- */
- public static final String PARAM_CHARSET = "charset";
-
- private String mimeType = "";
- private Map<String, String> parameters = null;
- private ParseException parseException;
-
- protected ContentTypeField(String name, String body, String raw, String mimeType, Map<String, String> parameters, ParseException parseException) {
- super(name, body, raw);
- this.mimeType = mimeType;
- this.parameters = parameters;
- this.parseException = parseException;
- }
-
- /**
- * Gets the exception that was raised during parsing of
- * the field value, if any; otherwise, null.
- */
- public ParseException getParseException() {
- return parseException;
- }
-
- /**
- * Gets the MIME type defined in this Content-Type field.
- *
- * @return the MIME type or an empty string if not set.
- */
- public String getMimeType() {
- return mimeType;
- }
-
- /**
- * Gets the MIME type defined in the child's
- * Content-Type field or derives a MIME type from the parent
- * if child is <code>null</code> or hasn't got a MIME type value set.
- * If child's MIME type is multipart but no boundary
- * has been set the MIME type of child will be derived from
- * the parent.
- *
- * @param child the child.
- * @param parent the parent.
- * @return the MIME type.
- */
- public static String getMimeType(ContentTypeField child,
- ContentTypeField parent) {
-
- if (child == null || child.getMimeType().length() == 0
- || child.isMultipart() && child.getBoundary() == null) {
-
- if (parent != null && parent.isMimeType(TYPE_MULTIPART_DIGEST)) {
- return TYPE_MESSAGE_RFC822;
- } else {
- return TYPE_TEXT_PLAIN;
- }
- }
-
- return child.getMimeType();
- }
-
- /**
- * Gets the value of a parameter. Parameter names are case-insensitive.
- *
- * @param name the name of the parameter to get.
- * @return the parameter value or <code>null</code> if not set.
- */
- public String getParameter(String name) {
- return parameters != null
- ? parameters.get(name.toLowerCase())
- : null;
- }
-
- /**
- * Gets all parameters.
- *
- * @return the parameters.
- */
- public Map<String, String> getParameters() {
- if (parameters != null) {
- return Collections.unmodifiableMap(parameters);
- }
- return Collections.emptyMap();
- }
-
- /**
- * Gets the value of the <code>boundary</code> parameter if set.
- *
- * @return the <code>boundary</code> parameter value or <code>null</code>
- * if not set.
- */
- public String getBoundary() {
- return getParameter(PARAM_BOUNDARY);
- }
-
- /**
- * Gets the value of the <code>charset</code> parameter if set.
- *
- * @return the <code>charset</code> parameter value or <code>null</code>
- * if not set.
- */
- public String getCharset() {
- return getParameter(PARAM_CHARSET);
- }
-
- /**
- * Gets the value of the <code>charset</code> parameter if set for the
- * given field. Returns the default <code>us-ascii</code> if not set or if
- * <code>f</code> is <code>null</code>.
- *
- * @return the <code>charset</code> parameter value.
- */
- public static String getCharset(ContentTypeField f) {
- if (f != null) {
- if (f.getCharset() != null && f.getCharset().length() > 0) {
- return f.getCharset();
- }
- }
- return "us-ascii";
- }
-
- /**
- * Determines if the MIME type of this field matches the given one.
- *
- * @param mimeType the MIME type to match against.
- * @return <code>true</code> if the MIME type of this field matches,
- * <code>false</code> otherwise.
- */
- public boolean isMimeType(String mimeType) {
- return this.mimeType.equalsIgnoreCase(mimeType);
- }
-
- /**
- * Determines if the MIME type of this field is <code>multipart/*</code>.
- *
- * @return <code>true</code> if this field is has a <code>multipart/*</code>
- * MIME type, <code>false</code> otherwise.
- */
- public boolean isMultipart() {
- return mimeType.startsWith(TYPE_MULTIPART_PREFIX);
- }
-
- public static class Parser implements FieldParser {
- private static Log log = LogFactory.getLog(Parser.class);
-
- public Field parse(final String name, final String body, final String raw) {
- ParseException parseException = null;
- String mimeType = "";
- Map<String, String> parameters = null;
-
- ContentTypeParser parser = new ContentTypeParser(new StringReader(body));
- try {
- parser.parseAll();
- }
- catch (ParseException e) {
- if (log.isDebugEnabled()) {
- log.debug("Parsing value '" + body + "': "+ e.getMessage());
- }
- parseException = e;
- }
- catch (TokenMgrError e) {
- if (log.isDebugEnabled()) {
- log.debug("Parsing value '" + body + "': "+ e.getMessage());
- }
- parseException = new ParseException(e.getMessage());
- }
-
- try {
- final String type = parser.getType();
- final String subType = parser.getSubType();
-
- if (type != null && subType != null) {
- mimeType = (type + "/" + parser.getSubType()).toLowerCase();
-
- ArrayList<String> paramNames = parser.getParamNames();
- ArrayList<String> paramValues = parser.getParamValues();
-
- if (paramNames != null && paramValues != null) {
- for (int i = 0; i < paramNames.size() && i < paramValues.size(); i++) {
- if (parameters == null)
- parameters = new HashMap<String, String>((int)(paramNames.size() * 1.3 + 1));
- String paramName = paramNames.get(i).toLowerCase();
- String paramValue = paramValues.get(i);
- parameters.put(paramName, paramValue);
- }
- }
- }
- }
- catch (NullPointerException npe) {
- }
- return new ContentTypeField(name, body, raw, mimeType, parameters, parseException);
- }
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/DateTimeField.java b/apache/org/apache/james/mime4j/field/DateTimeField.java
deleted file mode 100644
index 2336d99db..000000000
--- a/apache/org/apache/james/mime4j/field/DateTimeField.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j.field;
-
-//BEGIN android-changed: Stubbing out logging
-
-import android.text.TextUtils;
-import java.util.regex.Pattern;
-import org.apache.james.mime4j.Log;
-import org.apache.james.mime4j.LogFactory;
-
-//END
-import org.apache.james.mime4j.field.datetime.DateTime;
-import org.apache.james.mime4j.field.datetime.parser.ParseException;
-
-import java.util.Date;
-
-public class DateTimeField extends Field {
- private Date date;
- private ParseException parseException;
-
- //BEGIN android-changed
- // "GMT" + "+" or "-" + 4 digits
- private static final Pattern DATE_CLEANUP_PATTERN_WRONG_TIMEZONE =
- Pattern.compile("GMT([-+]\\d{4})$");
- //END android-changed
-
- protected DateTimeField(String name, String body, String raw, Date date, ParseException parseException) {
- super(name, body, raw);
- this.date = date;
- this.parseException = parseException;
- }
-
- public Date getDate() {
- return date;
- }
-
- public ParseException getParseException() {
- return parseException;
- }
-
- public static class Parser implements FieldParser {
- private static Log log = LogFactory.getLog(Parser.class);
-
- public Field parse(final String name, String body, final String raw) {
- Date date = null;
- ParseException parseException = null;
- //BEGIN android-changed
- body = cleanUpMimeDate(body);
- //END android-changed
- try {
- date = DateTime.parse(body).getDate();
- }
- catch (ParseException e) {
- if (log.isDebugEnabled()) {
- log.debug("Parsing value '" + body + "': "+ e.getMessage());
- }
- parseException = e;
- }
- return new DateTimeField(name, body, raw, date, parseException);
- }
- }
-
- //BEGIN android-changed
- /**
- * Try to make a date MIME(RFC 2822/5322)-compliant.
- *
- * <p>It fixes: - "Thu, 10 Dec 09 15:08:08 GMT-0700" to "Thu, 10 Dec 09 15:08:08 -0700" (4 digit
- * zone value can't be preceded by "GMT") We got a report saying eBay sends a date in this format
- */
- private static String cleanUpMimeDate(String date) {
- if (TextUtils.isEmpty(date)) {
- return date;
- }
- date = DATE_CLEANUP_PATTERN_WRONG_TIMEZONE.matcher(date).replaceFirst("$1");
- return date;
- }
- //END android-changed
-}
diff --git a/apache/org/apache/james/mime4j/field/DefaultFieldParser.java b/apache/org/apache/james/mime4j/field/DefaultFieldParser.java
deleted file mode 100644
index 3695afe3e..000000000
--- a/apache/org/apache/james/mime4j/field/DefaultFieldParser.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2006 the mime4j project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.james.mime4j.field;
-
-public class DefaultFieldParser extends DelegatingFieldParser {
-
- public DefaultFieldParser() {
- setFieldParser(Field.CONTENT_TRANSFER_ENCODING, new ContentTransferEncodingField.Parser());
- setFieldParser(Field.CONTENT_TYPE, new ContentTypeField.Parser());
-
- final DateTimeField.Parser dateTimeParser = new DateTimeField.Parser();
- setFieldParser(Field.DATE, dateTimeParser);
- setFieldParser(Field.RESENT_DATE, dateTimeParser);
-
- final MailboxListField.Parser mailboxListParser = new MailboxListField.Parser();
- setFieldParser(Field.FROM, mailboxListParser);
- setFieldParser(Field.RESENT_FROM, mailboxListParser);
-
- final MailboxField.Parser mailboxParser = new MailboxField.Parser();
- setFieldParser(Field.SENDER, mailboxParser);
- setFieldParser(Field.RESENT_SENDER, mailboxParser);
-
- final AddressListField.Parser addressListParser = new AddressListField.Parser();
- setFieldParser(Field.TO, addressListParser);
- setFieldParser(Field.RESENT_TO, addressListParser);
- setFieldParser(Field.CC, addressListParser);
- setFieldParser(Field.RESENT_CC, addressListParser);
- setFieldParser(Field.BCC, addressListParser);
- setFieldParser(Field.RESENT_BCC, addressListParser);
- setFieldParser(Field.REPLY_TO, addressListParser);
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/DelegatingFieldParser.java b/apache/org/apache/james/mime4j/field/DelegatingFieldParser.java
deleted file mode 100644
index 32b69ec13..000000000
--- a/apache/org/apache/james/mime4j/field/DelegatingFieldParser.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2006 the mime4j project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.james.mime4j.field;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class DelegatingFieldParser implements FieldParser {
-
- private Map<String, FieldParser> parsers = new HashMap<String, FieldParser>();
- private FieldParser defaultParser = new UnstructuredField.Parser();
-
- /**
- * Sets the parser used for the field named <code>name</code>.
- * @param name the name of the field
- * @param parser the parser for fields named <code>name</code>
- */
- public void setFieldParser(final String name, final FieldParser parser) {
- parsers.put(name.toLowerCase(), parser);
- }
-
- public FieldParser getParser(final String name) {
- final FieldParser field = parsers.get(name.toLowerCase());
- if(field==null) {
- return defaultParser;
- }
- return field;
- }
-
- public Field parse(final String name, final String body, final String raw) {
- final FieldParser parser = getParser(name);
- return parser.parse(name, body, raw);
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/Field.java b/apache/org/apache/james/mime4j/field/Field.java
deleted file mode 100644
index 4dea5c5cf..000000000
--- a/apache/org/apache/james/mime4j/field/Field.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j.field;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * The base class of all field classes.
- *
- *
- * @version $Id: Field.java,v 1.6 2004/10/25 07:26:46 ntherning Exp $
- */
-public abstract class Field {
- public static final String SENDER = "Sender";
- public static final String FROM = "From";
- public static final String TO = "To";
- public static final String CC = "Cc";
- public static final String BCC = "Bcc";
- public static final String REPLY_TO = "Reply-To";
- public static final String RESENT_SENDER = "Resent-Sender";
- public static final String RESENT_FROM = "Resent-From";
- public static final String RESENT_TO = "Resent-To";
- public static final String RESENT_CC = "Resent-Cc";
- public static final String RESENT_BCC = "Resent-Bcc";
-
- public static final String DATE = "Date";
- public static final String RESENT_DATE = "Resent-Date";
-
- public static final String SUBJECT = "Subject";
- public static final String CONTENT_TYPE = "Content-Type";
- public static final String CONTENT_TRANSFER_ENCODING =
- "Content-Transfer-Encoding";
-
- private static final String FIELD_NAME_PATTERN =
- "^([\\x21-\\x39\\x3b-\\x7e]+)[ \t]*:";
- private static final Pattern fieldNamePattern =
- Pattern.compile(FIELD_NAME_PATTERN);
-
- private static final DefaultFieldParser parser = new DefaultFieldParser();
-
- private final String name;
- private final String body;
- private final String raw;
-
- protected Field(final String name, final String body, final String raw) {
- this.name = name;
- this.body = body;
- this.raw = raw;
- }
-
- /**
- * Parses the given string and returns an instance of the
- * <code>Field</code> class. The type of the class returned depends on
- * the field name:
- * <table>
- * <tr>
- * <td><em>Field name</em></td><td><em>Class returned</em></td>
- * <td>Content-Type</td><td>org.apache.james.mime4j.field.ContentTypeField</td>
- * <td>other</td><td>org.apache.james.mime4j.field.UnstructuredField</td>
- * </tr>
- * </table>
- *
- * @param s the string to parse.
- * @return a <code>Field</code> instance.
- * @throws IllegalArgumentException on parse errors.
- */
- public static Field parse(final String raw) {
-
- /*
- * Unfold the field.
- */
- final String unfolded = raw.replaceAll("\r|\n", "");
-
- /*
- * Split into name and value.
- */
- final Matcher fieldMatcher = fieldNamePattern.matcher(unfolded);
- if (!fieldMatcher.find()) {
- throw new IllegalArgumentException("Invalid field in string");
- }
- final String name = fieldMatcher.group(1);
-
- String body = unfolded.substring(fieldMatcher.end());
- if (body.length() > 0 && body.charAt(0) == ' ') {
- body = body.substring(1);
- }
-
- return parser.parse(name, body, raw);
- }
-
- /**
- * Gets the default parser used to parse fields.
- * @return the default field parser
- */
- public static DefaultFieldParser getParser() {
- return parser;
- }
-
- /**
- * Gets the name of the field (<code>Subject</code>,
- * <code>From</code>, etc).
- *
- * @return the field name.
- */
- public String getName() {
- return name;
- }
-
- /**
- * Gets the original raw field string.
- *
- * @return the original raw field string.
- */
- public String getRaw() {
- return raw;
- }
-
- /**
- * Gets the unfolded, unparsed and possibly encoded (see RFC 2047) field
- * body string.
- *
- * @return the unfolded unparsed field body string.
- */
- public String getBody() {
- return body;
- }
-
- /**
- * Determines if this is a <code>Content-Type</code> field.
- *
- * @return <code>true</code> if this is a <code>Content-Type</code> field,
- * <code>false</code> otherwise.
- */
- public boolean isContentType() {
- return CONTENT_TYPE.equalsIgnoreCase(name);
- }
-
- /**
- * Determines if this is a <code>Subject</code> field.
- *
- * @return <code>true</code> if this is a <code>Subject</code> field,
- * <code>false</code> otherwise.
- */
- public boolean isSubject() {
- return SUBJECT.equalsIgnoreCase(name);
- }
-
- /**
- * Determines if this is a <code>From</code> field.
- *
- * @return <code>true</code> if this is a <code>From</code> field,
- * <code>false</code> otherwise.
- */
- public boolean isFrom() {
- return FROM.equalsIgnoreCase(name);
- }
-
- /**
- * Determines if this is a <code>To</code> field.
- *
- * @return <code>true</code> if this is a <code>To</code> field,
- * <code>false</code> otherwise.
- */
- public boolean isTo() {
- return TO.equalsIgnoreCase(name);
- }
-
- /**
- * @see #getRaw()
- */
- public String toString() {
- return raw;
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/FieldParser.java b/apache/org/apache/james/mime4j/field/FieldParser.java
deleted file mode 100644
index 78aaf1334..000000000
--- a/apache/org/apache/james/mime4j/field/FieldParser.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright 2006 the mime4j project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.james.mime4j.field;
-
-public interface FieldParser {
-
- Field parse(final String name, final String body, final String raw);
-}
diff --git a/apache/org/apache/james/mime4j/field/MailboxField.java b/apache/org/apache/james/mime4j/field/MailboxField.java
deleted file mode 100644
index f15980055..000000000
--- a/apache/org/apache/james/mime4j/field/MailboxField.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j.field;
-
-//BEGIN android-changed: Stubbing out logging
-import org.apache.james.mime4j.Log;
-import org.apache.james.mime4j.LogFactory;
-//END android-changed
-import org.apache.james.mime4j.field.address.AddressList;
-import org.apache.james.mime4j.field.address.Mailbox;
-import org.apache.james.mime4j.field.address.MailboxList;
-import org.apache.james.mime4j.field.address.parser.ParseException;
-
-public class MailboxField extends Field {
- private final Mailbox mailbox;
- private final ParseException parseException;
-
- protected MailboxField(final String name, final String body, final String raw, final Mailbox mailbox, final ParseException parseException) {
- super(name, body, raw);
- this.mailbox = mailbox;
- this.parseException = parseException;
- }
-
- public Mailbox getMailbox() {
- return mailbox;
- }
-
- public ParseException getParseException() {
- return parseException;
- }
-
- public static class Parser implements FieldParser {
- private static Log log = LogFactory.getLog(Parser.class);
-
- public Field parse(final String name, final String body, final String raw) {
- Mailbox mailbox = null;
- ParseException parseException = null;
- try {
- MailboxList mailboxList = AddressList.parse(body).flatten();
- if (mailboxList.size() > 0) {
- mailbox = mailboxList.get(0);
- }
- }
- catch (ParseException e) {
- if (log.isDebugEnabled()) {
- log.debug("Parsing value '" + body + "': "+ e.getMessage());
- }
- parseException = e;
- }
- return new MailboxField(name, body, raw, mailbox, parseException);
- }
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/MailboxListField.java b/apache/org/apache/james/mime4j/field/MailboxListField.java
deleted file mode 100644
index 23378d4fa..000000000
--- a/apache/org/apache/james/mime4j/field/MailboxListField.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j.field;
-
-//BEGIN android-changed: Stubbing out logging
-import org.apache.james.mime4j.Log;
-import org.apache.james.mime4j.LogFactory;
-//END android-changed
-import org.apache.james.mime4j.field.address.AddressList;
-import org.apache.james.mime4j.field.address.MailboxList;
-import org.apache.james.mime4j.field.address.parser.ParseException;
-
-public class MailboxListField extends Field {
-
- private MailboxList mailboxList;
- private ParseException parseException;
-
- protected MailboxListField(final String name, final String body, final String raw, final MailboxList mailboxList, final ParseException parseException) {
- super(name, body, raw);
- this.mailboxList = mailboxList;
- this.parseException = parseException;
- }
-
- public MailboxList getMailboxList() {
- return mailboxList;
- }
-
- public ParseException getParseException() {
- return parseException;
- }
-
- public static class Parser implements FieldParser {
- private static Log log = LogFactory.getLog(Parser.class);
-
- public Field parse(final String name, final String body, final String raw) {
- MailboxList mailboxList = null;
- ParseException parseException = null;
- try {
- mailboxList = AddressList.parse(body).flatten();
- }
- catch (ParseException e) {
- if (log.isDebugEnabled()) {
- log.debug("Parsing value '" + body + "': "+ e.getMessage());
- }
- parseException = e;
- }
- return new MailboxListField(name, body, raw, mailboxList, parseException);
- }
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/UnstructuredField.java b/apache/org/apache/james/mime4j/field/UnstructuredField.java
deleted file mode 100644
index 6084e4435..000000000
--- a/apache/org/apache/james/mime4j/field/UnstructuredField.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j.field;
-
-import org.apache.james.mime4j.decoder.DecoderUtil;
-
-
-/**
- * Simple unstructured field such as <code>Subject</code>.
- *
- *
- * @version $Id: UnstructuredField.java,v 1.3 2004/10/25 07:26:46 ntherning Exp $
- */
-public class UnstructuredField extends Field {
- private String value;
-
- protected UnstructuredField(String name, String body, String raw, String value) {
- super(name, body, raw);
- this.value = value;
- }
-
- public String getValue() {
- return value;
- }
-
- public static class Parser implements FieldParser {
- public Field parse(final String name, final String body, final String raw) {
- final String value = DecoderUtil.decodeEncodedWords(body);
- return new UnstructuredField(name, body, raw, value);
- }
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/address/Address.java b/apache/org/apache/james/mime4j/field/address/Address.java
deleted file mode 100644
index 3e24e91aa..000000000
--- a/apache/org/apache/james/mime4j/field/address/Address.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j.field.address;
-
-import java.util.ArrayList;
-
-/**
- * The abstract base for classes that represent RFC2822 addresses.
- * This includes groups and mailboxes.
- *
- * Currently, no public methods are introduced on this class.
- *
- *
- */
-public abstract class Address {
-
- /**
- * Adds any mailboxes represented by this address
- * into the given ArrayList. Note that this method
- * has default (package) access, so a doAddMailboxesTo
- * method is needed to allow the behavior to be
- * overridden by subclasses.
- */
- final void addMailboxesTo(ArrayList<Address> results) {
- doAddMailboxesTo(results);
- }
-
- /**
- * Adds any mailboxes represented by this address
- * into the given ArrayList. Must be overridden by
- * concrete subclasses.
- */
- protected abstract void doAddMailboxesTo(ArrayList<Address> results);
-
-}
diff --git a/apache/org/apache/james/mime4j/field/address/AddressList.java b/apache/org/apache/james/mime4j/field/address/AddressList.java
deleted file mode 100644
index 1829e79aa..000000000
--- a/apache/org/apache/james/mime4j/field/address/AddressList.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j.field.address;
-
-import org.apache.james.mime4j.field.address.parser.AddressListParser;
-import org.apache.james.mime4j.field.address.parser.ParseException;
-
-import java.io.StringReader;
-import java.util.ArrayList;
-
-/**
- * An immutable, random-access list of Address objects.
- *
- *
- */
-public class AddressList {
-
- private ArrayList<Address> addresses;
-
- /**
- * @param addresses An ArrayList that contains only Address objects.
- * @param dontCopy true iff it is not possible for the addresses ArrayList to be modified by someone else.
- */
- public AddressList(ArrayList<Address> addresses, boolean dontCopy) {
- if (addresses != null)
- this.addresses = (dontCopy ? addresses : new ArrayList<Address>(addresses));
- else
- this.addresses = new ArrayList<Address>(0);
- }
-
- /**
- * The number of elements in this list.
- */
- public int size() {
- return addresses.size();
- }
-
- /**
- * Gets an address.
- */
- public Address get(int index) {
- if (0 > index || size() <= index)
- throw new IndexOutOfBoundsException();
- return addresses.get(index);
- }
-
- /**
- * Returns a flat list of all mailboxes represented
- * in this address list. Use this if you don't care
- * about grouping.
- */
- public MailboxList flatten() {
- // in the common case, all addresses are mailboxes
- boolean groupDetected = false;
- for (int i = 0; i < size(); i++) {
- if (!(get(i) instanceof Mailbox)) {
- groupDetected = true;
- break;
- }
- }
-
- if (!groupDetected)
- return new MailboxList(addresses, true);
-
- ArrayList<Address> results = new ArrayList<Address>();
- for (int i = 0; i < size(); i++) {
- Address addr = get(i);
- addr.addMailboxesTo(results);
- }
-
- // copy-on-construct this time, because subclasses
- // could have held onto a reference to the results
- return new MailboxList(results, false);
- }
-
- /**
- * Dumps a representation of this address list to
- * stdout, for debugging purposes.
- */
- public void print() {
- for (int i = 0; i < size(); i++) {
- Address addr = get(i);
- System.out.println(addr.toString());
- }
- }
-
- /**
- * Parse the address list string, such as the value
- * of a From, To, Cc, Bcc, Sender, or Reply-To
- * header.
- *
- * The string MUST be unfolded already.
- */
- public static AddressList parse(String rawAddressList) throws ParseException {
- AddressListParser parser = new AddressListParser(new StringReader(rawAddressList));
- return Builder.getInstance().buildAddressList(parser.parse());
- }
-
- /**
- * Test console.
- */
- public static void main(String[] args) throws Exception {
- java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
- while (true) {
- try {
- System.out.print("> ");
- String line = reader.readLine();
- if (line.length() == 0 || line.toLowerCase().equals("exit") || line.toLowerCase().equals("quit")) {
- System.out.println("Goodbye.");
- return;
- }
- AddressList list = parse(line);
- list.print();
- }
- catch(Exception e) {
- e.printStackTrace();
- Thread.sleep(300);
- }
- }
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/address/Builder.java b/apache/org/apache/james/mime4j/field/address/Builder.java
deleted file mode 100644
index 3bcd15b6f..000000000
--- a/apache/org/apache/james/mime4j/field/address/Builder.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j.field.address;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import org.apache.james.mime4j.decoder.DecoderUtil;
-import org.apache.james.mime4j.field.address.parser.ASTaddr_spec;
-import org.apache.james.mime4j.field.address.parser.ASTaddress;
-import org.apache.james.mime4j.field.address.parser.ASTaddress_list;
-import org.apache.james.mime4j.field.address.parser.ASTangle_addr;
-import org.apache.james.mime4j.field.address.parser.ASTdomain;
-import org.apache.james.mime4j.field.address.parser.ASTgroup_body;
-import org.apache.james.mime4j.field.address.parser.ASTlocal_part;
-import org.apache.james.mime4j.field.address.parser.ASTmailbox;
-import org.apache.james.mime4j.field.address.parser.ASTname_addr;
-import org.apache.james.mime4j.field.address.parser.ASTphrase;
-import org.apache.james.mime4j.field.address.parser.ASTroute;
-import org.apache.james.mime4j.field.address.parser.Node;
-import org.apache.james.mime4j.field.address.parser.SimpleNode;
-import org.apache.james.mime4j.field.address.parser.Token;
-
-/**
- * Transforms the JJTree-generated abstract syntax tree
- * into a graph of org.apache.james.mime4j.field.address objects.
- *
- *
- */
-class Builder {
-
- private static Builder singleton = new Builder();
-
- public static Builder getInstance() {
- return singleton;
- }
-
-
-
- public AddressList buildAddressList(ASTaddress_list node) {
- ArrayList<Address> list = new ArrayList<Address>();
- for (int i = 0; i < node.jjtGetNumChildren(); i++) {
- ASTaddress childNode = (ASTaddress) node.jjtGetChild(i);
- Address address = buildAddress(childNode);
- list.add(address);
- }
- return new AddressList(list, true);
- }
-
- private Address buildAddress(ASTaddress node) {
- ChildNodeIterator it = new ChildNodeIterator(node);
- Node n = it.nextNode();
- if (n instanceof ASTaddr_spec) {
- return buildAddrSpec((ASTaddr_spec)n);
- }
- else if (n instanceof ASTangle_addr) {
- return buildAngleAddr((ASTangle_addr)n);
- }
- else if (n instanceof ASTphrase) {
- String name = buildString((ASTphrase)n, false);
- Node n2 = it.nextNode();
- if (n2 instanceof ASTgroup_body) {
- return new Group(name, buildGroupBody((ASTgroup_body)n2));
- }
- else if (n2 instanceof ASTangle_addr) {
- name = DecoderUtil.decodeEncodedWords(name);
- return new NamedMailbox(name, buildAngleAddr((ASTangle_addr)n2));
- }
- else {
- throw new IllegalStateException();
- }
- }
- else {
- throw new IllegalStateException();
- }
- }
-
-
-
- private MailboxList buildGroupBody(ASTgroup_body node) {
- ArrayList<Address> results = new ArrayList<Address>();
- ChildNodeIterator it = new ChildNodeIterator(node);
- while (it.hasNext()) {
- Node n = it.nextNode();
- if (n instanceof ASTmailbox)
- results.add(buildMailbox((ASTmailbox)n));
- else
- throw new IllegalStateException();
- }
- return new MailboxList(results, true);
- }
-
- private Mailbox buildMailbox(ASTmailbox node) {
- ChildNodeIterator it = new ChildNodeIterator(node);
- Node n = it.nextNode();
- if (n instanceof ASTaddr_spec) {
- return buildAddrSpec((ASTaddr_spec)n);
- }
- else if (n instanceof ASTangle_addr) {
- return buildAngleAddr((ASTangle_addr)n);
- }
- else if (n instanceof ASTname_addr) {
- return buildNameAddr((ASTname_addr)n);
- }
- else {
- throw new IllegalStateException();
- }
- }
-
- private NamedMailbox buildNameAddr(ASTname_addr node) {
- ChildNodeIterator it = new ChildNodeIterator(node);
- Node n = it.nextNode();
- String name;
- if (n instanceof ASTphrase) {
- name = buildString((ASTphrase)n, false);
- }
- else {
- throw new IllegalStateException();
- }
-
- n = it.nextNode();
- if (n instanceof ASTangle_addr) {
- name = DecoderUtil.decodeEncodedWords(name);
- return new NamedMailbox(name, buildAngleAddr((ASTangle_addr) n));
- }
- else {
- throw new IllegalStateException();
- }
- }
-
- private Mailbox buildAngleAddr(ASTangle_addr node) {
- ChildNodeIterator it = new ChildNodeIterator(node);
- DomainList route = null;
- Node n = it.nextNode();
- if (n instanceof ASTroute) {
- route = buildRoute((ASTroute)n);
- n = it.nextNode();
- }
- else if (n instanceof ASTaddr_spec)
- ; // do nothing
- else
- throw new IllegalStateException();
-
- if (n instanceof ASTaddr_spec)
- return buildAddrSpec(route, (ASTaddr_spec)n);
- else
- throw new IllegalStateException();
- }
-
- private DomainList buildRoute(ASTroute node) {
- ArrayList<String> results = new ArrayList<String>(node.jjtGetNumChildren());
- ChildNodeIterator it = new ChildNodeIterator(node);
- while (it.hasNext()) {
- Node n = it.nextNode();
- if (n instanceof ASTdomain)
- results.add(buildString((ASTdomain)n, true));
- else
- throw new IllegalStateException();
- }
- return new DomainList(results, true);
- }
-
- private Mailbox buildAddrSpec(ASTaddr_spec node) {
- return buildAddrSpec(null, node);
- }
- private Mailbox buildAddrSpec(DomainList route, ASTaddr_spec node) {
- ChildNodeIterator it = new ChildNodeIterator(node);
- String localPart = buildString((ASTlocal_part)it.nextNode(), true);
- String domain = buildString((ASTdomain)it.nextNode(), true);
- return new Mailbox(route, localPart, domain);
- }
-
-
- private String buildString(SimpleNode node, boolean stripSpaces) {
- Token head = node.firstToken;
- Token tail = node.lastToken;
- StringBuffer out = new StringBuffer();
-
- while (head != tail) {
- out.append(head.image);
- head = head.next;
- if (!stripSpaces)
- addSpecials(out, head.specialToken);
- }
- out.append(tail.image);
-
- return out.toString();
- }
-
- private void addSpecials(StringBuffer out, Token specialToken) {
- if (specialToken != null) {
- addSpecials(out, specialToken.specialToken);
- out.append(specialToken.image);
- }
- }
-
- private static class ChildNodeIterator implements Iterator<Node> {
-
- private SimpleNode simpleNode;
- private int index;
- private int len;
-
- public ChildNodeIterator(SimpleNode simpleNode) {
- this.simpleNode = simpleNode;
- this.len = simpleNode.jjtGetNumChildren();
- this.index = 0;
- }
-
- public void remove() {
- throw new UnsupportedOperationException();
- }
-
- public boolean hasNext() {
- return index < len;
- }
-
- public Node next() {
- return nextNode();
- }
-
- public Node nextNode() {
- return simpleNode.jjtGetChild(index++);
- }
-
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/address/DomainList.java b/apache/org/apache/james/mime4j/field/address/DomainList.java
deleted file mode 100644
index 49b0f3be5..000000000
--- a/apache/org/apache/james/mime4j/field/address/DomainList.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j.field.address;
-
-import java.util.ArrayList;
-
-/**
- * An immutable, random-access list of Strings (that
- * are supposedly domain names or domain literals).
- *
- *
- */
-public class DomainList {
- private ArrayList<String> domains;
-
- /**
- * @param domains An ArrayList that contains only String objects.
- * @param dontCopy true iff it is not possible for the domains ArrayList to be modified by someone else.
- */
- public DomainList(ArrayList<String> domains, boolean dontCopy) {
- if (domains != null)
- this.domains = (dontCopy ? domains : new ArrayList<String>(domains));
- else
- this.domains = new ArrayList<String>(0);
- }
-
- /**
- * The number of elements in this list.
- */
- public int size() {
- return domains.size();
- }
-
- /**
- * Gets the domain name or domain literal at the
- * specified index.
- * @throws IndexOutOfBoundsException If index is &lt; 0 or &gt;= size().
- */
- public String get(int index) {
- if (0 > index || size() <= index)
- throw new IndexOutOfBoundsException();
- return domains.get(index);
- }
-
- /**
- * Returns the list of domains formatted as a route
- * string (not including the trailing ':').
- */
- public String toRouteString() {
- StringBuffer out = new StringBuffer();
- for (int i = 0; i < domains.size(); i++) {
- out.append("@");
- out.append(get(i));
- if (i + 1 < domains.size())
- out.append(",");
- }
- return out.toString();
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/address/Group.java b/apache/org/apache/james/mime4j/field/address/Group.java
deleted file mode 100644
index c0ab7f724..000000000
--- a/apache/org/apache/james/mime4j/field/address/Group.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j.field.address;
-
-import java.util.ArrayList;
-
-/**
- * A named group of zero or more mailboxes.
- *
- *
- */
-public class Group extends Address {
- private String name;
- private MailboxList mailboxList;
-
- /**
- * @param name The group name.
- * @param mailboxes The mailboxes in this group.
- */
- public Group(String name, MailboxList mailboxes) {
- this.name = name;
- this.mailboxList = mailboxes;
- }
-
- /**
- * Returns the group name.
- */
- public String getName() {
- return name;
- }
-
- /**
- * Returns the mailboxes in this group.
- */
- public MailboxList getMailboxes() {
- return mailboxList;
- }
-
- @Override
- public String toString() {
- StringBuffer buf = new StringBuffer();
- buf.append(name);
- buf.append(":");
- for (int i = 0; i < mailboxList.size(); i++) {
- buf.append(mailboxList.get(i).toString());
- if (i + 1 < mailboxList.size())
- buf.append(",");
- }
- buf.append(";");
- return buf.toString();
- }
-
- @Override
- protected void doAddMailboxesTo(ArrayList<Address> results) {
- for (int i = 0; i < mailboxList.size(); i++)
- results.add(mailboxList.get(i));
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/address/Mailbox.java b/apache/org/apache/james/mime4j/field/address/Mailbox.java
deleted file mode 100644
index 25f2548d4..000000000
--- a/apache/org/apache/james/mime4j/field/address/Mailbox.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j.field.address;
-
-import java.util.ArrayList;
-
-/**
- * Represents a single e-mail address.
- *
- *
- */
-public class Mailbox extends Address {
- private DomainList route;
- private String localPart;
- private String domain;
-
- /**
- * Creates a mailbox without a route. Routes are obsolete.
- * @param localPart The part of the e-mail address to the left of the "@".
- * @param domain The part of the e-mail address to the right of the "@".
- */
- public Mailbox(String localPart, String domain) {
- this(null, localPart, domain);
- }
-
- /**
- * Creates a mailbox with a route. Routes are obsolete.
- * @param route The zero or more domains that make up the route. Can be null.
- * @param localPart The part of the e-mail address to the left of the "@".
- * @param domain The part of the e-mail address to the right of the "@".
- */
- public Mailbox(DomainList route, String localPart, String domain) {
- this.route = route;
- this.localPart = localPart;
- this.domain = domain;
- }
-
- /**
- * Returns the route list.
- */
- public DomainList getRoute() {
- return route;
- }
-
- /**
- * Returns the left part of the e-mail address
- * (before "@").
- */
- public String getLocalPart() {
- return localPart;
- }
-
- /**
- * Returns the right part of the e-mail address
- * (after "@").
- */
- public String getDomain() {
- return domain;
- }
-
- /**
- * Formats the address as a string, not including
- * the route.
- *
- * @see #getAddressString(boolean)
- */
- public String getAddressString() {
- return getAddressString(false);
- }
-
- /**
- * Note that this value may not be usable
- * for transport purposes, only display purposes.
- *
- * For example, if the unparsed address was
- *
- * <"Joe Cheng"@joecheng.com>
- *
- * this method would return
- *
- * <Joe Cheng@joecheng.com>
- *
- * which is not valid for transport; the local part
- * would need to be re-quoted.
- *
- * @param includeRoute true if the route should be included if it exists.
- */
- public String getAddressString(boolean includeRoute) {
- return "<" + (!includeRoute || route == null ? "" : route.toRouteString() + ":")
- + localPart
- + (domain == null ? "" : "@")
- + domain + ">";
- }
-
- @Override
- protected final void doAddMailboxesTo(ArrayList<Address> results) {
- results.add(this);
- }
-
- @Override
- public String toString() {
- return getAddressString();
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/address/MailboxList.java b/apache/org/apache/james/mime4j/field/address/MailboxList.java
deleted file mode 100644
index 2c9efb37f..000000000
--- a/apache/org/apache/james/mime4j/field/address/MailboxList.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j.field.address;
-
-import java.util.ArrayList;
-
-/**
- * An immutable, random-access list of Mailbox objects.
- *
- *
- */
-public class MailboxList {
-
- private ArrayList<Address> mailboxes;
-
- /**
- * @param mailboxes An ArrayList that contains only Mailbox objects.
- * @param dontCopy true iff it is not possible for the mailboxes ArrayList to be modified by someone else.
- */
- public MailboxList(ArrayList<Address> mailboxes, boolean dontCopy) {
- if (mailboxes != null)
- this.mailboxes = (dontCopy ? mailboxes : new ArrayList<Address>(mailboxes));
- else
- this.mailboxes = new ArrayList<Address>(0);
- }
-
- /**
- * The number of elements in this list.
- */
- public int size() {
- return mailboxes.size();
- }
-
- /**
- * Gets an address.
- */
- public Mailbox get(int index) {
- if (0 > index || size() <= index)
- throw new IndexOutOfBoundsException();
- return (Mailbox)mailboxes.get(index);
- }
-
- /**
- * Dumps a representation of this mailbox list to
- * stdout, for debugging purposes.
- */
- public void print() {
- for (int i = 0; i < size(); i++) {
- Mailbox mailbox = get(i);
- System.out.println(mailbox.toString());
- }
- }
-
-}
diff --git a/apache/org/apache/james/mime4j/field/address/NamedMailbox.java b/apache/org/apache/james/mime4j/field/address/NamedMailbox.java
deleted file mode 100644
index 4b8306037..000000000
--- a/apache/org/apache/james/mime4j/field/address/NamedMailbox.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j.field.address;
-
-/**
- * A Mailbox that has a name/description.
- *
- *
- */
-public class NamedMailbox extends Mailbox {
- private String name;
-
- /**
- * @see Mailbox#Mailbox(String, String)
- */
- public NamedMailbox(String name, String localPart, String domain) {
- super(localPart, domain);
- this.name = name;
- }
-
- /**
- * @see Mailbox#Mailbox(DomainList, String, String)
- */
- public NamedMailbox(String name, DomainList route, String localPart, String domain) {
- super(route, localPart, domain);
- this.name = name;
- }
-
- /**
- * Creates a named mailbox based on an unnamed mailbox.
- */
- public NamedMailbox(String name, Mailbox baseMailbox) {
- super(baseMailbox.getRoute(), baseMailbox.getLocalPart(), baseMailbox.getDomain());
- this.name = name;
- }
-
- /**
- * Returns the name of the mailbox.
- */
- public String getName() {
- return this.name;
- }
-
- /**
- * Same features (or problems) as Mailbox.getAddressString(boolean),
- * only more so.
- *
- * @see Mailbox#getAddressString(boolean)
- */
- @Override
- public String getAddressString(boolean includeRoute) {
- return (name == null ? "" : name + " ") + super.getAddressString(includeRoute);
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/address/parser/ASTaddr_spec.java b/apache/org/apache/james/mime4j/field/address/parser/ASTaddr_spec.java
deleted file mode 100644
index 4d56d000b..000000000
--- a/apache/org/apache/james/mime4j/field/address/parser/ASTaddr_spec.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Generated By:JJTree: Do not edit this line. ASTaddr_spec.java */
-
-package org.apache.james.mime4j.field.address.parser;
-
-public class ASTaddr_spec extends SimpleNode {
- public ASTaddr_spec(int id) {
- super(id);
- }
-
- public ASTaddr_spec(AddressListParser p, int id) {
- super(p, id);
- }
-
-
- /** Accept the visitor. **/
- public Object jjtAccept(AddressListParserVisitor visitor, Object data) {
- return visitor.visit(this, data);
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/address/parser/ASTaddress.java b/apache/org/apache/james/mime4j/field/address/parser/ASTaddress.java
deleted file mode 100644
index 47bdeda8e..000000000
--- a/apache/org/apache/james/mime4j/field/address/parser/ASTaddress.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Generated By:JJTree: Do not edit this line. ASTaddress.java */
-
-package org.apache.james.mime4j.field.address.parser;
-
-public class ASTaddress extends SimpleNode {
- public ASTaddress(int id) {
- super(id);
- }
-
- public ASTaddress(AddressListParser p, int id) {
- super(p, id);
- }
-
-
- /** Accept the visitor. **/
- public Object jjtAccept(AddressListParserVisitor visitor, Object data) {
- return visitor.visit(this, data);
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/address/parser/ASTaddress_list.java b/apache/org/apache/james/mime4j/field/address/parser/ASTaddress_list.java
deleted file mode 100644
index 737840e38..000000000
--- a/apache/org/apache/james/mime4j/field/address/parser/ASTaddress_list.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Generated By:JJTree: Do not edit this line. ASTaddress_list.java */
-
-package org.apache.james.mime4j.field.address.parser;
-
-public class ASTaddress_list extends SimpleNode {
- public ASTaddress_list(int id) {
- super(id);
- }
-
- public ASTaddress_list(AddressListParser p, int id) {
- super(p, id);
- }
-
-
- /** Accept the visitor. **/
- public Object jjtAccept(AddressListParserVisitor visitor, Object data) {
- return visitor.visit(this, data);
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/address/parser/ASTangle_addr.java b/apache/org/apache/james/mime4j/field/address/parser/ASTangle_addr.java
deleted file mode 100644
index 8cb8f421f..000000000
--- a/apache/org/apache/james/mime4j/field/address/parser/ASTangle_addr.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Generated By:JJTree: Do not edit this line. ASTangle_addr.java */
-
-package org.apache.james.mime4j.field.address.parser;
-
-public class ASTangle_addr extends SimpleNode {
- public ASTangle_addr(int id) {
- super(id);
- }
-
- public ASTangle_addr(AddressListParser p, int id) {
- super(p, id);
- }
-
-
- /** Accept the visitor. **/
- public Object jjtAccept(AddressListParserVisitor visitor, Object data) {
- return visitor.visit(this, data);
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/address/parser/ASTdomain.java b/apache/org/apache/james/mime4j/field/address/parser/ASTdomain.java
deleted file mode 100644
index b52664386..000000000
--- a/apache/org/apache/james/mime4j/field/address/parser/ASTdomain.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Generated By:JJTree: Do not edit this line. ASTdomain.java */
-
-package org.apache.james.mime4j.field.address.parser;
-
-public class ASTdomain extends SimpleNode {
- public ASTdomain(int id) {
- super(id);
- }
-
- public ASTdomain(AddressListParser p, int id) {
- super(p, id);
- }
-
-
- /** Accept the visitor. **/
- public Object jjtAccept(AddressListParserVisitor visitor, Object data) {
- return visitor.visit(this, data);
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/address/parser/ASTgroup_body.java b/apache/org/apache/james/mime4j/field/address/parser/ASTgroup_body.java
deleted file mode 100644
index f6017b9fc..000000000
--- a/apache/org/apache/james/mime4j/field/address/parser/ASTgroup_body.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Generated By:JJTree: Do not edit this line. ASTgroup_body.java */
-
-package org.apache.james.mime4j.field.address.parser;
-
-public class ASTgroup_body extends SimpleNode {
- public ASTgroup_body(int id) {
- super(id);
- }
-
- public ASTgroup_body(AddressListParser p, int id) {
- super(p, id);
- }
-
-
- /** Accept the visitor. **/
- public Object jjtAccept(AddressListParserVisitor visitor, Object data) {
- return visitor.visit(this, data);
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/address/parser/ASTlocal_part.java b/apache/org/apache/james/mime4j/field/address/parser/ASTlocal_part.java
deleted file mode 100644
index 5c244fa3e..000000000
--- a/apache/org/apache/james/mime4j/field/address/parser/ASTlocal_part.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Generated By:JJTree: Do not edit this line. ASTlocal_part.java */
-
-package org.apache.james.mime4j.field.address.parser;
-
-public class ASTlocal_part extends SimpleNode {
- public ASTlocal_part(int id) {
- super(id);
- }
-
- public ASTlocal_part(AddressListParser p, int id) {
- super(p, id);
- }
-
-
- /** Accept the visitor. **/
- public Object jjtAccept(AddressListParserVisitor visitor, Object data) {
- return visitor.visit(this, data);
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/address/parser/ASTmailbox.java b/apache/org/apache/james/mime4j/field/address/parser/ASTmailbox.java
deleted file mode 100644
index aeb469da1..000000000
--- a/apache/org/apache/james/mime4j/field/address/parser/ASTmailbox.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Generated By:JJTree: Do not edit this line. ASTmailbox.java */
-
-package org.apache.james.mime4j.field.address.parser;
-
-public class ASTmailbox extends SimpleNode {
- public ASTmailbox(int id) {
- super(id);
- }
-
- public ASTmailbox(AddressListParser p, int id) {
- super(p, id);
- }
-
-
- /** Accept the visitor. **/
- public Object jjtAccept(AddressListParserVisitor visitor, Object data) {
- return visitor.visit(this, data);
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/address/parser/ASTname_addr.java b/apache/org/apache/james/mime4j/field/address/parser/ASTname_addr.java
deleted file mode 100644
index 846c73167..000000000
--- a/apache/org/apache/james/mime4j/field/address/parser/ASTname_addr.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Generated By:JJTree: Do not edit this line. ASTname_addr.java */
-
-package org.apache.james.mime4j.field.address.parser;
-
-public class ASTname_addr extends SimpleNode {
- public ASTname_addr(int id) {
- super(id);
- }
-
- public ASTname_addr(AddressListParser p, int id) {
- super(p, id);
- }
-
-
- /** Accept the visitor. **/
- public Object jjtAccept(AddressListParserVisitor visitor, Object data) {
- return visitor.visit(this, data);
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/address/parser/ASTphrase.java b/apache/org/apache/james/mime4j/field/address/parser/ASTphrase.java
deleted file mode 100644
index 7d711c529..000000000
--- a/apache/org/apache/james/mime4j/field/address/parser/ASTphrase.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Generated By:JJTree: Do not edit this line. ASTphrase.java */
-
-package org.apache.james.mime4j.field.address.parser;
-
-public class ASTphrase extends SimpleNode {
- public ASTphrase(int id) {
- super(id);
- }
-
- public ASTphrase(AddressListParser p, int id) {
- super(p, id);
- }
-
-
- /** Accept the visitor. **/
- public Object jjtAccept(AddressListParserVisitor visitor, Object data) {
- return visitor.visit(this, data);
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/address/parser/ASTroute.java b/apache/org/apache/james/mime4j/field/address/parser/ASTroute.java
deleted file mode 100644
index 54ea11523..000000000
--- a/apache/org/apache/james/mime4j/field/address/parser/ASTroute.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Generated By:JJTree: Do not edit this line. ASTroute.java */
-
-package org.apache.james.mime4j.field.address.parser;
-
-public class ASTroute extends SimpleNode {
- public ASTroute(int id) {
- super(id);
- }
-
- public ASTroute(AddressListParser p, int id) {
- super(p, id);
- }
-
-
- /** Accept the visitor. **/
- public Object jjtAccept(AddressListParserVisitor visitor, Object data) {
- return visitor.visit(this, data);
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/address/parser/AddressListParser.java b/apache/org/apache/james/mime4j/field/address/parser/AddressListParser.java
deleted file mode 100644
index 8094df0ad..000000000
--- a/apache/org/apache/james/mime4j/field/address/parser/AddressListParser.java
+++ /dev/null
@@ -1,977 +0,0 @@
-/* Generated By:JJTree&JavaCC: Do not edit this line. AddressListParser.java */
-/*
- * Copyright 2004 the mime4j project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.james.mime4j.field.address.parser;
-
-public class AddressListParser/*@bgen(jjtree)*/implements AddressListParserTreeConstants, AddressListParserConstants {/*@bgen(jjtree)*/
- protected JJTAddressListParserState jjtree = new JJTAddressListParserState();public static void main(String args[]) throws ParseException {
- while (true) {
- try {
- AddressListParser parser = new AddressListParser(System.in);
- parser.parseLine();
- ((SimpleNode)parser.jjtree.rootNode()).dump("> ");
- } catch (Exception x) {
- x.printStackTrace();
- return;
- }
- }
- }
-
- private static void log(String msg) {
- System.out.print(msg);
- }
-
- public ASTaddress_list parse() throws ParseException {
- try {
- parseAll();
- return (ASTaddress_list)jjtree.rootNode();
- } catch (TokenMgrError tme) {
- throw new ParseException(tme.getMessage());
- }
- }
-
-
- void jjtreeOpenNodeScope(Node n) {
- ((SimpleNode)n).firstToken = getToken(1);
- }
-
- void jjtreeCloseNodeScope(Node n) {
- ((SimpleNode)n).lastToken = getToken(0);
- }
-
- final public void parseLine() throws ParseException {
- address_list();
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 1:
- jj_consume_token(1);
- break;
- default:
- jj_la1[0] = jj_gen;
- ;
- }
- jj_consume_token(2);
- }
-
- final public void parseAll() throws ParseException {
- address_list();
- jj_consume_token(0);
- }
-
- final public void address_list() throws ParseException {
- /*@bgen(jjtree) address_list */
- ASTaddress_list jjtn000 = new ASTaddress_list(JJTADDRESS_LIST);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
- try {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 6:
- case DOTATOM:
- case QUOTEDSTRING:
- address();
- break;
- default:
- jj_la1[1] = jj_gen;
- ;
- }
- label_1:
- while (true) {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 3:
- ;
- break;
- default:
- jj_la1[2] = jj_gen;
- break label_1;
- }
- jj_consume_token(3);
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 6:
- case DOTATOM:
- case QUOTEDSTRING:
- address();
- break;
- default:
- jj_la1[3] = jj_gen;
- ;
- }
- }
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- {if (true) throw (RuntimeException)jjte000;}
- }
- if (jjte000 instanceof ParseException) {
- {if (true) throw (ParseException)jjte000;}
- }
- {if (true) throw (Error)jjte000;}
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
- }
-
- final public void address() throws ParseException {
- /*@bgen(jjtree) address */
- ASTaddress jjtn000 = new ASTaddress(JJTADDRESS);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
- try {
- if (jj_2_1(2147483647)) {
- addr_spec();
- } else {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 6:
- angle_addr();
- break;
- case DOTATOM:
- case QUOTEDSTRING:
- phrase();
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 4:
- group_body();
- break;
- case 6:
- angle_addr();
- break;
- default:
- jj_la1[4] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
- break;
- default:
- jj_la1[5] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
- }
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- {if (true) throw (RuntimeException)jjte000;}
- }
- if (jjte000 instanceof ParseException) {
- {if (true) throw (ParseException)jjte000;}
- }
- {if (true) throw (Error)jjte000;}
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
- }
-
- final public void mailbox() throws ParseException {
- /*@bgen(jjtree) mailbox */
- ASTmailbox jjtn000 = new ASTmailbox(JJTMAILBOX);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
- try {
- if (jj_2_2(2147483647)) {
- addr_spec();
- } else {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 6:
- angle_addr();
- break;
- case DOTATOM:
- case QUOTEDSTRING:
- name_addr();
- break;
- default:
- jj_la1[6] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
- }
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- {if (true) throw (RuntimeException)jjte000;}
- }
- if (jjte000 instanceof ParseException) {
- {if (true) throw (ParseException)jjte000;}
- }
- {if (true) throw (Error)jjte000;}
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
- }
-
- final public void name_addr() throws ParseException {
- /*@bgen(jjtree) name_addr */
- ASTname_addr jjtn000 = new ASTname_addr(JJTNAME_ADDR);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
- try {
- phrase();
- angle_addr();
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- {if (true) throw (RuntimeException)jjte000;}
- }
- if (jjte000 instanceof ParseException) {
- {if (true) throw (ParseException)jjte000;}
- }
- {if (true) throw (Error)jjte000;}
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
- }
-
- final public void group_body() throws ParseException {
- /*@bgen(jjtree) group_body */
- ASTgroup_body jjtn000 = new ASTgroup_body(JJTGROUP_BODY);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
- try {
- jj_consume_token(4);
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 6:
- case DOTATOM:
- case QUOTEDSTRING:
- mailbox();
- break;
- default:
- jj_la1[7] = jj_gen;
- ;
- }
- label_2:
- while (true) {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 3:
- ;
- break;
- default:
- jj_la1[8] = jj_gen;
- break label_2;
- }
- jj_consume_token(3);
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 6:
- case DOTATOM:
- case QUOTEDSTRING:
- mailbox();
- break;
- default:
- jj_la1[9] = jj_gen;
- ;
- }
- }
- jj_consume_token(5);
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- {if (true) throw (RuntimeException)jjte000;}
- }
- if (jjte000 instanceof ParseException) {
- {if (true) throw (ParseException)jjte000;}
- }
- {if (true) throw (Error)jjte000;}
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
- }
-
- final public void angle_addr() throws ParseException {
- /*@bgen(jjtree) angle_addr */
- ASTangle_addr jjtn000 = new ASTangle_addr(JJTANGLE_ADDR);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
- try {
- jj_consume_token(6);
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 8:
- route();
- break;
- default:
- jj_la1[10] = jj_gen;
- ;
- }
- addr_spec();
- jj_consume_token(7);
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- {if (true) throw (RuntimeException)jjte000;}
- }
- if (jjte000 instanceof ParseException) {
- {if (true) throw (ParseException)jjte000;}
- }
- {if (true) throw (Error)jjte000;}
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
- }
-
- final public void route() throws ParseException {
- /*@bgen(jjtree) route */
- ASTroute jjtn000 = new ASTroute(JJTROUTE);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
- try {
- jj_consume_token(8);
- domain();
- label_3:
- while (true) {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 3:
- case 8:
- ;
- break;
- default:
- jj_la1[11] = jj_gen;
- break label_3;
- }
- label_4:
- while (true) {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 3:
- ;
- break;
- default:
- jj_la1[12] = jj_gen;
- break label_4;
- }
- jj_consume_token(3);
- }
- jj_consume_token(8);
- domain();
- }
- jj_consume_token(4);
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- {if (true) throw (RuntimeException)jjte000;}
- }
- if (jjte000 instanceof ParseException) {
- {if (true) throw (ParseException)jjte000;}
- }
- {if (true) throw (Error)jjte000;}
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
- }
-
- final public void phrase() throws ParseException {
- /*@bgen(jjtree) phrase */
- ASTphrase jjtn000 = new ASTphrase(JJTPHRASE);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
- try {
- label_5:
- while (true) {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case DOTATOM:
- jj_consume_token(DOTATOM);
- break;
- case QUOTEDSTRING:
- jj_consume_token(QUOTEDSTRING);
- break;
- default:
- jj_la1[13] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case DOTATOM:
- case QUOTEDSTRING:
- ;
- break;
- default:
- jj_la1[14] = jj_gen;
- break label_5;
- }
- }
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
- }
-
- final public void addr_spec() throws ParseException {
- /*@bgen(jjtree) addr_spec */
- ASTaddr_spec jjtn000 = new ASTaddr_spec(JJTADDR_SPEC);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
- try {
- local_part();
- jj_consume_token(8);
- domain();
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- {if (true) throw (RuntimeException)jjte000;}
- }
- if (jjte000 instanceof ParseException) {
- {if (true) throw (ParseException)jjte000;}
- }
- {if (true) throw (Error)jjte000;}
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
- }
-
- final public void local_part() throws ParseException {
- /*@bgen(jjtree) local_part */
- ASTlocal_part jjtn000 = new ASTlocal_part(JJTLOCAL_PART);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);Token t;
- try {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case DOTATOM:
- t = jj_consume_token(DOTATOM);
- break;
- case QUOTEDSTRING:
- t = jj_consume_token(QUOTEDSTRING);
- break;
- default:
- jj_la1[15] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
- label_6:
- while (true) {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 9:
- case DOTATOM:
- case QUOTEDSTRING:
- ;
- break;
- default:
- jj_la1[16] = jj_gen;
- break label_6;
- }
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 9:
- t = jj_consume_token(9);
- break;
- default:
- jj_la1[17] = jj_gen;
- ;
- }
- if (t.image.charAt(t.image.length() - 1) != '.' || t.kind == AddressListParserConstants.QUOTEDSTRING)
- {if (true) throw new ParseException("Words in local part must be separated by '.'");}
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case DOTATOM:
- t = jj_consume_token(DOTATOM);
- break;
- case QUOTEDSTRING:
- t = jj_consume_token(QUOTEDSTRING);
- break;
- default:
- jj_la1[18] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
- }
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
- }
-
- final public void domain() throws ParseException {
- /*@bgen(jjtree) domain */
- ASTdomain jjtn000 = new ASTdomain(JJTDOMAIN);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);Token t;
- try {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case DOTATOM:
- t = jj_consume_token(DOTATOM);
- label_7:
- while (true) {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 9:
- case DOTATOM:
- ;
- break;
- default:
- jj_la1[19] = jj_gen;
- break label_7;
- }
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 9:
- t = jj_consume_token(9);
- break;
- default:
- jj_la1[20] = jj_gen;
- ;
- }
- if (t.image.charAt(t.image.length() - 1) != '.')
- {if (true) throw new ParseException("Atoms in domain names must be separated by '.'");}
- t = jj_consume_token(DOTATOM);
- }
- break;
- case DOMAINLITERAL:
- jj_consume_token(DOMAINLITERAL);
- break;
- default:
- jj_la1[21] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
- }
-
- final private boolean jj_2_1(int xla) {
- jj_la = xla; jj_lastpos = jj_scanpos = token;
- try { return !jj_3_1(); }
- catch(LookaheadSuccess ls) { return true; }
- finally { jj_save(0, xla); }
- }
-
- final private boolean jj_2_2(int xla) {
- jj_la = xla; jj_lastpos = jj_scanpos = token;
- try { return !jj_3_2(); }
- catch(LookaheadSuccess ls) { return true; }
- finally { jj_save(1, xla); }
- }
-
- final private boolean jj_3R_11() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_scan_token(9)) jj_scanpos = xsp;
- xsp = jj_scanpos;
- if (jj_scan_token(14)) {
- jj_scanpos = xsp;
- if (jj_scan_token(31)) return true;
- }
- return false;
- }
-
- final private boolean jj_3R_13() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_scan_token(9)) jj_scanpos = xsp;
- if (jj_scan_token(DOTATOM)) return true;
- return false;
- }
-
- final private boolean jj_3R_8() {
- if (jj_3R_9()) return true;
- if (jj_scan_token(8)) return true;
- if (jj_3R_10()) return true;
- return false;
- }
-
- final private boolean jj_3_1() {
- if (jj_3R_8()) return true;
- return false;
- }
-
- final private boolean jj_3R_12() {
- if (jj_scan_token(DOTATOM)) return true;
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_13()) { jj_scanpos = xsp; break; }
- }
- return false;
- }
-
- final private boolean jj_3R_10() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_12()) {
- jj_scanpos = xsp;
- if (jj_scan_token(18)) return true;
- }
- return false;
- }
-
- final private boolean jj_3_2() {
- if (jj_3R_8()) return true;
- return false;
- }
-
- final private boolean jj_3R_9() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_scan_token(14)) {
- jj_scanpos = xsp;
- if (jj_scan_token(31)) return true;
- }
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_11()) { jj_scanpos = xsp; break; }
- }
- return false;
- }
-
- public AddressListParserTokenManager token_source;
- SimpleCharStream jj_input_stream;
- public Token token, jj_nt;
- private int jj_ntk;
- private Token jj_scanpos, jj_lastpos;
- private int jj_la;
- public boolean lookingAhead = false;
- private boolean jj_semLA;
- private int jj_gen;
- final private int[] jj_la1 = new int[22];
- static private int[] jj_la1_0;
- static private int[] jj_la1_1;
- static {
- jj_la1_0();
- jj_la1_1();
- }
- private static void jj_la1_0() {
- jj_la1_0 = new int[] {0x2,0x80004040,0x8,0x80004040,0x50,0x80004040,0x80004040,0x80004040,0x8,0x80004040,0x100,0x108,0x8,0x80004000,0x80004000,0x80004000,0x80004200,0x200,0x80004000,0x4200,0x200,0x44000,};
- }
- private static void jj_la1_1() {
- jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
- }
- final private JJCalls[] jj_2_rtns = new JJCalls[2];
- private boolean jj_rescan = false;
- private int jj_gc = 0;
-
- public AddressListParser(java.io.InputStream stream) {
- this(stream, null);
- }
- public AddressListParser(java.io.InputStream stream, String encoding) {
- try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
- token_source = new AddressListParserTokenManager(jj_input_stream);
- token = new Token();
- jj_ntk = -1;
- jj_gen = 0;
- for (int i = 0; i < 22; i++) jj_la1[i] = -1;
- for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
- }
-
- public void ReInit(java.io.InputStream stream) {
- ReInit(stream, null);
- }
- public void ReInit(java.io.InputStream stream, String encoding) {
- try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
- token_source.ReInit(jj_input_stream);
- token = new Token();
- jj_ntk = -1;
- jjtree.reset();
- jj_gen = 0;
- for (int i = 0; i < 22; i++) jj_la1[i] = -1;
- for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
- }
-
- public AddressListParser(java.io.Reader stream) {
- jj_input_stream = new SimpleCharStream(stream, 1, 1);
- token_source = new AddressListParserTokenManager(jj_input_stream);
- token = new Token();
- jj_ntk = -1;
- jj_gen = 0;
- for (int i = 0; i < 22; i++) jj_la1[i] = -1;
- for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
- }
-
- public void ReInit(java.io.Reader stream) {
- jj_input_stream.ReInit(stream, 1, 1);
- token_source.ReInit(jj_input_stream);
- token = new Token();
- jj_ntk = -1;
- jjtree.reset();
- jj_gen = 0;
- for (int i = 0; i < 22; i++) jj_la1[i] = -1;
- for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
- }
-
- public AddressListParser(AddressListParserTokenManager tm) {
- token_source = tm;
- token = new Token();
- jj_ntk = -1;
- jj_gen = 0;
- for (int i = 0; i < 22; i++) jj_la1[i] = -1;
- for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
- }
-
- public void ReInit(AddressListParserTokenManager tm) {
- token_source = tm;
- token = new Token();
- jj_ntk = -1;
- jjtree.reset();
- jj_gen = 0;
- for (int i = 0; i < 22; i++) jj_la1[i] = -1;
- for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
- }
-
- final private Token jj_consume_token(int kind) throws ParseException {
- Token oldToken;
- if ((oldToken = token).next != null) token = token.next;
- else token = token.next = token_source.getNextToken();
- jj_ntk = -1;
- if (token.kind == kind) {
- jj_gen++;
- if (++jj_gc > 100) {
- jj_gc = 0;
- for (int i = 0; i < jj_2_rtns.length; i++) {
- JJCalls c = jj_2_rtns[i];
- while (c != null) {
- if (c.gen < jj_gen) c.first = null;
- c = c.next;
- }
- }
- }
- return token;
- }
- token = oldToken;
- jj_kind = kind;
- throw generateParseException();
- }
-
- static private final class LookaheadSuccess extends java.lang.Error { }
- final private LookaheadSuccess jj_ls = new LookaheadSuccess();
- final private boolean jj_scan_token(int kind) {
- if (jj_scanpos == jj_lastpos) {
- jj_la--;
- if (jj_scanpos.next == null) {
- jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
- } else {
- jj_lastpos = jj_scanpos = jj_scanpos.next;
- }
- } else {
- jj_scanpos = jj_scanpos.next;
- }
- if (jj_rescan) {
- int i = 0; Token tok = token;
- while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
- if (tok != null) jj_add_error_token(kind, i);
- }
- if (jj_scanpos.kind != kind) return true;
- if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;
- return false;
- }
-
- final public Token getNextToken() {
- if (token.next != null) token = token.next;
- else token = token.next = token_source.getNextToken();
- jj_ntk = -1;
- jj_gen++;
- return token;
- }
-
- final public Token getToken(int index) {
- Token t = lookingAhead ? jj_scanpos : token;
- for (int i = 0; i < index; i++) {
- if (t.next != null) t = t.next;
- else t = t.next = token_source.getNextToken();
- }
- return t;
- }
-
- final private int jj_ntk() {
- if ((jj_nt=token.next) == null)
- return (jj_ntk = (token.next=token_source.getNextToken()).kind);
- else
- return (jj_ntk = jj_nt.kind);
- }
-
- private java.util.Vector<int[]> jj_expentries = new java.util.Vector<int[]>();
- private int[] jj_expentry;
- private int jj_kind = -1;
- private int[] jj_lasttokens = new int[100];
- private int jj_endpos;
-
- private void jj_add_error_token(int kind, int pos) {
- if (pos >= 100) return;
- if (pos == jj_endpos + 1) {
- jj_lasttokens[jj_endpos++] = kind;
- } else if (jj_endpos != 0) {
- jj_expentry = new int[jj_endpos];
- for (int i = 0; i < jj_endpos; i++) {
- jj_expentry[i] = jj_lasttokens[i];
- }
- boolean exists = false;
- for (java.util.Enumeration<int[]> e = jj_expentries.elements(); e.hasMoreElements();) {
- int[] oldentry = e.nextElement();
- if (oldentry.length == jj_expentry.length) {
- exists = true;
- for (int i = 0; i < jj_expentry.length; i++) {
- if (oldentry[i] != jj_expentry[i]) {
- exists = false;
- break;
- }
- }
- if (exists) break;
- }
- }
- if (!exists) jj_expentries.addElement(jj_expentry);
- if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
- }
- }
-
- public ParseException generateParseException() {
- jj_expentries.removeAllElements();
- boolean[] la1tokens = new boolean[34];
- for (int i = 0; i < 34; i++) {
- la1tokens[i] = false;
- }
- if (jj_kind >= 0) {
- la1tokens[jj_kind] = true;
- jj_kind = -1;
- }
- for (int i = 0; i < 22; i++) {
- if (jj_la1[i] == jj_gen) {
- for (int j = 0; j < 32; j++) {
- if ((jj_la1_0[i] & (1<<j)) != 0) {
- la1tokens[j] = true;
- }
- if ((jj_la1_1[i] & (1<<j)) != 0) {
- la1tokens[32+j] = true;
- }
- }
- }
- }
- for (int i = 0; i < 34; i++) {
- if (la1tokens[i]) {
- jj_expentry = new int[1];
- jj_expentry[0] = i;
- jj_expentries.addElement(jj_expentry);
- }
- }
- jj_endpos = 0;
- jj_rescan_token();
- jj_add_error_token(0, 0);
- int[][] exptokseq = new int[jj_expentries.size()][];
- for (int i = 0; i < jj_expentries.size(); i++) {
- exptokseq[i] = jj_expentries.elementAt(i);
- }
- return new ParseException(token, exptokseq, tokenImage);
- }
-
- final public void enable_tracing() {
- }
-
- final public void disable_tracing() {
- }
-
- final private void jj_rescan_token() {
- jj_rescan = true;
- for (int i = 0; i < 2; i++) {
- try {
- JJCalls p = jj_2_rtns[i];
- do {
- if (p.gen > jj_gen) {
- jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
- switch (i) {
- case 0: jj_3_1(); break;
- case 1: jj_3_2(); break;
- }
- }
- p = p.next;
- } while (p != null);
- } catch(LookaheadSuccess ls) { }
- }
- jj_rescan = false;
- }
-
- final private void jj_save(int index, int xla) {
- JJCalls p = jj_2_rtns[index];
- while (p.gen > jj_gen) {
- if (p.next == null) { p = p.next = new JJCalls(); break; }
- p = p.next;
- }
- p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
- }
-
- static final class JJCalls {
- int gen;
- Token first;
- int arg;
- JJCalls next;
- }
-
-}
diff --git a/apache/org/apache/james/mime4j/field/address/parser/AddressListParser.jj b/apache/org/apache/james/mime4j/field/address/parser/AddressListParser.jj
deleted file mode 100644
index c14277bc6..000000000
--- a/apache/org/apache/james/mime4j/field/address/parser/AddressListParser.jj
+++ /dev/null
@@ -1,595 +0,0 @@
-/*@bgen(jjtree) Generated By:JJTree: Do not edit this line. /Users/jason/Projects/apache-mime4j-0.3/target/generated-sources/jjtree/org/apache/james/mime4j/field/address/parser/AddressListParser.jj */
-/*@egen*//****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-
-/**
- * RFC2822 address list parser.
- *
- * Created 9/17/2004
- * by Joe Cheng <code@joecheng.com>
- */
-
-options {
- STATIC=false;
- LOOKAHEAD=1;
- //DEBUG_PARSER=true;
- //DEBUG_TOKEN_MANAGER=true;
-}
-
-PARSER_BEGIN(AddressListParser)
-/*
- * Copyright 2004 the mime4j project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.james.mime4j.field.address.parser;
-
-public class AddressListParser/*@bgen(jjtree)*/implements AddressListParserTreeConstants/*@egen*/ {/*@bgen(jjtree)*/
- protected JJTAddressListParserState jjtree = new JJTAddressListParserState();
-
-/*@egen*/
- public static void main(String args[]) throws ParseException {
- while (true) {
- try {
- AddressListParser parser = new AddressListParser(System.in);
- parser.parseLine();
- ((SimpleNode)parser.jjtree.rootNode()).dump("> ");
- } catch (Exception x) {
- x.printStackTrace();
- return;
- }
- }
- }
-
- private static void log(String msg) {
- System.out.print(msg);
- }
-
- public ASTaddress_list parse() throws ParseException {
- try {
- parseAll();
- return (ASTaddress_list)jjtree.rootNode();
- } catch (TokenMgrError tme) {
- throw new ParseException(tme.getMessage());
- }
- }
-
-
- void jjtreeOpenNodeScope(Node n) {
- ((SimpleNode)n).firstToken = getToken(1);
- }
-
- void jjtreeCloseNodeScope(Node n) {
- ((SimpleNode)n).lastToken = getToken(0);
- }
-}
-
-PARSER_END(AddressListParser)
-
-void parseLine() :
-{}
-{
- address_list() ["\r"] "\n"
-}
-
-void parseAll() :
-{}
-{
- address_list() <EOF>
-}
-
-void address_list() :
-{/*@bgen(jjtree) address_list */
- ASTaddress_list jjtn000 = new ASTaddress_list(JJTADDRESS_LIST);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
-/*@egen*/}
-{/*@bgen(jjtree) address_list */
- try {
-/*@egen*/
- [ address() ]
- (
- ","
- [ address() ]
- )*/*@bgen(jjtree)*/
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- throw (RuntimeException)jjte000;
- }
- if (jjte000 instanceof ParseException) {
- throw (ParseException)jjte000;
- }
- throw (Error)jjte000;
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
-/*@egen*/
-}
-
-void address() :
-{/*@bgen(jjtree) address */
- ASTaddress jjtn000 = new ASTaddress(JJTADDRESS);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
-/*@egen*/}
-{/*@bgen(jjtree) address */
- try {
-/*@egen*/
- LOOKAHEAD(2147483647)
- addr_spec()
-| angle_addr()
-| ( phrase() (group_body() | angle_addr()) )/*@bgen(jjtree)*/
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- throw (RuntimeException)jjte000;
- }
- if (jjte000 instanceof ParseException) {
- throw (ParseException)jjte000;
- }
- throw (Error)jjte000;
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
-/*@egen*/
-}
-
-void mailbox() :
-{/*@bgen(jjtree) mailbox */
- ASTmailbox jjtn000 = new ASTmailbox(JJTMAILBOX);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
-/*@egen*/}
-{/*@bgen(jjtree) mailbox */
- try {
-/*@egen*/
- LOOKAHEAD(2147483647)
- addr_spec()
-| angle_addr()
-| name_addr()/*@bgen(jjtree)*/
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- throw (RuntimeException)jjte000;
- }
- if (jjte000 instanceof ParseException) {
- throw (ParseException)jjte000;
- }
- throw (Error)jjte000;
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
-/*@egen*/
-}
-
-void name_addr() :
-{/*@bgen(jjtree) name_addr */
- ASTname_addr jjtn000 = new ASTname_addr(JJTNAME_ADDR);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
-/*@egen*/}
-{/*@bgen(jjtree) name_addr */
- try {
-/*@egen*/
- phrase() angle_addr()/*@bgen(jjtree)*/
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- throw (RuntimeException)jjte000;
- }
- if (jjte000 instanceof ParseException) {
- throw (ParseException)jjte000;
- }
- throw (Error)jjte000;
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
-/*@egen*/
-}
-
-void group_body() :
-{/*@bgen(jjtree) group_body */
- ASTgroup_body jjtn000 = new ASTgroup_body(JJTGROUP_BODY);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
-/*@egen*/}
-{/*@bgen(jjtree) group_body */
- try {
-/*@egen*/
- ":"
- [ mailbox() ]
- (
- ","
- [ mailbox() ]
- )*
- ";"/*@bgen(jjtree)*/
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- throw (RuntimeException)jjte000;
- }
- if (jjte000 instanceof ParseException) {
- throw (ParseException)jjte000;
- }
- throw (Error)jjte000;
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
-/*@egen*/
-}
-
-void angle_addr() :
-{/*@bgen(jjtree) angle_addr */
- ASTangle_addr jjtn000 = new ASTangle_addr(JJTANGLE_ADDR);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
-/*@egen*/}
-{/*@bgen(jjtree) angle_addr */
- try {
-/*@egen*/
- "<" [ route() ] addr_spec() ">"/*@bgen(jjtree)*/
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- throw (RuntimeException)jjte000;
- }
- if (jjte000 instanceof ParseException) {
- throw (ParseException)jjte000;
- }
- throw (Error)jjte000;
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
-/*@egen*/
-}
-
-void route() :
-{/*@bgen(jjtree) route */
- ASTroute jjtn000 = new ASTroute(JJTROUTE);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
-/*@egen*/}
-{/*@bgen(jjtree) route */
- try {
-/*@egen*/
- "@" domain() ( (",")* "@" domain() )* ":"/*@bgen(jjtree)*/
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- throw (RuntimeException)jjte000;
- }
- if (jjte000 instanceof ParseException) {
- throw (ParseException)jjte000;
- }
- throw (Error)jjte000;
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
-/*@egen*/
-}
-
-void phrase() :
-{/*@bgen(jjtree) phrase */
- ASTphrase jjtn000 = new ASTphrase(JJTPHRASE);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
-/*@egen*/}
-{/*@bgen(jjtree) phrase */
-try {
-/*@egen*/
-( <DOTATOM>
-| <QUOTEDSTRING>
-)+/*@bgen(jjtree)*/
-} finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
-}
-/*@egen*/
-}
-
-void addr_spec() :
-{/*@bgen(jjtree) addr_spec */
- ASTaddr_spec jjtn000 = new ASTaddr_spec(JJTADDR_SPEC);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
-/*@egen*/}
-{/*@bgen(jjtree) addr_spec */
- try {
-/*@egen*/
- ( local_part() "@" domain() )/*@bgen(jjtree)*/
- } catch (Throwable jjte000) {
- if (jjtc000) {
- jjtree.clearNodeScope(jjtn000);
- jjtc000 = false;
- } else {
- jjtree.popNode();
- }
- if (jjte000 instanceof RuntimeException) {
- throw (RuntimeException)jjte000;
- }
- if (jjte000 instanceof ParseException) {
- throw (ParseException)jjte000;
- }
- throw (Error)jjte000;
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
-/*@egen*/
-}
-
-void local_part() :
-{/*@bgen(jjtree) local_part */
- ASTlocal_part jjtn000 = new ASTlocal_part(JJTLOCAL_PART);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
-/*@egen*/ Token t; }
-{/*@bgen(jjtree) local_part */
- try {
-/*@egen*/
- ( t=<DOTATOM> | t=<QUOTEDSTRING> )
- ( [t="."]
- {
- if (t.image.charAt(t.image.length() - 1) != '.' || t.kind == AddressListParserConstants.QUOTEDSTRING)
- throw new ParseException("Words in local part must be separated by '.'");
- }
- ( t=<DOTATOM> | t=<QUOTEDSTRING> )
- )*/*@bgen(jjtree)*/
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
-/*@egen*/
-}
-
-void domain() :
-{/*@bgen(jjtree) domain */
- ASTdomain jjtn000 = new ASTdomain(JJTDOMAIN);
- boolean jjtc000 = true;
- jjtree.openNodeScope(jjtn000);
- jjtreeOpenNodeScope(jjtn000);
-/*@egen*/ Token t; }
-{/*@bgen(jjtree) domain */
- try {
-/*@egen*/
- ( t=<DOTATOM>
- ( [t="."]
- {
- if (t.image.charAt(t.image.length() - 1) != '.')
- throw new ParseException("Atoms in domain names must be separated by '.'");
- }
- t=<DOTATOM>
- )*
- )
-| <DOMAINLITERAL>/*@bgen(jjtree)*/
- } finally {
- if (jjtc000) {
- jjtree.closeNodeScope(jjtn000, true);
- jjtreeCloseNodeScope(jjtn000);
- }
- }
-/*@egen*/
-}
-
-SPECIAL_TOKEN :
-{
- < WS: ( [" ", "\t"] )+ >
-}
-
-TOKEN :
-{
- < #ALPHA: ["a" - "z", "A" - "Z"] >
-| < #DIGIT: ["0" - "9"] >
-| < #ATEXT: ( <ALPHA> | <DIGIT>
- | "!" | "#" | "$" | "%"
- | "&" | "'" | "*" | "+"
- | "-" | "/" | "=" | "?"
- | "^" | "_" | "`" | "{"
- | "|" | "}" | "~"
- )>
-| < DOTATOM: <ATEXT> ( <ATEXT> | "." )* >
-}
-
-TOKEN_MGR_DECLS :
-{
- // Keeps track of how many levels of comment nesting
- // we've encountered. This is only used when the 2nd
- // level is reached, for example ((this)), not (this).
- // This is because the outermost level must be treated
- // specially anyway, because the outermost ")" has a
- // different token type than inner ")" instances.
- static int commentNest;
-}
-
-MORE :
-{
- // domain literal
- "[" : INDOMAINLITERAL
-}
-
-<INDOMAINLITERAL>
-MORE :
-{
- < <QUOTEDPAIR>> { image.deleteCharAt(image.length() - 2); }
-| < ~["[", "]", "\\"] >
-}
-
-<INDOMAINLITERAL>
-TOKEN :
-{
- < DOMAINLITERAL: "]" > { matchedToken.image = image.toString(); }: DEFAULT
-}
-
-MORE :
-{
- // starts a comment
- "(" : INCOMMENT
-}
-
-<INCOMMENT>
-SKIP :
-{
- // ends a comment
- < COMMENT: ")" > : DEFAULT
- // if this is ever changed to not be a SKIP, need
- // to make sure matchedToken.token = token.toString()
- // is called.
-}
-
-<INCOMMENT>
-MORE :
-{
- < <QUOTEDPAIR>> { image.deleteCharAt(image.length() - 2); }
-| "(" { commentNest = 1; } : NESTED_COMMENT
-| < <ANY>>
-}
-
-<NESTED_COMMENT>
-MORE :
-{
- < <QUOTEDPAIR>> { image.deleteCharAt(image.length() - 2); }
-| "(" { ++commentNest; }
-| ")" { --commentNest; if (commentNest == 0) SwitchTo(INCOMMENT); }
-| < <ANY>>
-}
-
-
-// QUOTED STRINGS
-
-MORE :
-{
- "\"" { image.deleteCharAt(image.length() - 1); } : INQUOTEDSTRING
-}
-
-<INQUOTEDSTRING>
-MORE :
-{
- < <QUOTEDPAIR>> { image.deleteCharAt(image.length() - 2); }
-| < (~["\"", "\\"])+ >
-}
-
-<INQUOTEDSTRING>
-TOKEN :
-{
- < QUOTEDSTRING: "\"" > { matchedToken.image = image.substring(0, image.length() - 1); } : DEFAULT
-}
-
-// GLOBALS
-
-<*>
-TOKEN :
-{
- < #QUOTEDPAIR: "\\" <ANY> >
-| < #ANY: ~[] >
-}
-
-// ERROR!
-/*
-
-<*>
-TOKEN :
-{
- < UNEXPECTED_CHAR: <ANY> >
-}
-
-*/ \ No newline at end of file
diff --git a/apache/org/apache/james/mime4j/field/address/parser/AddressListParserConstants.java b/apache/org/apache/james/mime4j/field/address/parser/AddressListParserConstants.java
deleted file mode 100644
index 006a082c1..000000000
--- a/apache/org/apache/james/mime4j/field/address/parser/AddressListParserConstants.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/* Generated By:JJTree&JavaCC: Do not edit this line. AddressListParserConstants.java */
-/*
- * Copyright 2004 the mime4j project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.james.mime4j.field.address.parser;
-
-public interface AddressListParserConstants {
-
- int EOF = 0;
- int WS = 10;
- int ALPHA = 11;
- int DIGIT = 12;
- int ATEXT = 13;
- int DOTATOM = 14;
- int DOMAINLITERAL = 18;
- int COMMENT = 20;
- int QUOTEDSTRING = 31;
- int QUOTEDPAIR = 32;
- int ANY = 33;
-
- int DEFAULT = 0;
- int INDOMAINLITERAL = 1;
- int INCOMMENT = 2;
- int NESTED_COMMENT = 3;
- int INQUOTEDSTRING = 4;
-
- String[] tokenImage = {
- "<EOF>",
- "\"\\r\"",
- "\"\\n\"",
- "\",\"",
- "\":\"",
- "\";\"",
- "\"<\"",
- "\">\"",
- "\"@\"",
- "\".\"",
- "<WS>",
- "<ALPHA>",
- "<DIGIT>",
- "<ATEXT>",
- "<DOTATOM>",
- "\"[\"",
- "<token of kind 16>",
- "<token of kind 17>",
- "\"]\"",
- "\"(\"",
- "\")\"",
- "<token of kind 21>",
- "\"(\"",
- "<token of kind 23>",
- "<token of kind 24>",
- "\"(\"",
- "\")\"",
- "<token of kind 27>",
- "\"\\\"\"",
- "<token of kind 29>",
- "<token of kind 30>",
- "\"\\\"\"",
- "<QUOTEDPAIR>",
- "<ANY>",
- };
-
-}
diff --git a/apache/org/apache/james/mime4j/field/address/parser/AddressListParserTokenManager.java b/apache/org/apache/james/mime4j/field/address/parser/AddressListParserTokenManager.java
deleted file mode 100644
index d2dd88dd3..000000000
--- a/apache/org/apache/james/mime4j/field/address/parser/AddressListParserTokenManager.java
+++ /dev/null
@@ -1,1009 +0,0 @@
-/* Generated By:JJTree&JavaCC: Do not edit this line. AddressListParserTokenManager.java */
-/*
- * Copyright 2004 the mime4j project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.james.mime4j.field.address.parser;
-
-public class AddressListParserTokenManager implements AddressListParserConstants
-{
- // Keeps track of how many levels of comment nesting
- // we've encountered. This is only used when the 2nd
- // level is reached, for example ((this)), not (this).
- // This is because the outermost level must be treated
- // specially anyway, because the outermost ")" has a
- // different token type than inner ")" instances.
- static int commentNest;
- public java.io.PrintStream debugStream = System.out;
- public void setDebugStream(java.io.PrintStream ds) { debugStream = ds; }
-private final int jjStopStringLiteralDfa_0(int pos, long active0)
-{
- switch (pos)
- {
- default :
- return -1;
- }
-}
-private final int jjStartNfa_0(int pos, long active0)
-{
- return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0), pos + 1);
-}
-private final int jjStopAtPos(int pos, int kind)
-{
- jjmatchedKind = kind;
- jjmatchedPos = pos;
- return pos + 1;
-}
-private final int jjStartNfaWithStates_0(int pos, int kind, int state)
-{
- jjmatchedKind = kind;
- jjmatchedPos = pos;
- try { curChar = input_stream.readChar(); }
- catch(java.io.IOException e) { return pos + 1; }
- return jjMoveNfa_0(state, pos + 1);
-}
-private final int jjMoveStringLiteralDfa0_0()
-{
- switch(curChar)
- {
- case 10:
- return jjStopAtPos(0, 2);
- case 13:
- return jjStopAtPos(0, 1);
- case 34:
- return jjStopAtPos(0, 28);
- case 40:
- return jjStopAtPos(0, 19);
- case 44:
- return jjStopAtPos(0, 3);
- case 46:
- return jjStopAtPos(0, 9);
- case 58:
- return jjStopAtPos(0, 4);
- case 59:
- return jjStopAtPos(0, 5);
- case 60:
- return jjStopAtPos(0, 6);
- case 62:
- return jjStopAtPos(0, 7);
- case 64:
- return jjStopAtPos(0, 8);
- case 91:
- return jjStopAtPos(0, 15);
- default :
- return jjMoveNfa_0(1, 0);
- }
-}
-private final void jjCheckNAdd(int state)
-{
- if (jjrounds[state] != jjround)
- {
- jjstateSet[jjnewStateCnt++] = state;
- jjrounds[state] = jjround;
- }
-}
-private final void jjAddStates(int start, int end)
-{
- do {
- jjstateSet[jjnewStateCnt++] = jjnextStates[start];
- } while (start++ != end);
-}
-private final void jjCheckNAddTwoStates(int state1, int state2)
-{
- jjCheckNAdd(state1);
- jjCheckNAdd(state2);
-}
-private final void jjCheckNAddStates(int start, int end)
-{
- do {
- jjCheckNAdd(jjnextStates[start]);
- } while (start++ != end);
-}
-private final void jjCheckNAddStates(int start)
-{
- jjCheckNAdd(jjnextStates[start]);
- jjCheckNAdd(jjnextStates[start + 1]);
-}
-private final int jjMoveNfa_0(int startState, int curPos)
-{
- int[] nextStates;
- int startsAt = 0;
- jjnewStateCnt = 3;
- int i = 1;
- jjstateSet[0] = startState;
- int j, kind = 0x7fffffff;
- for (;;)
- {
- if (++jjround == 0x7fffffff)
- ReInitRounds();
- if (curChar < 64)
- {
- long l = 1L << curChar;
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 1:
- if ((0xa3ffacfa00000000L & l) != 0L)
- {
- if (kind > 14)
- kind = 14;
- jjCheckNAdd(2);
- }
- else if ((0x100000200L & l) != 0L)
- {
- if (kind > 10)
- kind = 10;
- jjCheckNAdd(0);
- }
- break;
- case 0:
- if ((0x100000200L & l) == 0L)
- break;
- kind = 10;
- jjCheckNAdd(0);
- break;
- case 2:
- if ((0xa3ffecfa00000000L & l) == 0L)
- break;
- if (kind > 14)
- kind = 14;
- jjCheckNAdd(2);
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- else if (curChar < 128)
- {
- long l = 1L << (curChar & 077);
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 1:
- case 2:
- if ((0x7fffffffc7fffffeL & l) == 0L)
- break;
- if (kind > 14)
- kind = 14;
- jjCheckNAdd(2);
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- else
- {
- int i2 = (curChar & 0xff) >> 6;
- long l2 = 1L << (curChar & 077);
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- default : break;
- }
- } while(i != startsAt);
- }
- if (kind != 0x7fffffff)
- {
- jjmatchedKind = kind;
- jjmatchedPos = curPos;
- kind = 0x7fffffff;
- }
- ++curPos;
- if ((i = jjnewStateCnt) == (startsAt = 3 - (jjnewStateCnt = startsAt)))
- return curPos;
- try { curChar = input_stream.readChar(); }
- catch(java.io.IOException e) { return curPos; }
- }
-}
-private final int jjStopStringLiteralDfa_2(int pos, long active0)
-{
- switch (pos)
- {
- default :
- return -1;
- }
-}
-private final int jjStartNfa_2(int pos, long active0)
-{
- return jjMoveNfa_2(jjStopStringLiteralDfa_2(pos, active0), pos + 1);
-}
-private final int jjStartNfaWithStates_2(int pos, int kind, int state)
-{
- jjmatchedKind = kind;
- jjmatchedPos = pos;
- try { curChar = input_stream.readChar(); }
- catch(java.io.IOException e) { return pos + 1; }
- return jjMoveNfa_2(state, pos + 1);
-}
-private final int jjMoveStringLiteralDfa0_2()
-{
- switch(curChar)
- {
- case 40:
- return jjStopAtPos(0, 22);
- case 41:
- return jjStopAtPos(0, 20);
- default :
- return jjMoveNfa_2(0, 0);
- }
-}
-static final long[] jjbitVec0 = {
- 0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
-};
-private final int jjMoveNfa_2(int startState, int curPos)
-{
- int[] nextStates;
- int startsAt = 0;
- jjnewStateCnt = 3;
- int i = 1;
- jjstateSet[0] = startState;
- int j, kind = 0x7fffffff;
- for (;;)
- {
- if (++jjround == 0x7fffffff)
- ReInitRounds();
- if (curChar < 64)
- {
- long l = 1L << curChar;
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- if (kind > 23)
- kind = 23;
- break;
- case 1:
- if (kind > 21)
- kind = 21;
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- else if (curChar < 128)
- {
- long l = 1L << (curChar & 077);
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- if (kind > 23)
- kind = 23;
- if (curChar == 92)
- jjstateSet[jjnewStateCnt++] = 1;
- break;
- case 1:
- if (kind > 21)
- kind = 21;
- break;
- case 2:
- if (kind > 23)
- kind = 23;
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- else
- {
- int i2 = (curChar & 0xff) >> 6;
- long l2 = 1L << (curChar & 077);
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- if ((jjbitVec0[i2] & l2) != 0L && kind > 23)
- kind = 23;
- break;
- case 1:
- if ((jjbitVec0[i2] & l2) != 0L && kind > 21)
- kind = 21;
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- if (kind != 0x7fffffff)
- {
- jjmatchedKind = kind;
- jjmatchedPos = curPos;
- kind = 0x7fffffff;
- }
- ++curPos;
- if ((i = jjnewStateCnt) == (startsAt = 3 - (jjnewStateCnt = startsAt)))
- return curPos;
- try { curChar = input_stream.readChar(); }
- catch(java.io.IOException e) { return curPos; }
- }
-}
-private final int jjStopStringLiteralDfa_4(int pos, long active0)
-{
- switch (pos)
- {
- default :
- return -1;
- }
-}
-private final int jjStartNfa_4(int pos, long active0)
-{
- return jjMoveNfa_4(jjStopStringLiteralDfa_4(pos, active0), pos + 1);
-}
-private final int jjStartNfaWithStates_4(int pos, int kind, int state)
-{
- jjmatchedKind = kind;
- jjmatchedPos = pos;
- try { curChar = input_stream.readChar(); }
- catch(java.io.IOException e) { return pos + 1; }
- return jjMoveNfa_4(state, pos + 1);
-}
-private final int jjMoveStringLiteralDfa0_4()
-{
- switch(curChar)
- {
- case 34:
- return jjStopAtPos(0, 31);
- default :
- return jjMoveNfa_4(0, 0);
- }
-}
-private final int jjMoveNfa_4(int startState, int curPos)
-{
- int[] nextStates;
- int startsAt = 0;
- jjnewStateCnt = 3;
- int i = 1;
- jjstateSet[0] = startState;
- int j, kind = 0x7fffffff;
- for (;;)
- {
- if (++jjround == 0x7fffffff)
- ReInitRounds();
- if (curChar < 64)
- {
- long l = 1L << curChar;
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- case 2:
- if ((0xfffffffbffffffffL & l) == 0L)
- break;
- if (kind > 30)
- kind = 30;
- jjCheckNAdd(2);
- break;
- case 1:
- if (kind > 29)
- kind = 29;
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- else if (curChar < 128)
- {
- long l = 1L << (curChar & 077);
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- if ((0xffffffffefffffffL & l) != 0L)
- {
- if (kind > 30)
- kind = 30;
- jjCheckNAdd(2);
- }
- else if (curChar == 92)
- jjstateSet[jjnewStateCnt++] = 1;
- break;
- case 1:
- if (kind > 29)
- kind = 29;
- break;
- case 2:
- if ((0xffffffffefffffffL & l) == 0L)
- break;
- if (kind > 30)
- kind = 30;
- jjCheckNAdd(2);
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- else
- {
- int i2 = (curChar & 0xff) >> 6;
- long l2 = 1L << (curChar & 077);
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- case 2:
- if ((jjbitVec0[i2] & l2) == 0L)
- break;
- if (kind > 30)
- kind = 30;
- jjCheckNAdd(2);
- break;
- case 1:
- if ((jjbitVec0[i2] & l2) != 0L && kind > 29)
- kind = 29;
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- if (kind != 0x7fffffff)
- {
- jjmatchedKind = kind;
- jjmatchedPos = curPos;
- kind = 0x7fffffff;
- }
- ++curPos;
- if ((i = jjnewStateCnt) == (startsAt = 3 - (jjnewStateCnt = startsAt)))
- return curPos;
- try { curChar = input_stream.readChar(); }
- catch(java.io.IOException e) { return curPos; }
- }
-}
-private final int jjStopStringLiteralDfa_3(int pos, long active0)
-{
- switch (pos)
- {
- default :
- return -1;
- }
-}
-private final int jjStartNfa_3(int pos, long active0)
-{
- return jjMoveNfa_3(jjStopStringLiteralDfa_3(pos, active0), pos + 1);
-}
-private final int jjStartNfaWithStates_3(int pos, int kind, int state)
-{
- jjmatchedKind = kind;
- jjmatchedPos = pos;
- try { curChar = input_stream.readChar(); }
- catch(java.io.IOException e) { return pos + 1; }
- return jjMoveNfa_3(state, pos + 1);
-}
-private final int jjMoveStringLiteralDfa0_3()
-{
- switch(curChar)
- {
- case 40:
- return jjStopAtPos(0, 25);
- case 41:
- return jjStopAtPos(0, 26);
- default :
- return jjMoveNfa_3(0, 0);
- }
-}
-private final int jjMoveNfa_3(int startState, int curPos)
-{
- int[] nextStates;
- int startsAt = 0;
- jjnewStateCnt = 3;
- int i = 1;
- jjstateSet[0] = startState;
- int j, kind = 0x7fffffff;
- for (;;)
- {
- if (++jjround == 0x7fffffff)
- ReInitRounds();
- if (curChar < 64)
- {
- long l = 1L << curChar;
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- if (kind > 27)
- kind = 27;
- break;
- case 1:
- if (kind > 24)
- kind = 24;
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- else if (curChar < 128)
- {
- long l = 1L << (curChar & 077);
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- if (kind > 27)
- kind = 27;
- if (curChar == 92)
- jjstateSet[jjnewStateCnt++] = 1;
- break;
- case 1:
- if (kind > 24)
- kind = 24;
- break;
- case 2:
- if (kind > 27)
- kind = 27;
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- else
- {
- int i2 = (curChar & 0xff) >> 6;
- long l2 = 1L << (curChar & 077);
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- if ((jjbitVec0[i2] & l2) != 0L && kind > 27)
- kind = 27;
- break;
- case 1:
- if ((jjbitVec0[i2] & l2) != 0L && kind > 24)
- kind = 24;
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- if (kind != 0x7fffffff)
- {
- jjmatchedKind = kind;
- jjmatchedPos = curPos;
- kind = 0x7fffffff;
- }
- ++curPos;
- if ((i = jjnewStateCnt) == (startsAt = 3 - (jjnewStateCnt = startsAt)))
- return curPos;
- try { curChar = input_stream.readChar(); }
- catch(java.io.IOException e) { return curPos; }
- }
-}
-private final int jjStopStringLiteralDfa_1(int pos, long active0)
-{
- switch (pos)
- {
- default :
- return -1;
- }
-}
-private final int jjStartNfa_1(int pos, long active0)
-{
- return jjMoveNfa_1(jjStopStringLiteralDfa_1(pos, active0), pos + 1);
-}
-private final int jjStartNfaWithStates_1(int pos, int kind, int state)
-{
- jjmatchedKind = kind;
- jjmatchedPos = pos;
- try { curChar = input_stream.readChar(); }
- catch(java.io.IOException e) { return pos + 1; }
- return jjMoveNfa_1(state, pos + 1);
-}
-private final int jjMoveStringLiteralDfa0_1()
-{
- switch(curChar)
- {
- case 93:
- return jjStopAtPos(0, 18);
- default :
- return jjMoveNfa_1(0, 0);
- }
-}
-private final int jjMoveNfa_1(int startState, int curPos)
-{
- int[] nextStates;
- int startsAt = 0;
- jjnewStateCnt = 3;
- int i = 1;
- jjstateSet[0] = startState;
- int j, kind = 0x7fffffff;
- for (;;)
- {
- if (++jjround == 0x7fffffff)
- ReInitRounds();
- if (curChar < 64)
- {
- long l = 1L << curChar;
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- if (kind > 17)
- kind = 17;
- break;
- case 1:
- if (kind > 16)
- kind = 16;
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- else if (curChar < 128)
- {
- long l = 1L << (curChar & 077);
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- if ((0xffffffffc7ffffffL & l) != 0L)
- {
- if (kind > 17)
- kind = 17;
- }
- else if (curChar == 92)
- jjstateSet[jjnewStateCnt++] = 1;
- break;
- case 1:
- if (kind > 16)
- kind = 16;
- break;
- case 2:
- if ((0xffffffffc7ffffffL & l) != 0L && kind > 17)
- kind = 17;
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- else
- {
- int i2 = (curChar & 0xff) >> 6;
- long l2 = 1L << (curChar & 077);
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- if ((jjbitVec0[i2] & l2) != 0L && kind > 17)
- kind = 17;
- break;
- case 1:
- if ((jjbitVec0[i2] & l2) != 0L && kind > 16)
- kind = 16;
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- if (kind != 0x7fffffff)
- {
- jjmatchedKind = kind;
- jjmatchedPos = curPos;
- kind = 0x7fffffff;
- }
- ++curPos;
- if ((i = jjnewStateCnt) == (startsAt = 3 - (jjnewStateCnt = startsAt)))
- return curPos;
- try { curChar = input_stream.readChar(); }
- catch(java.io.IOException e) { return curPos; }
- }
-}
-static final int[] jjnextStates = {
-};
-public static final String[] jjstrLiteralImages = {
-"", "\15", "\12", "\54", "\72", "\73", "\74", "\76", "\100", "\56", null, null,
-null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-null, null, null, null, null, null, null, null, };
-public static final String[] lexStateNames = {
- "DEFAULT",
- "INDOMAINLITERAL",
- "INCOMMENT",
- "NESTED_COMMENT",
- "INQUOTEDSTRING",
-};
-public static final int[] jjnewLexState = {
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, 0, 2, 0, -1, 3, -1, -1,
- -1, -1, -1, 4, -1, -1, 0, -1, -1,
-};
-static final long[] jjtoToken = {
- 0x800443ffL,
-};
-static final long[] jjtoSkip = {
- 0x100400L,
-};
-static final long[] jjtoSpecial = {
- 0x400L,
-};
-static final long[] jjtoMore = {
- 0x7feb8000L,
-};
-protected SimpleCharStream input_stream;
-private final int[] jjrounds = new int[3];
-private final int[] jjstateSet = new int[6];
-StringBuffer image;
-int jjimageLen;
-int lengthOfMatch;
-protected char curChar;
-public AddressListParserTokenManager(SimpleCharStream stream){
- if (SimpleCharStream.staticFlag)
- throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
- input_stream = stream;
-}
-public AddressListParserTokenManager(SimpleCharStream stream, int lexState){
- this(stream);
- SwitchTo(lexState);
-}
-public void ReInit(SimpleCharStream stream)
-{
- jjmatchedPos = jjnewStateCnt = 0;
- curLexState = defaultLexState;
- input_stream = stream;
- ReInitRounds();
-}
-private final void ReInitRounds()
-{
- int i;
- jjround = 0x80000001;
- for (i = 3; i-- > 0;)
- jjrounds[i] = 0x80000000;
-}
-public void ReInit(SimpleCharStream stream, int lexState)
-{
- ReInit(stream);
- SwitchTo(lexState);
-}
-public void SwitchTo(int lexState)
-{
- if (lexState >= 5 || lexState < 0)
- throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
- else
- curLexState = lexState;
-}
-
-protected Token jjFillToken()
-{
- Token t = Token.newToken(jjmatchedKind);
- t.kind = jjmatchedKind;
- String im = jjstrLiteralImages[jjmatchedKind];
- t.image = (im == null) ? input_stream.GetImage() : im;
- t.beginLine = input_stream.getBeginLine();
- t.beginColumn = input_stream.getBeginColumn();
- t.endLine = input_stream.getEndLine();
- t.endColumn = input_stream.getEndColumn();
- return t;
-}
-
-int curLexState = 0;
-int defaultLexState = 0;
-int jjnewStateCnt;
-int jjround;
-int jjmatchedPos;
-int jjmatchedKind;
-
-public Token getNextToken()
-{
- int kind;
- Token specialToken = null;
- Token matchedToken;
- int curPos = 0;
-
- EOFLoop :
- for (;;)
- {
- try
- {
- curChar = input_stream.BeginToken();
- }
- catch(java.io.IOException e)
- {
- jjmatchedKind = 0;
- matchedToken = jjFillToken();
- matchedToken.specialToken = specialToken;
- return matchedToken;
- }
- image = null;
- jjimageLen = 0;
-
- for (;;)
- {
- switch(curLexState)
- {
- case 0:
- jjmatchedKind = 0x7fffffff;
- jjmatchedPos = 0;
- curPos = jjMoveStringLiteralDfa0_0();
- break;
- case 1:
- jjmatchedKind = 0x7fffffff;
- jjmatchedPos = 0;
- curPos = jjMoveStringLiteralDfa0_1();
- break;
- case 2:
- jjmatchedKind = 0x7fffffff;
- jjmatchedPos = 0;
- curPos = jjMoveStringLiteralDfa0_2();
- break;
- case 3:
- jjmatchedKind = 0x7fffffff;
- jjmatchedPos = 0;
- curPos = jjMoveStringLiteralDfa0_3();
- break;
- case 4:
- jjmatchedKind = 0x7fffffff;
- jjmatchedPos = 0;
- curPos = jjMoveStringLiteralDfa0_4();
- break;
- }
- if (jjmatchedKind != 0x7fffffff)
- {
- if (jjmatchedPos + 1 < curPos)
- input_stream.backup(curPos - jjmatchedPos - 1);
- if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
- {
- matchedToken = jjFillToken();
- matchedToken.specialToken = specialToken;
- TokenLexicalActions(matchedToken);
- if (jjnewLexState[jjmatchedKind] != -1)
- curLexState = jjnewLexState[jjmatchedKind];
- return matchedToken;
- }
- else if ((jjtoSkip[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
- {
- if ((jjtoSpecial[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
- {
- matchedToken = jjFillToken();
- if (specialToken == null)
- specialToken = matchedToken;
- else
- {
- matchedToken.specialToken = specialToken;
- specialToken = (specialToken.next = matchedToken);
- }
- }
- if (jjnewLexState[jjmatchedKind] != -1)
- curLexState = jjnewLexState[jjmatchedKind];
- continue EOFLoop;
- }
- MoreLexicalActions();
- if (jjnewLexState[jjmatchedKind] != -1)
- curLexState = jjnewLexState[jjmatchedKind];
- curPos = 0;
- jjmatchedKind = 0x7fffffff;
- try {
- curChar = input_stream.readChar();
- continue;
- }
- catch (java.io.IOException e1) { }
- }
- int error_line = input_stream.getEndLine();
- int error_column = input_stream.getEndColumn();
- String error_after = null;
- boolean EOFSeen = false;
- try { input_stream.readChar(); input_stream.backup(1); }
- catch (java.io.IOException e1) {
- EOFSeen = true;
- error_after = curPos <= 1 ? "" : input_stream.GetImage();
- if (curChar == '\n' || curChar == '\r') {
- error_line++;
- error_column = 0;
- }
- else
- error_column++;
- }
- if (!EOFSeen) {
- input_stream.backup(1);
- error_after = curPos <= 1 ? "" : input_stream.GetImage();
- }
- throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR);
- }
- }
-}
-
-void MoreLexicalActions()
-{
- jjimageLen += (lengthOfMatch = jjmatchedPos + 1);
- switch(jjmatchedKind)
- {
- case 16 :
- if (image == null)
- image = new StringBuffer();
- image.append(input_stream.GetSuffix(jjimageLen));
- jjimageLen = 0;
- image.deleteCharAt(image.length() - 2);
- break;
- case 21 :
- if (image == null)
- image = new StringBuffer();
- image.append(input_stream.GetSuffix(jjimageLen));
- jjimageLen = 0;
- image.deleteCharAt(image.length() - 2);
- break;
- case 22 :
- if (image == null)
- image = new StringBuffer();
- image.append(input_stream.GetSuffix(jjimageLen));
- jjimageLen = 0;
- commentNest = 1;
- break;
- case 24 :
- if (image == null)
- image = new StringBuffer();
- image.append(input_stream.GetSuffix(jjimageLen));
- jjimageLen = 0;
- image.deleteCharAt(image.length() - 2);
- break;
- case 25 :
- if (image == null)
- image = new StringBuffer();
- image.append(input_stream.GetSuffix(jjimageLen));
- jjimageLen = 0;
- ++commentNest;
- break;
- case 26 :
- if (image == null)
- image = new StringBuffer();
- image.append(input_stream.GetSuffix(jjimageLen));
- jjimageLen = 0;
- --commentNest; if (commentNest == 0) SwitchTo(INCOMMENT);
- break;
- case 28 :
- if (image == null)
- image = new StringBuffer();
- image.append(input_stream.GetSuffix(jjimageLen));
- jjimageLen = 0;
- image.deleteCharAt(image.length() - 1);
- break;
- case 29 :
- if (image == null)
- image = new StringBuffer();
- image.append(input_stream.GetSuffix(jjimageLen));
- jjimageLen = 0;
- image.deleteCharAt(image.length() - 2);
- break;
- default :
- break;
- }
-}
-void TokenLexicalActions(Token matchedToken)
-{
- switch(jjmatchedKind)
- {
- case 18 :
- if (image == null)
- image = new StringBuffer();
- image.append(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
- matchedToken.image = image.toString();
- break;
- case 31 :
- if (image == null)
- image = new StringBuffer();
- image.append(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
- matchedToken.image = image.substring(0, image.length() - 1);
- break;
- default :
- break;
- }
-}
-}
diff --git a/apache/org/apache/james/mime4j/field/address/parser/AddressListParserTreeConstants.java b/apache/org/apache/james/mime4j/field/address/parser/AddressListParserTreeConstants.java
deleted file mode 100644
index 5987f19d8..000000000
--- a/apache/org/apache/james/mime4j/field/address/parser/AddressListParserTreeConstants.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Generated By:JJTree: Do not edit this line. /Users/jason/Projects/apache-mime4j-0.3/target/generated-sources/jjtree/org/apache/james/mime4j/field/address/parser/AddressListParserTreeConstants.java */
-
-package org.apache.james.mime4j.field.address.parser;
-
-public interface AddressListParserTreeConstants
-{
- public int JJTVOID = 0;
- public int JJTADDRESS_LIST = 1;
- public int JJTADDRESS = 2;
- public int JJTMAILBOX = 3;
- public int JJTNAME_ADDR = 4;
- public int JJTGROUP_BODY = 5;
- public int JJTANGLE_ADDR = 6;
- public int JJTROUTE = 7;
- public int JJTPHRASE = 8;
- public int JJTADDR_SPEC = 9;
- public int JJTLOCAL_PART = 10;
- public int JJTDOMAIN = 11;
-
-
- public String[] jjtNodeName = {
- "void",
- "address_list",
- "address",
- "mailbox",
- "name_addr",
- "group_body",
- "angle_addr",
- "route",
- "phrase",
- "addr_spec",
- "local_part",
- "domain",
- };
-}
diff --git a/apache/org/apache/james/mime4j/field/address/parser/AddressListParserVisitor.java b/apache/org/apache/james/mime4j/field/address/parser/AddressListParserVisitor.java
deleted file mode 100644
index 8ec2fe7d2..000000000
--- a/apache/org/apache/james/mime4j/field/address/parser/AddressListParserVisitor.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Generated By:JJTree: Do not edit this line. /Users/jason/Projects/apache-mime4j-0.3/target/generated-sources/jjtree/org/apache/james/mime4j/field/address/parser/AddressListParserVisitor.java */
-
-package org.apache.james.mime4j.field.address.parser;
-
-public interface AddressListParserVisitor
-{
- public Object visit(SimpleNode node, Object data);
- public Object visit(ASTaddress_list node, Object data);
- public Object visit(ASTaddress node, Object data);
- public Object visit(ASTmailbox node, Object data);
- public Object visit(ASTname_addr node, Object data);
- public Object visit(ASTgroup_body node, Object data);
- public Object visit(ASTangle_addr node, Object data);
- public Object visit(ASTroute node, Object data);
- public Object visit(ASTphrase node, Object data);
- public Object visit(ASTaddr_spec node, Object data);
- public Object visit(ASTlocal_part node, Object data);
- public Object visit(ASTdomain node, Object data);
-}
diff --git a/apache/org/apache/james/mime4j/field/address/parser/BaseNode.java b/apache/org/apache/james/mime4j/field/address/parser/BaseNode.java
deleted file mode 100644
index 780974616..000000000
--- a/apache/org/apache/james/mime4j/field/address/parser/BaseNode.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j.field.address.parser;
-
-import org.apache.james.mime4j.field.address.parser.Node;
-import org.apache.james.mime4j.field.address.parser.Token;
-
-public abstract class BaseNode implements Node {
-
- public Token firstToken;
- public Token lastToken;
-
-} \ No newline at end of file
diff --git a/apache/org/apache/james/mime4j/field/address/parser/JJTAddressListParserState.java b/apache/org/apache/james/mime4j/field/address/parser/JJTAddressListParserState.java
deleted file mode 100644
index 08b5c5bef..000000000
--- a/apache/org/apache/james/mime4j/field/address/parser/JJTAddressListParserState.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/* Generated By:JJTree: Do not edit this line. /Users/jason/Projects/apache-mime4j-0.3/target/generated-sources/jjtree/org/apache/james/mime4j/field/address/parser/JJTAddressListParserState.java */
-
-package org.apache.james.mime4j.field.address.parser;
-
-class JJTAddressListParserState {
- private java.util.Stack<Node> nodes;
- private java.util.Stack<Integer> marks;
-
- private int sp; // number of nodes on stack
- private int mk; // current mark
- private boolean node_created;
-
- JJTAddressListParserState() {
- nodes = new java.util.Stack<Node>();
- marks = new java.util.Stack<Integer>();
- sp = 0;
- mk = 0;
- }
-
- /* Determines whether the current node was actually closed and
- pushed. This should only be called in the final user action of a
- node scope. */
- boolean nodeCreated() {
- return node_created;
- }
-
- /* Call this to reinitialize the node stack. It is called
- automatically by the parser's ReInit() method. */
- void reset() {
- nodes.removeAllElements();
- marks.removeAllElements();
- sp = 0;
- mk = 0;
- }
-
- /* Returns the root node of the AST. It only makes sense to call
- this after a successful parse. */
- Node rootNode() {
- return nodes.elementAt(0);
- }
-
- /* Pushes a node on to the stack. */
- void pushNode(Node n) {
- nodes.push(n);
- ++sp;
- }
-
- /* Returns the node on the top of the stack, and remove it from the
- stack. */
- Node popNode() {
- if (--sp < mk) {
- mk = marks.pop().intValue();
- }
- return nodes.pop();
- }
-
- /* Returns the node currently on the top of the stack. */
- Node peekNode() {
- return nodes.peek();
- }
-
- /* Returns the number of children on the stack in the current node
- scope. */
- int nodeArity() {
- return sp - mk;
- }
-
-
- void clearNodeScope(Node n) {
- while (sp > mk) {
- popNode();
- }
- mk = marks.pop().intValue();
- }
-
-
- void openNodeScope(Node n) {
- marks.push(new Integer(mk));
- mk = sp;
- n.jjtOpen();
- }
-
-
- /* A definite node is constructed from a specified number of
- children. That number of nodes are popped from the stack and
- made the children of the definite node. Then the definite node
- is pushed on to the stack. */
- void closeNodeScope(Node n, int num) {
- mk = marks.pop().intValue();
- while (num-- > 0) {
- Node c = popNode();
- c.jjtSetParent(n);
- n.jjtAddChild(c, num);
- }
- n.jjtClose();
- pushNode(n);
- node_created = true;
- }
-
-
- /* A conditional node is constructed if its condition is true. All
- the nodes that have been pushed since the node was opened are
- made children of the the conditional node, which is then pushed
- on to the stack. If the condition is false the node is not
- constructed and they are left on the stack. */
- void closeNodeScope(Node n, boolean condition) {
- if (condition) {
- int a = nodeArity();
- mk = marks.pop().intValue();
- while (a-- > 0) {
- Node c = popNode();
- c.jjtSetParent(n);
- n.jjtAddChild(c, a);
- }
- n.jjtClose();
- pushNode(n);
- node_created = true;
- } else {
- mk = marks.pop().intValue();
- node_created = false;
- }
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/address/parser/Node.java b/apache/org/apache/james/mime4j/field/address/parser/Node.java
deleted file mode 100644
index 158892016..000000000
--- a/apache/org/apache/james/mime4j/field/address/parser/Node.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Generated By:JJTree: Do not edit this line. Node.java */
-
-package org.apache.james.mime4j.field.address.parser;
-
-/* All AST nodes must implement this interface. It provides basic
- machinery for constructing the parent and child relationships
- between nodes. */
-
-public interface Node {
-
- /** This method is called after the node has been made the current
- node. It indicates that child nodes can now be added to it. */
- public void jjtOpen();
-
- /** This method is called after all the child nodes have been
- added. */
- public void jjtClose();
-
- /** This pair of methods are used to inform the node of its
- parent. */
- public void jjtSetParent(Node n);
- public Node jjtGetParent();
-
- /** This method tells the node to add its argument to the node's
- list of children. */
- public void jjtAddChild(Node n, int i);
-
- /** This method returns a child node. The children are numbered
- from zero, left to right. */
- public Node jjtGetChild(int i);
-
- /** Return the number of children the node has. */
- public int jjtGetNumChildren();
-
- /** Accept the visitor. **/
- public Object jjtAccept(AddressListParserVisitor visitor, Object data);
-}
diff --git a/apache/org/apache/james/mime4j/field/address/parser/ParseException.java b/apache/org/apache/james/mime4j/field/address/parser/ParseException.java
deleted file mode 100644
index e20146fb6..000000000
--- a/apache/org/apache/james/mime4j/field/address/parser/ParseException.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/* Generated By:JavaCC: Do not edit this line. ParseException.java Version 3.0 */
-/*
- * Copyright 2004 the mime4j project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.james.mime4j.field.address.parser;
-
-/**
- * This exception is thrown when parse errors are encountered.
- * You can explicitly create objects of this exception type by
- * calling the method generateParseException in the generated
- * parser.
- *
- * You can modify this class to customize your error reporting
- * mechanisms so long as you retain the public fields.
- */
-public class ParseException extends Exception {
-
- /**
- * This constructor is used by the method "generateParseException"
- * in the generated parser. Calling this constructor generates
- * a new object of this type with the fields "currentToken",
- * "expectedTokenSequences", and "tokenImage" set. The boolean
- * flag "specialConstructor" is also set to true to indicate that
- * this constructor was used to create this object.
- * This constructor calls its super class with the empty string
- * to force the "toString" method of parent class "Throwable" to
- * print the error message in the form:
- * ParseException: <result of getMessage>
- */
- public ParseException(Token currentTokenVal,
- int[][] expectedTokenSequencesVal,
- String[] tokenImageVal
- )
- {
- super("");
- specialConstructor = true;
- currentToken = currentTokenVal;
- expectedTokenSequences = expectedTokenSequencesVal;
- tokenImage = tokenImageVal;
- }
-
- /**
- * The following constructors are for use by you for whatever
- * purpose you can think of. Constructing the exception in this
- * manner makes the exception behave in the normal way - i.e., as
- * documented in the class "Throwable". The fields "errorToken",
- * "expectedTokenSequences", and "tokenImage" do not contain
- * relevant information. The JavaCC generated code does not use
- * these constructors.
- */
-
- public ParseException() {
- super();
- specialConstructor = false;
- }
-
- public ParseException(String message) {
- super(message);
- specialConstructor = false;
- }
-
- /**
- * This variable determines which constructor was used to create
- * this object and thereby affects the semantics of the
- * "getMessage" method (see below).
- */
- protected boolean specialConstructor;
-
- /**
- * This is the last token that has been consumed successfully. If
- * this object has been created due to a parse error, the token
- * followng this token will (therefore) be the first error token.
- */
- public Token currentToken;
-
- /**
- * Each entry in this array is an array of integers. Each array
- * of integers represents a sequence of tokens (by their ordinal
- * values) that is expected at this point of the parse.
- */
- public int[][] expectedTokenSequences;
-
- /**
- * This is a reference to the "tokenImage" array of the generated
- * parser within which the parse error occurred. This array is
- * defined in the generated ...Constants interface.
- */
- public String[] tokenImage;
-
- /**
- * This method has the standard behavior when this object has been
- * created using the standard constructors. Otherwise, it uses
- * "currentToken" and "expectedTokenSequences" to generate a parse
- * error message and returns it. If this object has been created
- * due to a parse error, and you do not catch it (it gets thrown
- * from the parser), then this method is called during the printing
- * of the final stack trace, and hence the correct error message
- * gets displayed.
- */
- public String getMessage() {
- if (!specialConstructor) {
- return super.getMessage();
- }
- StringBuffer expected = new StringBuffer();
- int maxSize = 0;
- for (int i = 0; i < expectedTokenSequences.length; i++) {
- if (maxSize < expectedTokenSequences[i].length) {
- maxSize = expectedTokenSequences[i].length;
- }
- for (int j = 0; j < expectedTokenSequences[i].length; j++) {
- expected.append(tokenImage[expectedTokenSequences[i][j]]).append(" ");
- }
- if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) {
- expected.append("...");
- }
- expected.append(eol).append(" ");
- }
- String retval = "Encountered \"";
- Token tok = currentToken.next;
- for (int i = 0; i < maxSize; i++) {
- if (i != 0) retval += " ";
- if (tok.kind == 0) {
- retval += tokenImage[0];
- break;
- }
- retval += add_escapes(tok.image);
- tok = tok.next;
- }
- retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn;
- retval += "." + eol;
- if (expectedTokenSequences.length == 1) {
- retval += "Was expecting:" + eol + " ";
- } else {
- retval += "Was expecting one of:" + eol + " ";
- }
- retval += expected.toString();
- return retval;
- }
-
- /**
- * The end of line string for this machine.
- */
- protected String eol = System.getProperty("line.separator", "\n");
-
- /**
- * Used to convert raw characters to their escaped version
- * when these raw version cannot be used as part of an ASCII
- * string literal.
- */
- protected String add_escapes(String str) {
- StringBuffer retval = new StringBuffer();
- char ch;
- for (int i = 0; i < str.length(); i++) {
- switch (str.charAt(i))
- {
- case 0 :
- continue;
- case '\b':
- retval.append("\\b");
- continue;
- case '\t':
- retval.append("\\t");
- continue;
- case '\n':
- retval.append("\\n");
- continue;
- case '\f':
- retval.append("\\f");
- continue;
- case '\r':
- retval.append("\\r");
- continue;
- case '\"':
- retval.append("\\\"");
- continue;
- case '\'':
- retval.append("\\\'");
- continue;
- case '\\':
- retval.append("\\\\");
- continue;
- default:
- if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
- String s = "0000" + Integer.toString(ch, 16);
- retval.append("\\u" + s.substring(s.length() - 4, s.length()));
- } else {
- retval.append(ch);
- }
- continue;
- }
- }
- return retval.toString();
- }
-
-}
diff --git a/apache/org/apache/james/mime4j/field/address/parser/SimpleCharStream.java b/apache/org/apache/james/mime4j/field/address/parser/SimpleCharStream.java
deleted file mode 100644
index c9ba0b444..000000000
--- a/apache/org/apache/james/mime4j/field/address/parser/SimpleCharStream.java
+++ /dev/null
@@ -1,454 +0,0 @@
-/* Generated By:JavaCC: Do not edit this line. SimpleCharStream.java Version 4.0 */
-/*
- * Copyright 2004 the mime4j project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.james.mime4j.field.address.parser;
-
-/**
- * An implementation of interface CharStream, where the stream is assumed to
- * contain only ASCII characters (without unicode processing).
- */
-
-public class SimpleCharStream
-{
- public static final boolean staticFlag = false;
- int bufsize;
- int available;
- int tokenBegin;
- public int bufpos = -1;
- protected int bufline[];
- protected int bufcolumn[];
-
- protected int column = 0;
- protected int line = 1;
-
- protected boolean prevCharIsCR = false;
- protected boolean prevCharIsLF = false;
-
- protected java.io.Reader inputStream;
-
- protected char[] buffer;
- protected int maxNextCharInd = 0;
- protected int inBuf = 0;
- protected int tabSize = 8;
-
- protected void setTabSize(int i) { tabSize = i; }
- protected int getTabSize(int i) { return tabSize; }
-
-
- protected void ExpandBuff(boolean wrapAround)
- {
- char[] newbuffer = new char[bufsize + 2048];
- int newbufline[] = new int[bufsize + 2048];
- int newbufcolumn[] = new int[bufsize + 2048];
-
- try
- {
- if (wrapAround)
- {
- System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
- System.arraycopy(buffer, 0, newbuffer,
- bufsize - tokenBegin, bufpos);
- buffer = newbuffer;
-
- System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
- System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
- bufline = newbufline;
-
- System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
- System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
- bufcolumn = newbufcolumn;
-
- maxNextCharInd = (bufpos += (bufsize - tokenBegin));
- }
- else
- {
- System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
- buffer = newbuffer;
-
- System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
- bufline = newbufline;
-
- System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
- bufcolumn = newbufcolumn;
-
- maxNextCharInd = (bufpos -= tokenBegin);
- }
- }
- catch (Throwable t)
- {
- throw new Error(t.getMessage());
- }
-
-
- bufsize += 2048;
- available = bufsize;
- tokenBegin = 0;
- }
-
- protected void FillBuff() throws java.io.IOException
- {
- if (maxNextCharInd == available)
- {
- if (available == bufsize)
- {
- if (tokenBegin > 2048)
- {
- bufpos = maxNextCharInd = 0;
- available = tokenBegin;
- }
- else if (tokenBegin < 0)
- bufpos = maxNextCharInd = 0;
- else
- ExpandBuff(false);
- }
- else if (available > tokenBegin)
- available = bufsize;
- else if ((tokenBegin - available) < 2048)
- ExpandBuff(true);
- else
- available = tokenBegin;
- }
-
- int i;
- try {
- if ((i = inputStream.read(buffer, maxNextCharInd,
- available - maxNextCharInd)) == -1)
- {
- inputStream.close();
- throw new java.io.IOException();
- }
- else
- maxNextCharInd += i;
- return;
- }
- catch(java.io.IOException e) {
- --bufpos;
- backup(0);
- if (tokenBegin == -1)
- tokenBegin = bufpos;
- throw e;
- }
- }
-
- public char BeginToken() throws java.io.IOException
- {
- tokenBegin = -1;
- char c = readChar();
- tokenBegin = bufpos;
-
- return c;
- }
-
- protected void UpdateLineColumn(char c)
- {
- column++;
-
- if (prevCharIsLF)
- {
- prevCharIsLF = false;
- line += (column = 1);
- }
- else if (prevCharIsCR)
- {
- prevCharIsCR = false;
- if (c == '\n')
- {
- prevCharIsLF = true;
- }
- else
- line += (column = 1);
- }
-
- switch (c)
- {
- case '\r' :
- prevCharIsCR = true;
- break;
- case '\n' :
- prevCharIsLF = true;
- break;
- case '\t' :
- column--;
- column += (tabSize - (column % tabSize));
- break;
- default :
- break;
- }
-
- bufline[bufpos] = line;
- bufcolumn[bufpos] = column;
- }
-
- public char readChar() throws java.io.IOException
- {
- if (inBuf > 0)
- {
- --inBuf;
-
- if (++bufpos == bufsize)
- bufpos = 0;
-
- return buffer[bufpos];
- }
-
- if (++bufpos >= maxNextCharInd)
- FillBuff();
-
- char c = buffer[bufpos];
-
- UpdateLineColumn(c);
- return (c);
- }
-
- /**
- * @deprecated
- * @see #getEndColumn
- */
- @Deprecated
- public int getColumn() {
- return bufcolumn[bufpos];
- }
-
- /**
- * @deprecated
- * @see #getEndLine
- */
- @Deprecated
- public int getLine() {
- return bufline[bufpos];
- }
-
- public int getEndColumn() {
- return bufcolumn[bufpos];
- }
-
- public int getEndLine() {
- return bufline[bufpos];
- }
-
- public int getBeginColumn() {
- return bufcolumn[tokenBegin];
- }
-
- public int getBeginLine() {
- return bufline[tokenBegin];
- }
-
- public void backup(int amount) {
-
- inBuf += amount;
- if ((bufpos -= amount) < 0)
- bufpos += bufsize;
- }
-
- public SimpleCharStream(java.io.Reader dstream, int startline,
- int startcolumn, int buffersize)
- {
- inputStream = dstream;
- line = startline;
- column = startcolumn - 1;
-
- available = bufsize = buffersize;
- buffer = new char[buffersize];
- bufline = new int[buffersize];
- bufcolumn = new int[buffersize];
- }
-
- public SimpleCharStream(java.io.Reader dstream, int startline,
- int startcolumn)
- {
- this(dstream, startline, startcolumn, 4096);
- }
-
- public SimpleCharStream(java.io.Reader dstream)
- {
- this(dstream, 1, 1, 4096);
- }
- public void ReInit(java.io.Reader dstream, int startline,
- int startcolumn, int buffersize)
- {
- inputStream = dstream;
- line = startline;
- column = startcolumn - 1;
-
- if (buffer == null || buffersize != buffer.length)
- {
- available = bufsize = buffersize;
- buffer = new char[buffersize];
- bufline = new int[buffersize];
- bufcolumn = new int[buffersize];
- }
- prevCharIsLF = prevCharIsCR = false;
- tokenBegin = inBuf = maxNextCharInd = 0;
- bufpos = -1;
- }
-
- public void ReInit(java.io.Reader dstream, int startline,
- int startcolumn)
- {
- ReInit(dstream, startline, startcolumn, 4096);
- }
-
- public void ReInit(java.io.Reader dstream)
- {
- ReInit(dstream, 1, 1, 4096);
- }
- public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,
- int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
- {
- this(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
- }
-
- public SimpleCharStream(java.io.InputStream dstream, int startline,
- int startcolumn, int buffersize)
- {
- this(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
- }
-
- public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,
- int startcolumn) throws java.io.UnsupportedEncodingException
- {
- this(dstream, encoding, startline, startcolumn, 4096);
- }
-
- public SimpleCharStream(java.io.InputStream dstream, int startline,
- int startcolumn)
- {
- this(dstream, startline, startcolumn, 4096);
- }
-
- public SimpleCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
- {
- this(dstream, encoding, 1, 1, 4096);
- }
-
- public SimpleCharStream(java.io.InputStream dstream)
- {
- this(dstream, 1, 1, 4096);
- }
-
- public void ReInit(java.io.InputStream dstream, String encoding, int startline,
- int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
- {
- ReInit(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
- }
-
- public void ReInit(java.io.InputStream dstream, int startline,
- int startcolumn, int buffersize)
- {
- ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
- }
-
- public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
- {
- ReInit(dstream, encoding, 1, 1, 4096);
- }
-
- public void ReInit(java.io.InputStream dstream)
- {
- ReInit(dstream, 1, 1, 4096);
- }
- public void ReInit(java.io.InputStream dstream, String encoding, int startline,
- int startcolumn) throws java.io.UnsupportedEncodingException
- {
- ReInit(dstream, encoding, startline, startcolumn, 4096);
- }
- public void ReInit(java.io.InputStream dstream, int startline,
- int startcolumn)
- {
- ReInit(dstream, startline, startcolumn, 4096);
- }
- public String GetImage()
- {
- if (bufpos >= tokenBegin)
- return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
- else
- return new String(buffer, tokenBegin, bufsize - tokenBegin) +
- new String(buffer, 0, bufpos + 1);
- }
-
- public char[] GetSuffix(int len)
- {
- char[] ret = new char[len];
-
- if ((bufpos + 1) >= len)
- System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);
- else
- {
- System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,
- len - bufpos - 1);
- System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);
- }
-
- return ret;
- }
-
- public void Done()
- {
- buffer = null;
- bufline = null;
- bufcolumn = null;
- }
-
- /**
- * Method to adjust line and column numbers for the start of a token.
- */
- public void adjustBeginLineColumn(int newLine, int newCol)
- {
- int start = tokenBegin;
- int len;
-
- if (bufpos >= tokenBegin)
- {
- len = bufpos - tokenBegin + inBuf + 1;
- }
- else
- {
- len = bufsize - tokenBegin + bufpos + 1 + inBuf;
- }
-
- int i = 0, j = 0, k = 0;
- int nextColDiff = 0, columnDiff = 0;
-
- while (i < len &&
- bufline[j = start % bufsize] == bufline[k = ++start % bufsize])
- {
- bufline[j] = newLine;
- nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];
- bufcolumn[j] = newCol + columnDiff;
- columnDiff = nextColDiff;
- i++;
- }
-
- if (i < len)
- {
- bufline[j] = newLine++;
- bufcolumn[j] = newCol + columnDiff;
-
- while (i++ < len)
- {
- if (bufline[j = start % bufsize] != bufline[++start % bufsize])
- bufline[j] = newLine++;
- else
- bufline[j] = newLine;
- }
- }
-
- line = bufline[j];
- column = bufcolumn[j];
- }
-
-}
diff --git a/apache/org/apache/james/mime4j/field/address/parser/SimpleNode.java b/apache/org/apache/james/mime4j/field/address/parser/SimpleNode.java
deleted file mode 100644
index 9bf537e60..000000000
--- a/apache/org/apache/james/mime4j/field/address/parser/SimpleNode.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/* Generated By:JJTree: Do not edit this line. SimpleNode.java */
-
-package org.apache.james.mime4j.field.address.parser;
-
-public class SimpleNode extends org.apache.james.mime4j.field.address.parser.BaseNode implements Node {
- protected Node parent;
- protected Node[] children;
- protected int id;
- protected AddressListParser parser;
-
- public SimpleNode(int i) {
- id = i;
- }
-
- public SimpleNode(AddressListParser p, int i) {
- this(i);
- parser = p;
- }
-
- public void jjtOpen() {
- }
-
- public void jjtClose() {
- }
-
- public void jjtSetParent(Node n) { parent = n; }
- public Node jjtGetParent() { return parent; }
-
- public void jjtAddChild(Node n, int i) {
- if (children == null) {
- children = new Node[i + 1];
- } else if (i >= children.length) {
- Node c[] = new Node[i + 1];
- System.arraycopy(children, 0, c, 0, children.length);
- children = c;
- }
- children[i] = n;
- }
-
- public Node jjtGetChild(int i) {
- return children[i];
- }
-
- public int jjtGetNumChildren() {
- return (children == null) ? 0 : children.length;
- }
-
- /** Accept the visitor. **/
- public Object jjtAccept(AddressListParserVisitor visitor, Object data) {
- return visitor.visit(this, data);
- }
-
- /** Accept the visitor. **/
- public Object childrenAccept(AddressListParserVisitor visitor, Object data) {
- if (children != null) {
- for (int i = 0; i < children.length; ++i) {
- children[i].jjtAccept(visitor, data);
- }
- }
- return data;
- }
-
- /* You can override these two methods in subclasses of SimpleNode to
- customize the way the node appears when the tree is dumped. If
- your output uses more than one line you should override
- toString(String), otherwise overriding toString() is probably all
- you need to do. */
-
- public String toString() { return AddressListParserTreeConstants.jjtNodeName[id]; }
- public String toString(String prefix) { return prefix + toString(); }
-
- /* Override this method if you want to customize how the node dumps
- out its children. */
-
- public void dump(String prefix) {
- System.out.println(toString(prefix));
- if (children != null) {
- for (int i = 0; i < children.length; ++i) {
- SimpleNode n = (SimpleNode)children[i];
- if (n != null) {
- n.dump(prefix + " ");
- }
- }
- }
- }
-}
-
diff --git a/apache/org/apache/james/mime4j/field/address/parser/Token.java b/apache/org/apache/james/mime4j/field/address/parser/Token.java
deleted file mode 100644
index 2382e8e92..000000000
--- a/apache/org/apache/james/mime4j/field/address/parser/Token.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/* Generated By:JavaCC: Do not edit this line. Token.java Version 3.0 */
-/*
- * Copyright 2004 the mime4j project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.james.mime4j.field.address.parser;
-
-/**
- * Describes the input token stream.
- */
-
-public class Token {
-
- /**
- * An integer that describes the kind of this token. This numbering
- * system is determined by JavaCCParser, and a table of these numbers is
- * stored in the file ...Constants.java.
- */
- public int kind;
-
- /**
- * beginLine and beginColumn describe the position of the first character
- * of this token; endLine and endColumn describe the position of the
- * last character of this token.
- */
- public int beginLine, beginColumn, endLine, endColumn;
-
- /**
- * The string image of the token.
- */
- public String image;
-
- /**
- * A reference to the next regular (non-special) token from the input
- * stream. If this is the last token from the input stream, or if the
- * token manager has not read tokens beyond this one, this field is
- * set to null. This is true only if this token is also a regular
- * token. Otherwise, see below for a description of the contents of
- * this field.
- */
- public Token next;
-
- /**
- * This field is used to access special tokens that occur prior to this
- * token, but after the immediately preceding regular (non-special) token.
- * If there are no such special tokens, this field is set to null.
- * When there are more than one such special token, this field refers
- * to the last of these special tokens, which in turn refers to the next
- * previous special token through its specialToken field, and so on
- * until the first special token (whose specialToken field is null).
- * The next fields of special tokens refer to other special tokens that
- * immediately follow it (without an intervening regular token). If there
- * is no such token, this field is null.
- */
- public Token specialToken;
-
- /**
- * Returns the image.
- */
- public String toString()
- {
- return image;
- }
-
- /**
- * Returns a new Token object, by default. However, if you want, you
- * can create and return subclass objects based on the value of ofKind.
- * Simply add the cases to the switch for all those special cases.
- * For example, if you have a subclass of Token called IDToken that
- * you want to create if ofKind is ID, simlpy add something like :
- *
- * case MyParserConstants.ID : return new IDToken();
- *
- * to the following switch statement. Then you can cast matchedToken
- * variable to the appropriate type and use it in your lexical actions.
- */
- public static final Token newToken(int ofKind)
- {
- switch(ofKind)
- {
- default : return new Token();
- }
- }
-
-}
diff --git a/apache/org/apache/james/mime4j/field/address/parser/TokenMgrError.java b/apache/org/apache/james/mime4j/field/address/parser/TokenMgrError.java
deleted file mode 100644
index 0299c8523..000000000
--- a/apache/org/apache/james/mime4j/field/address/parser/TokenMgrError.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 3.0 */
-/*
- * Copyright 2004 the mime4j project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.james.mime4j.field.address.parser;
-
-public class TokenMgrError extends Error
-{
- /*
- * Ordinals for various reasons why an Error of this type can be thrown.
- */
-
- /**
- * Lexical error occured.
- */
- static final int LEXICAL_ERROR = 0;
-
- /**
- * An attempt wass made to create a second instance of a static token manager.
- */
- static final int STATIC_LEXER_ERROR = 1;
-
- /**
- * Tried to change to an invalid lexical state.
- */
- static final int INVALID_LEXICAL_STATE = 2;
-
- /**
- * Detected (and bailed out of) an infinite loop in the token manager.
- */
- static final int LOOP_DETECTED = 3;
-
- /**
- * Indicates the reason why the exception is thrown. It will have
- * one of the above 4 values.
- */
- int errorCode;
-
- /**
- * Replaces unprintable characters by their espaced (or unicode escaped)
- * equivalents in the given string
- */
- protected static final String addEscapes(String str) {
- StringBuffer retval = new StringBuffer();
- char ch;
- for (int i = 0; i < str.length(); i++) {
- switch (str.charAt(i))
- {
- case 0 :
- continue;
- case '\b':
- retval.append("\\b");
- continue;
- case '\t':
- retval.append("\\t");
- continue;
- case '\n':
- retval.append("\\n");
- continue;
- case '\f':
- retval.append("\\f");
- continue;
- case '\r':
- retval.append("\\r");
- continue;
- case '\"':
- retval.append("\\\"");
- continue;
- case '\'':
- retval.append("\\\'");
- continue;
- case '\\':
- retval.append("\\\\");
- continue;
- default:
- if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
- String s = "0000" + Integer.toString(ch, 16);
- retval.append("\\u" + s.substring(s.length() - 4, s.length()));
- } else {
- retval.append(ch);
- }
- continue;
- }
- }
- return retval.toString();
- }
-
- /**
- * Returns a detailed message for the Error when it is thrown by the
- * token manager to indicate a lexical error.
- * Parameters :
- * EOFSeen : indicates if EOF caused the lexicl error
- * curLexState : lexical state in which this error occured
- * errorLine : line number when the error occured
- * errorColumn : column number when the error occured
- * errorAfter : prefix that was seen before this error occured
- * curchar : the offending character
- * Note: You can customize the lexical error message by modifying this method.
- */
- protected static String LexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar) {
- return("Lexical error at line " +
- errorLine + ", column " +
- errorColumn + ". Encountered: " +
- (EOFSeen ? "<EOF> " : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int)curChar + "), ") +
- "after : \"" + addEscapes(errorAfter) + "\"");
- }
-
- /**
- * You can also modify the body of this method to customize your error messages.
- * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not
- * of end-users concern, so you can return something like :
- *
- * "Internal Error : Please file a bug report .... "
- *
- * from this method for such cases in the release version of your parser.
- */
- public String getMessage() {
- return super.getMessage();
- }
-
- /*
- * Constructors of various flavors follow.
- */
-
- public TokenMgrError() {
- }
-
- public TokenMgrError(String message, int reason) {
- super(message);
- errorCode = reason;
- }
-
- public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar, int reason) {
- this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason);
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/contenttype/parser/ContentTypeParser.java b/apache/org/apache/james/mime4j/field/contenttype/parser/ContentTypeParser.java
deleted file mode 100644
index cacf3af21..000000000
--- a/apache/org/apache/james/mime4j/field/contenttype/parser/ContentTypeParser.java
+++ /dev/null
@@ -1,268 +0,0 @@
-/* Generated By:JavaCC: Do not edit this line. ContentTypeParser.java */
-/*
- * Copyright 2004 the mime4j project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.james.mime4j.field.contenttype.parser;
-
-import java.util.ArrayList;
-import java.util.Vector;
-
-public class ContentTypeParser implements ContentTypeParserConstants {
-
- private String type;
- private String subtype;
- private ArrayList<String> paramNames = new ArrayList<String>();
- private ArrayList<String> paramValues = new ArrayList<String>();
-
- public String getType() { return type; }
- public String getSubType() { return subtype; }
- public ArrayList<String> getParamNames() { return paramNames; }
- public ArrayList<String> getParamValues() { return paramValues; }
-
- public static void main(String args[]) throws ParseException {
- while (true) {
- try {
- ContentTypeParser parser = new ContentTypeParser(System.in);
- parser.parseLine();
- } catch (Exception x) {
- x.printStackTrace();
- return;
- }
- }
- }
-
- final public void parseLine() throws ParseException {
- parse();
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 1:
- jj_consume_token(1);
- break;
- default:
- jj_la1[0] = jj_gen;
- ;
- }
- jj_consume_token(2);
- }
-
- final public void parseAll() throws ParseException {
- parse();
- jj_consume_token(0);
- }
-
- final public void parse() throws ParseException {
- Token type;
- Token subtype;
- type = jj_consume_token(ATOKEN);
- jj_consume_token(3);
- subtype = jj_consume_token(ATOKEN);
- this.type = type.image;
- this.subtype = subtype.image;
- label_1:
- while (true) {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 4:
- ;
- break;
- default:
- jj_la1[1] = jj_gen;
- break label_1;
- }
- jj_consume_token(4);
- parameter();
- }
- }
-
- final public void parameter() throws ParseException {
- Token attrib;
- String val;
- attrib = jj_consume_token(ATOKEN);
- jj_consume_token(5);
- val = value();
- paramNames.add(attrib.image);
- paramValues.add(val);
- }
-
- final public String value() throws ParseException {
- Token t;
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case ATOKEN:
- t = jj_consume_token(ATOKEN);
- break;
- case QUOTEDSTRING:
- t = jj_consume_token(QUOTEDSTRING);
- break;
- default:
- jj_la1[2] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
- {if (true) return t.image;}
- throw new Error("Missing return statement in function");
- }
-
- public ContentTypeParserTokenManager token_source;
- SimpleCharStream jj_input_stream;
- public Token token, jj_nt;
- private int jj_ntk;
- private int jj_gen;
- final private int[] jj_la1 = new int[3];
- static private int[] jj_la1_0;
- static {
- jj_la1_0();
- }
- private static void jj_la1_0() {
- jj_la1_0 = new int[] {0x2,0x10,0x280000,};
- }
-
- public ContentTypeParser(java.io.InputStream stream) {
- this(stream, null);
- }
- public ContentTypeParser(java.io.InputStream stream, String encoding) {
- try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
- token_source = new ContentTypeParserTokenManager(jj_input_stream);
- token = new Token();
- jj_ntk = -1;
- jj_gen = 0;
- for (int i = 0; i < 3; i++) jj_la1[i] = -1;
- }
-
- public void ReInit(java.io.InputStream stream) {
- ReInit(stream, null);
- }
- public void ReInit(java.io.InputStream stream, String encoding) {
- try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
- token_source.ReInit(jj_input_stream);
- token = new Token();
- jj_ntk = -1;
- jj_gen = 0;
- for (int i = 0; i < 3; i++) jj_la1[i] = -1;
- }
-
- public ContentTypeParser(java.io.Reader stream) {
- jj_input_stream = new SimpleCharStream(stream, 1, 1);
- token_source = new ContentTypeParserTokenManager(jj_input_stream);
- token = new Token();
- jj_ntk = -1;
- jj_gen = 0;
- for (int i = 0; i < 3; i++) jj_la1[i] = -1;
- }
-
- public void ReInit(java.io.Reader stream) {
- jj_input_stream.ReInit(stream, 1, 1);
- token_source.ReInit(jj_input_stream);
- token = new Token();
- jj_ntk = -1;
- jj_gen = 0;
- for (int i = 0; i < 3; i++) jj_la1[i] = -1;
- }
-
- public ContentTypeParser(ContentTypeParserTokenManager tm) {
- token_source = tm;
- token = new Token();
- jj_ntk = -1;
- jj_gen = 0;
- for (int i = 0; i < 3; i++) jj_la1[i] = -1;
- }
-
- public void ReInit(ContentTypeParserTokenManager tm) {
- token_source = tm;
- token = new Token();
- jj_ntk = -1;
- jj_gen = 0;
- for (int i = 0; i < 3; i++) jj_la1[i] = -1;
- }
-
- final private Token jj_consume_token(int kind) throws ParseException {
- Token oldToken;
- if ((oldToken = token).next != null) token = token.next;
- else token = token.next = token_source.getNextToken();
- jj_ntk = -1;
- if (token.kind == kind) {
- jj_gen++;
- return token;
- }
- token = oldToken;
- jj_kind = kind;
- throw generateParseException();
- }
-
- final public Token getNextToken() {
- if (token.next != null) token = token.next;
- else token = token.next = token_source.getNextToken();
- jj_ntk = -1;
- jj_gen++;
- return token;
- }
-
- final public Token getToken(int index) {
- Token t = token;
- for (int i = 0; i < index; i++) {
- if (t.next != null) t = t.next;
- else t = t.next = token_source.getNextToken();
- }
- return t;
- }
-
- final private int jj_ntk() {
- if ((jj_nt=token.next) == null)
- return (jj_ntk = (token.next=token_source.getNextToken()).kind);
- else
- return (jj_ntk = jj_nt.kind);
- }
-
- private Vector<int[]> jj_expentries = new Vector<int[]>();
- private int[] jj_expentry;
- private int jj_kind = -1;
-
- public ParseException generateParseException() {
- jj_expentries.removeAllElements();
- boolean[] la1tokens = new boolean[24];
- for (int i = 0; i < 24; i++) {
- la1tokens[i] = false;
- }
- if (jj_kind >= 0) {
- la1tokens[jj_kind] = true;
- jj_kind = -1;
- }
- for (int i = 0; i < 3; i++) {
- if (jj_la1[i] == jj_gen) {
- for (int j = 0; j < 32; j++) {
- if ((jj_la1_0[i] & (1<<j)) != 0) {
- la1tokens[j] = true;
- }
- }
- }
- }
- for (int i = 0; i < 24; i++) {
- if (la1tokens[i]) {
- jj_expentry = new int[1];
- jj_expentry[0] = i;
- jj_expentries.addElement(jj_expentry);
- }
- }
- int[][] exptokseq = new int[jj_expentries.size()][];
- for (int i = 0; i < jj_expentries.size(); i++) {
- exptokseq[i] = jj_expentries.elementAt(i);
- }
- return new ParseException(token, exptokseq, tokenImage);
- }
-
- final public void enable_tracing() {
- }
-
- final public void disable_tracing() {
- }
-
-}
diff --git a/apache/org/apache/james/mime4j/field/contenttype/parser/ContentTypeParserConstants.java b/apache/org/apache/james/mime4j/field/contenttype/parser/ContentTypeParserConstants.java
deleted file mode 100644
index d933d800d..000000000
--- a/apache/org/apache/james/mime4j/field/contenttype/parser/ContentTypeParserConstants.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Generated By:JavaCC: Do not edit this line. ContentTypeParserConstants.java */
-/*
- * Copyright 2004 the mime4j project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.james.mime4j.field.contenttype.parser;
-
-public interface ContentTypeParserConstants {
-
- int EOF = 0;
- int WS = 6;
- int COMMENT = 8;
- int QUOTEDSTRING = 19;
- int DIGITS = 20;
- int ATOKEN = 21;
- int QUOTEDPAIR = 22;
- int ANY = 23;
-
- int DEFAULT = 0;
- int INCOMMENT = 1;
- int NESTED_COMMENT = 2;
- int INQUOTEDSTRING = 3;
-
- String[] tokenImage = {
- "<EOF>",
- "\"\\r\"",
- "\"\\n\"",
- "\"/\"",
- "\";\"",
- "\"=\"",
- "<WS>",
- "\"(\"",
- "\")\"",
- "<token of kind 9>",
- "\"(\"",
- "<token of kind 11>",
- "<token of kind 12>",
- "\"(\"",
- "\")\"",
- "<token of kind 15>",
- "\"\\\"\"",
- "<token of kind 17>",
- "<token of kind 18>",
- "\"\\\"\"",
- "<DIGITS>",
- "<ATOKEN>",
- "<QUOTEDPAIR>",
- "<ANY>",
- };
-
-}
diff --git a/apache/org/apache/james/mime4j/field/contenttype/parser/ContentTypeParserTokenManager.java b/apache/org/apache/james/mime4j/field/contenttype/parser/ContentTypeParserTokenManager.java
deleted file mode 100644
index 25b7abafa..000000000
--- a/apache/org/apache/james/mime4j/field/contenttype/parser/ContentTypeParserTokenManager.java
+++ /dev/null
@@ -1,877 +0,0 @@
-/* Generated By:JavaCC: Do not edit this line. ContentTypeParserTokenManager.java */
-/*
- * Copyright 2004 the mime4j project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.james.mime4j.field.contenttype.parser;
-import java.util.ArrayList;
-
-public class ContentTypeParserTokenManager implements ContentTypeParserConstants
-{
- // Keeps track of how many levels of comment nesting
- // we've encountered. This is only used when the 2nd
- // level is reached, for example ((this)), not (this).
- // This is because the outermost level must be treated
- // specially anyway, because the outermost ")" has a
- // different token type than inner ")" instances.
- static int commentNest;
- public java.io.PrintStream debugStream = System.out;
- public void setDebugStream(java.io.PrintStream ds) { debugStream = ds; }
-private final int jjStopStringLiteralDfa_0(int pos, long active0)
-{
- switch (pos)
- {
- default :
- return -1;
- }
-}
-private final int jjStartNfa_0(int pos, long active0)
-{
- return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0), pos + 1);
-}
-private final int jjStopAtPos(int pos, int kind)
-{
- jjmatchedKind = kind;
- jjmatchedPos = pos;
- return pos + 1;
-}
-private final int jjStartNfaWithStates_0(int pos, int kind, int state)
-{
- jjmatchedKind = kind;
- jjmatchedPos = pos;
- try { curChar = input_stream.readChar(); }
- catch(java.io.IOException e) { return pos + 1; }
- return jjMoveNfa_0(state, pos + 1);
-}
-private final int jjMoveStringLiteralDfa0_0()
-{
- switch(curChar)
- {
- case 10:
- return jjStartNfaWithStates_0(0, 2, 2);
- case 13:
- return jjStartNfaWithStates_0(0, 1, 2);
- case 34:
- return jjStopAtPos(0, 16);
- case 40:
- return jjStopAtPos(0, 7);
- case 47:
- return jjStopAtPos(0, 3);
- case 59:
- return jjStopAtPos(0, 4);
- case 61:
- return jjStopAtPos(0, 5);
- default :
- return jjMoveNfa_0(3, 0);
- }
-}
-private final void jjCheckNAdd(int state)
-{
- if (jjrounds[state] != jjround)
- {
- jjstateSet[jjnewStateCnt++] = state;
- jjrounds[state] = jjround;
- }
-}
-private final void jjAddStates(int start, int end)
-{
- do {
- jjstateSet[jjnewStateCnt++] = jjnextStates[start];
- } while (start++ != end);
-}
-private final void jjCheckNAddTwoStates(int state1, int state2)
-{
- jjCheckNAdd(state1);
- jjCheckNAdd(state2);
-}
-private final void jjCheckNAddStates(int start, int end)
-{
- do {
- jjCheckNAdd(jjnextStates[start]);
- } while (start++ != end);
-}
-private final void jjCheckNAddStates(int start)
-{
- jjCheckNAdd(jjnextStates[start]);
- jjCheckNAdd(jjnextStates[start + 1]);
-}
-static final long[] jjbitVec0 = {
- 0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
-};
-private final int jjMoveNfa_0(int startState, int curPos)
-{
- int[] nextStates;
- int startsAt = 0;
- jjnewStateCnt = 3;
- int i = 1;
- jjstateSet[0] = startState;
- int j, kind = 0x7fffffff;
- for (;;)
- {
- if (++jjround == 0x7fffffff)
- ReInitRounds();
- if (curChar < 64)
- {
- long l = 1L << curChar;
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 3:
- if ((0x3ff6cfafffffdffL & l) != 0L)
- {
- if (kind > 21)
- kind = 21;
- jjCheckNAdd(2);
- }
- else if ((0x100000200L & l) != 0L)
- {
- if (kind > 6)
- kind = 6;
- jjCheckNAdd(0);
- }
- if ((0x3ff000000000000L & l) != 0L)
- {
- if (kind > 20)
- kind = 20;
- jjCheckNAdd(1);
- }
- break;
- case 0:
- if ((0x100000200L & l) == 0L)
- break;
- kind = 6;
- jjCheckNAdd(0);
- break;
- case 1:
- if ((0x3ff000000000000L & l) == 0L)
- break;
- if (kind > 20)
- kind = 20;
- jjCheckNAdd(1);
- break;
- case 2:
- if ((0x3ff6cfafffffdffL & l) == 0L)
- break;
- if (kind > 21)
- kind = 21;
- jjCheckNAdd(2);
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- else if (curChar < 128)
- {
- long l = 1L << (curChar & 077);
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 3:
- case 2:
- if ((0xffffffffc7fffffeL & l) == 0L)
- break;
- kind = 21;
- jjCheckNAdd(2);
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- else
- {
- int i2 = (curChar & 0xff) >> 6;
- long l2 = 1L << (curChar & 077);
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 3:
- case 2:
- if ((jjbitVec0[i2] & l2) == 0L)
- break;
- if (kind > 21)
- kind = 21;
- jjCheckNAdd(2);
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- if (kind != 0x7fffffff)
- {
- jjmatchedKind = kind;
- jjmatchedPos = curPos;
- kind = 0x7fffffff;
- }
- ++curPos;
- if ((i = jjnewStateCnt) == (startsAt = 3 - (jjnewStateCnt = startsAt)))
- return curPos;
- try { curChar = input_stream.readChar(); }
- catch(java.io.IOException e) { return curPos; }
- }
-}
-private final int jjStopStringLiteralDfa_1(int pos, long active0)
-{
- switch (pos)
- {
- default :
- return -1;
- }
-}
-private final int jjStartNfa_1(int pos, long active0)
-{
- return jjMoveNfa_1(jjStopStringLiteralDfa_1(pos, active0), pos + 1);
-}
-private final int jjStartNfaWithStates_1(int pos, int kind, int state)
-{
- jjmatchedKind = kind;
- jjmatchedPos = pos;
- try { curChar = input_stream.readChar(); }
- catch(java.io.IOException e) { return pos + 1; }
- return jjMoveNfa_1(state, pos + 1);
-}
-private final int jjMoveStringLiteralDfa0_1()
-{
- switch(curChar)
- {
- case 40:
- return jjStopAtPos(0, 10);
- case 41:
- return jjStopAtPos(0, 8);
- default :
- return jjMoveNfa_1(0, 0);
- }
-}
-private final int jjMoveNfa_1(int startState, int curPos)
-{
- int[] nextStates;
- int startsAt = 0;
- jjnewStateCnt = 3;
- int i = 1;
- jjstateSet[0] = startState;
- int j, kind = 0x7fffffff;
- for (;;)
- {
- if (++jjround == 0x7fffffff)
- ReInitRounds();
- if (curChar < 64)
- {
- long l = 1L << curChar;
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- if (kind > 11)
- kind = 11;
- break;
- case 1:
- if (kind > 9)
- kind = 9;
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- else if (curChar < 128)
- {
- long l = 1L << (curChar & 077);
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- if (kind > 11)
- kind = 11;
- if (curChar == 92)
- jjstateSet[jjnewStateCnt++] = 1;
- break;
- case 1:
- if (kind > 9)
- kind = 9;
- break;
- case 2:
- if (kind > 11)
- kind = 11;
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- else
- {
- int i2 = (curChar & 0xff) >> 6;
- long l2 = 1L << (curChar & 077);
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- if ((jjbitVec0[i2] & l2) != 0L && kind > 11)
- kind = 11;
- break;
- case 1:
- if ((jjbitVec0[i2] & l2) != 0L && kind > 9)
- kind = 9;
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- if (kind != 0x7fffffff)
- {
- jjmatchedKind = kind;
- jjmatchedPos = curPos;
- kind = 0x7fffffff;
- }
- ++curPos;
- if ((i = jjnewStateCnt) == (startsAt = 3 - (jjnewStateCnt = startsAt)))
- return curPos;
- try { curChar = input_stream.readChar(); }
- catch(java.io.IOException e) { return curPos; }
- }
-}
-private final int jjStopStringLiteralDfa_3(int pos, long active0)
-{
- switch (pos)
- {
- default :
- return -1;
- }
-}
-private final int jjStartNfa_3(int pos, long active0)
-{
- return jjMoveNfa_3(jjStopStringLiteralDfa_3(pos, active0), pos + 1);
-}
-private final int jjStartNfaWithStates_3(int pos, int kind, int state)
-{
- jjmatchedKind = kind;
- jjmatchedPos = pos;
- try { curChar = input_stream.readChar(); }
- catch(java.io.IOException e) { return pos + 1; }
- return jjMoveNfa_3(state, pos + 1);
-}
-private final int jjMoveStringLiteralDfa0_3()
-{
- switch(curChar)
- {
- case 34:
- return jjStopAtPos(0, 19);
- default :
- return jjMoveNfa_3(0, 0);
- }
-}
-private final int jjMoveNfa_3(int startState, int curPos)
-{
- int[] nextStates;
- int startsAt = 0;
- jjnewStateCnt = 3;
- int i = 1;
- jjstateSet[0] = startState;
- int j, kind = 0x7fffffff;
- for (;;)
- {
- if (++jjround == 0x7fffffff)
- ReInitRounds();
- if (curChar < 64)
- {
- long l = 1L << curChar;
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- case 2:
- if ((0xfffffffbffffffffL & l) == 0L)
- break;
- if (kind > 18)
- kind = 18;
- jjCheckNAdd(2);
- break;
- case 1:
- if (kind > 17)
- kind = 17;
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- else if (curChar < 128)
- {
- long l = 1L << (curChar & 077);
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- if ((0xffffffffefffffffL & l) != 0L)
- {
- if (kind > 18)
- kind = 18;
- jjCheckNAdd(2);
- }
- else if (curChar == 92)
- jjstateSet[jjnewStateCnt++] = 1;
- break;
- case 1:
- if (kind > 17)
- kind = 17;
- break;
- case 2:
- if ((0xffffffffefffffffL & l) == 0L)
- break;
- if (kind > 18)
- kind = 18;
- jjCheckNAdd(2);
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- else
- {
- int i2 = (curChar & 0xff) >> 6;
- long l2 = 1L << (curChar & 077);
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- case 2:
- if ((jjbitVec0[i2] & l2) == 0L)
- break;
- if (kind > 18)
- kind = 18;
- jjCheckNAdd(2);
- break;
- case 1:
- if ((jjbitVec0[i2] & l2) != 0L && kind > 17)
- kind = 17;
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- if (kind != 0x7fffffff)
- {
- jjmatchedKind = kind;
- jjmatchedPos = curPos;
- kind = 0x7fffffff;
- }
- ++curPos;
- if ((i = jjnewStateCnt) == (startsAt = 3 - (jjnewStateCnt = startsAt)))
- return curPos;
- try { curChar = input_stream.readChar(); }
- catch(java.io.IOException e) { return curPos; }
- }
-}
-private final int jjStopStringLiteralDfa_2(int pos, long active0)
-{
- switch (pos)
- {
- default :
- return -1;
- }
-}
-private final int jjStartNfa_2(int pos, long active0)
-{
- return jjMoveNfa_2(jjStopStringLiteralDfa_2(pos, active0), pos + 1);
-}
-private final int jjStartNfaWithStates_2(int pos, int kind, int state)
-{
- jjmatchedKind = kind;
- jjmatchedPos = pos;
- try { curChar = input_stream.readChar(); }
- catch(java.io.IOException e) { return pos + 1; }
- return jjMoveNfa_2(state, pos + 1);
-}
-private final int jjMoveStringLiteralDfa0_2()
-{
- switch(curChar)
- {
- case 40:
- return jjStopAtPos(0, 13);
- case 41:
- return jjStopAtPos(0, 14);
- default :
- return jjMoveNfa_2(0, 0);
- }
-}
-private final int jjMoveNfa_2(int startState, int curPos)
-{
- int[] nextStates;
- int startsAt = 0;
- jjnewStateCnt = 3;
- int i = 1;
- jjstateSet[0] = startState;
- int j, kind = 0x7fffffff;
- for (;;)
- {
- if (++jjround == 0x7fffffff)
- ReInitRounds();
- if (curChar < 64)
- {
- long l = 1L << curChar;
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- if (kind > 15)
- kind = 15;
- break;
- case 1:
- if (kind > 12)
- kind = 12;
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- else if (curChar < 128)
- {
- long l = 1L << (curChar & 077);
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- if (kind > 15)
- kind = 15;
- if (curChar == 92)
- jjstateSet[jjnewStateCnt++] = 1;
- break;
- case 1:
- if (kind > 12)
- kind = 12;
- break;
- case 2:
- if (kind > 15)
- kind = 15;
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- else
- {
- int i2 = (curChar & 0xff) >> 6;
- long l2 = 1L << (curChar & 077);
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- if ((jjbitVec0[i2] & l2) != 0L && kind > 15)
- kind = 15;
- break;
- case 1:
- if ((jjbitVec0[i2] & l2) != 0L && kind > 12)
- kind = 12;
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- if (kind != 0x7fffffff)
- {
- jjmatchedKind = kind;
- jjmatchedPos = curPos;
- kind = 0x7fffffff;
- }
- ++curPos;
- if ((i = jjnewStateCnt) == (startsAt = 3 - (jjnewStateCnt = startsAt)))
- return curPos;
- try { curChar = input_stream.readChar(); }
- catch(java.io.IOException e) { return curPos; }
- }
-}
-static final int[] jjnextStates = {
-};
-public static final String[] jjstrLiteralImages = {
-"", "\15", "\12", "\57", "\73", "\75", null, null, null, null, null, null,
-null, null, null, null, null, null, null, null, null, null, null, null, };
-public static final String[] lexStateNames = {
- "DEFAULT",
- "INCOMMENT",
- "NESTED_COMMENT",
- "INQUOTEDSTRING",
-};
-public static final int[] jjnewLexState = {
- -1, -1, -1, -1, -1, -1, -1, 1, 0, -1, 2, -1, -1, -1, -1, -1, 3, -1, -1, 0, -1, -1, -1, -1,
-};
-static final long[] jjtoToken = {
- 0x38003fL,
-};
-static final long[] jjtoSkip = {
- 0x140L,
-};
-static final long[] jjtoSpecial = {
- 0x40L,
-};
-static final long[] jjtoMore = {
- 0x7fe80L,
-};
-protected SimpleCharStream input_stream;
-private final int[] jjrounds = new int[3];
-private final int[] jjstateSet = new int[6];
-StringBuffer image;
-int jjimageLen;
-int lengthOfMatch;
-protected char curChar;
-public ContentTypeParserTokenManager(SimpleCharStream stream){
- if (SimpleCharStream.staticFlag)
- throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
- input_stream = stream;
-}
-public ContentTypeParserTokenManager(SimpleCharStream stream, int lexState){
- this(stream);
- SwitchTo(lexState);
-}
-public void ReInit(SimpleCharStream stream)
-{
- jjmatchedPos = jjnewStateCnt = 0;
- curLexState = defaultLexState;
- input_stream = stream;
- ReInitRounds();
-}
-private final void ReInitRounds()
-{
- int i;
- jjround = 0x80000001;
- for (i = 3; i-- > 0;)
- jjrounds[i] = 0x80000000;
-}
-public void ReInit(SimpleCharStream stream, int lexState)
-{
- ReInit(stream);
- SwitchTo(lexState);
-}
-public void SwitchTo(int lexState)
-{
- if (lexState >= 4 || lexState < 0)
- throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
- else
- curLexState = lexState;
-}
-
-protected Token jjFillToken()
-{
- Token t = Token.newToken(jjmatchedKind);
- t.kind = jjmatchedKind;
- String im = jjstrLiteralImages[jjmatchedKind];
- t.image = (im == null) ? input_stream.GetImage() : im;
- t.beginLine = input_stream.getBeginLine();
- t.beginColumn = input_stream.getBeginColumn();
- t.endLine = input_stream.getEndLine();
- t.endColumn = input_stream.getEndColumn();
- return t;
-}
-
-int curLexState = 0;
-int defaultLexState = 0;
-int jjnewStateCnt;
-int jjround;
-int jjmatchedPos;
-int jjmatchedKind;
-
-public Token getNextToken()
-{
- int kind;
- Token specialToken = null;
- Token matchedToken;
- int curPos = 0;
-
- EOFLoop :
- for (;;)
- {
- try
- {
- curChar = input_stream.BeginToken();
- }
- catch(java.io.IOException e)
- {
- jjmatchedKind = 0;
- matchedToken = jjFillToken();
- matchedToken.specialToken = specialToken;
- return matchedToken;
- }
- image = null;
- jjimageLen = 0;
-
- for (;;)
- {
- switch(curLexState)
- {
- case 0:
- jjmatchedKind = 0x7fffffff;
- jjmatchedPos = 0;
- curPos = jjMoveStringLiteralDfa0_0();
- break;
- case 1:
- jjmatchedKind = 0x7fffffff;
- jjmatchedPos = 0;
- curPos = jjMoveStringLiteralDfa0_1();
- break;
- case 2:
- jjmatchedKind = 0x7fffffff;
- jjmatchedPos = 0;
- curPos = jjMoveStringLiteralDfa0_2();
- break;
- case 3:
- jjmatchedKind = 0x7fffffff;
- jjmatchedPos = 0;
- curPos = jjMoveStringLiteralDfa0_3();
- break;
- }
- if (jjmatchedKind != 0x7fffffff)
- {
- if (jjmatchedPos + 1 < curPos)
- input_stream.backup(curPos - jjmatchedPos - 1);
- if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
- {
- matchedToken = jjFillToken();
- matchedToken.specialToken = specialToken;
- TokenLexicalActions(matchedToken);
- if (jjnewLexState[jjmatchedKind] != -1)
- curLexState = jjnewLexState[jjmatchedKind];
- return matchedToken;
- }
- else if ((jjtoSkip[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
- {
- if ((jjtoSpecial[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
- {
- matchedToken = jjFillToken();
- if (specialToken == null)
- specialToken = matchedToken;
- else
- {
- matchedToken.specialToken = specialToken;
- specialToken = (specialToken.next = matchedToken);
- }
- }
- if (jjnewLexState[jjmatchedKind] != -1)
- curLexState = jjnewLexState[jjmatchedKind];
- continue EOFLoop;
- }
- MoreLexicalActions();
- if (jjnewLexState[jjmatchedKind] != -1)
- curLexState = jjnewLexState[jjmatchedKind];
- curPos = 0;
- jjmatchedKind = 0x7fffffff;
- try {
- curChar = input_stream.readChar();
- continue;
- }
- catch (java.io.IOException e1) { }
- }
- int error_line = input_stream.getEndLine();
- int error_column = input_stream.getEndColumn();
- String error_after = null;
- boolean EOFSeen = false;
- try { input_stream.readChar(); input_stream.backup(1); }
- catch (java.io.IOException e1) {
- EOFSeen = true;
- error_after = curPos <= 1 ? "" : input_stream.GetImage();
- if (curChar == '\n' || curChar == '\r') {
- error_line++;
- error_column = 0;
- }
- else
- error_column++;
- }
- if (!EOFSeen) {
- input_stream.backup(1);
- error_after = curPos <= 1 ? "" : input_stream.GetImage();
- }
- throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR);
- }
- }
-}
-
-void MoreLexicalActions()
-{
- jjimageLen += (lengthOfMatch = jjmatchedPos + 1);
- switch(jjmatchedKind)
- {
- case 9 :
- if (image == null)
- image = new StringBuffer();
- image.append(input_stream.GetSuffix(jjimageLen));
- jjimageLen = 0;
- image.deleteCharAt(image.length() - 2);
- break;
- case 10 :
- if (image == null)
- image = new StringBuffer();
- image.append(input_stream.GetSuffix(jjimageLen));
- jjimageLen = 0;
- commentNest = 1;
- break;
- case 12 :
- if (image == null)
- image = new StringBuffer();
- image.append(input_stream.GetSuffix(jjimageLen));
- jjimageLen = 0;
- image.deleteCharAt(image.length() - 2);
- break;
- case 13 :
- if (image == null)
- image = new StringBuffer();
- image.append(input_stream.GetSuffix(jjimageLen));
- jjimageLen = 0;
- ++commentNest;
- break;
- case 14 :
- if (image == null)
- image = new StringBuffer();
- image.append(input_stream.GetSuffix(jjimageLen));
- jjimageLen = 0;
- --commentNest; if (commentNest == 0) SwitchTo(INCOMMENT);
- break;
- case 16 :
- if (image == null)
- image = new StringBuffer();
- image.append(input_stream.GetSuffix(jjimageLen));
- jjimageLen = 0;
- image.deleteCharAt(image.length() - 1);
- break;
- case 17 :
- if (image == null)
- image = new StringBuffer();
- image.append(input_stream.GetSuffix(jjimageLen));
- jjimageLen = 0;
- image.deleteCharAt(image.length() - 2);
- break;
- default :
- break;
- }
-}
-void TokenLexicalActions(Token matchedToken)
-{
- switch(jjmatchedKind)
- {
- case 19 :
- if (image == null)
- image = new StringBuffer();
- image.append(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
- matchedToken.image = image.substring(0, image.length() - 1);
- break;
- default :
- break;
- }
-}
-}
diff --git a/apache/org/apache/james/mime4j/field/contenttype/parser/ParseException.java b/apache/org/apache/james/mime4j/field/contenttype/parser/ParseException.java
deleted file mode 100644
index d9b69b25c..000000000
--- a/apache/org/apache/james/mime4j/field/contenttype/parser/ParseException.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/* Generated By:JavaCC: Do not edit this line. ParseException.java Version 3.0 */
-/*
- * Copyright 2004 the mime4j project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.james.mime4j.field.contenttype.parser;
-
-/**
- * This exception is thrown when parse errors are encountered.
- * You can explicitly create objects of this exception type by
- * calling the method generateParseException in the generated
- * parser.
- *
- * You can modify this class to customize your error reporting
- * mechanisms so long as you retain the public fields.
- */
-public class ParseException extends Exception {
-
- /**
- * This constructor is used by the method "generateParseException"
- * in the generated parser. Calling this constructor generates
- * a new object of this type with the fields "currentToken",
- * "expectedTokenSequences", and "tokenImage" set. The boolean
- * flag "specialConstructor" is also set to true to indicate that
- * this constructor was used to create this object.
- * This constructor calls its super class with the empty string
- * to force the "toString" method of parent class "Throwable" to
- * print the error message in the form:
- * ParseException: <result of getMessage>
- */
- public ParseException(Token currentTokenVal,
- int[][] expectedTokenSequencesVal,
- String[] tokenImageVal
- )
- {
- super("");
- specialConstructor = true;
- currentToken = currentTokenVal;
- expectedTokenSequences = expectedTokenSequencesVal;
- tokenImage = tokenImageVal;
- }
-
- /**
- * The following constructors are for use by you for whatever
- * purpose you can think of. Constructing the exception in this
- * manner makes the exception behave in the normal way - i.e., as
- * documented in the class "Throwable". The fields "errorToken",
- * "expectedTokenSequences", and "tokenImage" do not contain
- * relevant information. The JavaCC generated code does not use
- * these constructors.
- */
-
- public ParseException() {
- super();
- specialConstructor = false;
- }
-
- public ParseException(String message) {
- super(message);
- specialConstructor = false;
- }
-
- /**
- * This variable determines which constructor was used to create
- * this object and thereby affects the semantics of the
- * "getMessage" method (see below).
- */
- protected boolean specialConstructor;
-
- /**
- * This is the last token that has been consumed successfully. If
- * this object has been created due to a parse error, the token
- * followng this token will (therefore) be the first error token.
- */
- public Token currentToken;
-
- /**
- * Each entry in this array is an array of integers. Each array
- * of integers represents a sequence of tokens (by their ordinal
- * values) that is expected at this point of the parse.
- */
- public int[][] expectedTokenSequences;
-
- /**
- * This is a reference to the "tokenImage" array of the generated
- * parser within which the parse error occurred. This array is
- * defined in the generated ...Constants interface.
- */
- public String[] tokenImage;
-
- /**
- * This method has the standard behavior when this object has been
- * created using the standard constructors. Otherwise, it uses
- * "currentToken" and "expectedTokenSequences" to generate a parse
- * error message and returns it. If this object has been created
- * due to a parse error, and you do not catch it (it gets thrown
- * from the parser), then this method is called during the printing
- * of the final stack trace, and hence the correct error message
- * gets displayed.
- */
- public String getMessage() {
- if (!specialConstructor) {
- return super.getMessage();
- }
- StringBuffer expected = new StringBuffer();
- int maxSize = 0;
- for (int i = 0; i < expectedTokenSequences.length; i++) {
- if (maxSize < expectedTokenSequences[i].length) {
- maxSize = expectedTokenSequences[i].length;
- }
- for (int j = 0; j < expectedTokenSequences[i].length; j++) {
- expected.append(tokenImage[expectedTokenSequences[i][j]]).append(" ");
- }
- if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) {
- expected.append("...");
- }
- expected.append(eol).append(" ");
- }
- String retval = "Encountered \"";
- Token tok = currentToken.next;
- for (int i = 0; i < maxSize; i++) {
- if (i != 0) retval += " ";
- if (tok.kind == 0) {
- retval += tokenImage[0];
- break;
- }
- retval += add_escapes(tok.image);
- tok = tok.next;
- }
- retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn;
- retval += "." + eol;
- if (expectedTokenSequences.length == 1) {
- retval += "Was expecting:" + eol + " ";
- } else {
- retval += "Was expecting one of:" + eol + " ";
- }
- retval += expected.toString();
- return retval;
- }
-
- /**
- * The end of line string for this machine.
- */
- protected String eol = System.getProperty("line.separator", "\n");
-
- /**
- * Used to convert raw characters to their escaped version
- * when these raw version cannot be used as part of an ASCII
- * string literal.
- */
- protected String add_escapes(String str) {
- StringBuffer retval = new StringBuffer();
- char ch;
- for (int i = 0; i < str.length(); i++) {
- switch (str.charAt(i))
- {
- case 0 :
- continue;
- case '\b':
- retval.append("\\b");
- continue;
- case '\t':
- retval.append("\\t");
- continue;
- case '\n':
- retval.append("\\n");
- continue;
- case '\f':
- retval.append("\\f");
- continue;
- case '\r':
- retval.append("\\r");
- continue;
- case '\"':
- retval.append("\\\"");
- continue;
- case '\'':
- retval.append("\\\'");
- continue;
- case '\\':
- retval.append("\\\\");
- continue;
- default:
- if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
- String s = "0000" + Integer.toString(ch, 16);
- retval.append("\\u" + s.substring(s.length() - 4, s.length()));
- } else {
- retval.append(ch);
- }
- continue;
- }
- }
- return retval.toString();
- }
-
-}
diff --git a/apache/org/apache/james/mime4j/field/contenttype/parser/SimpleCharStream.java b/apache/org/apache/james/mime4j/field/contenttype/parser/SimpleCharStream.java
deleted file mode 100644
index ae035b717..000000000
--- a/apache/org/apache/james/mime4j/field/contenttype/parser/SimpleCharStream.java
+++ /dev/null
@@ -1,454 +0,0 @@
-/* Generated By:JavaCC: Do not edit this line. SimpleCharStream.java Version 4.0 */
-/*
- * Copyright 2004 the mime4j project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.james.mime4j.field.contenttype.parser;
-
-/**
- * An implementation of interface CharStream, where the stream is assumed to
- * contain only ASCII characters (without unicode processing).
- */
-
-public class SimpleCharStream
-{
- public static final boolean staticFlag = false;
- int bufsize;
- int available;
- int tokenBegin;
- public int bufpos = -1;
- protected int bufline[];
- protected int bufcolumn[];
-
- protected int column = 0;
- protected int line = 1;
-
- protected boolean prevCharIsCR = false;
- protected boolean prevCharIsLF = false;
-
- protected java.io.Reader inputStream;
-
- protected char[] buffer;
- protected int maxNextCharInd = 0;
- protected int inBuf = 0;
- protected int tabSize = 8;
-
- protected void setTabSize(int i) { tabSize = i; }
- protected int getTabSize(int i) { return tabSize; }
-
-
- protected void ExpandBuff(boolean wrapAround)
- {
- char[] newbuffer = new char[bufsize + 2048];
- int newbufline[] = new int[bufsize + 2048];
- int newbufcolumn[] = new int[bufsize + 2048];
-
- try
- {
- if (wrapAround)
- {
- System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
- System.arraycopy(buffer, 0, newbuffer,
- bufsize - tokenBegin, bufpos);
- buffer = newbuffer;
-
- System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
- System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
- bufline = newbufline;
-
- System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
- System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
- bufcolumn = newbufcolumn;
-
- maxNextCharInd = (bufpos += (bufsize - tokenBegin));
- }
- else
- {
- System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
- buffer = newbuffer;
-
- System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
- bufline = newbufline;
-
- System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
- bufcolumn = newbufcolumn;
-
- maxNextCharInd = (bufpos -= tokenBegin);
- }
- }
- catch (Throwable t)
- {
- throw new Error(t.getMessage());
- }
-
-
- bufsize += 2048;
- available = bufsize;
- tokenBegin = 0;
- }
-
- protected void FillBuff() throws java.io.IOException
- {
- if (maxNextCharInd == available)
- {
- if (available == bufsize)
- {
- if (tokenBegin > 2048)
- {
- bufpos = maxNextCharInd = 0;
- available = tokenBegin;
- }
- else if (tokenBegin < 0)
- bufpos = maxNextCharInd = 0;
- else
- ExpandBuff(false);
- }
- else if (available > tokenBegin)
- available = bufsize;
- else if ((tokenBegin - available) < 2048)
- ExpandBuff(true);
- else
- available = tokenBegin;
- }
-
- int i;
- try {
- if ((i = inputStream.read(buffer, maxNextCharInd,
- available - maxNextCharInd)) == -1)
- {
- inputStream.close();
- throw new java.io.IOException();
- }
- else
- maxNextCharInd += i;
- return;
- }
- catch(java.io.IOException e) {
- --bufpos;
- backup(0);
- if (tokenBegin == -1)
- tokenBegin = bufpos;
- throw e;
- }
- }
-
- public char BeginToken() throws java.io.IOException
- {
- tokenBegin = -1;
- char c = readChar();
- tokenBegin = bufpos;
-
- return c;
- }
-
- protected void UpdateLineColumn(char c)
- {
- column++;
-
- if (prevCharIsLF)
- {
- prevCharIsLF = false;
- line += (column = 1);
- }
- else if (prevCharIsCR)
- {
- prevCharIsCR = false;
- if (c == '\n')
- {
- prevCharIsLF = true;
- }
- else
- line += (column = 1);
- }
-
- switch (c)
- {
- case '\r' :
- prevCharIsCR = true;
- break;
- case '\n' :
- prevCharIsLF = true;
- break;
- case '\t' :
- column--;
- column += (tabSize - (column % tabSize));
- break;
- default :
- break;
- }
-
- bufline[bufpos] = line;
- bufcolumn[bufpos] = column;
- }
-
- public char readChar() throws java.io.IOException
- {
- if (inBuf > 0)
- {
- --inBuf;
-
- if (++bufpos == bufsize)
- bufpos = 0;
-
- return buffer[bufpos];
- }
-
- if (++bufpos >= maxNextCharInd)
- FillBuff();
-
- char c = buffer[bufpos];
-
- UpdateLineColumn(c);
- return (c);
- }
-
- /**
- * @deprecated
- * @see #getEndColumn
- */
- @Deprecated
- public int getColumn() {
- return bufcolumn[bufpos];
- }
-
- /**
- * @deprecated
- * @see #getEndLine
- */
- @Deprecated
- public int getLine() {
- return bufline[bufpos];
- }
-
- public int getEndColumn() {
- return bufcolumn[bufpos];
- }
-
- public int getEndLine() {
- return bufline[bufpos];
- }
-
- public int getBeginColumn() {
- return bufcolumn[tokenBegin];
- }
-
- public int getBeginLine() {
- return bufline[tokenBegin];
- }
-
- public void backup(int amount) {
-
- inBuf += amount;
- if ((bufpos -= amount) < 0)
- bufpos += bufsize;
- }
-
- public SimpleCharStream(java.io.Reader dstream, int startline,
- int startcolumn, int buffersize)
- {
- inputStream = dstream;
- line = startline;
- column = startcolumn - 1;
-
- available = bufsize = buffersize;
- buffer = new char[buffersize];
- bufline = new int[buffersize];
- bufcolumn = new int[buffersize];
- }
-
- public SimpleCharStream(java.io.Reader dstream, int startline,
- int startcolumn)
- {
- this(dstream, startline, startcolumn, 4096);
- }
-
- public SimpleCharStream(java.io.Reader dstream)
- {
- this(dstream, 1, 1, 4096);
- }
- public void ReInit(java.io.Reader dstream, int startline,
- int startcolumn, int buffersize)
- {
- inputStream = dstream;
- line = startline;
- column = startcolumn - 1;
-
- if (buffer == null || buffersize != buffer.length)
- {
- available = bufsize = buffersize;
- buffer = new char[buffersize];
- bufline = new int[buffersize];
- bufcolumn = new int[buffersize];
- }
- prevCharIsLF = prevCharIsCR = false;
- tokenBegin = inBuf = maxNextCharInd = 0;
- bufpos = -1;
- }
-
- public void ReInit(java.io.Reader dstream, int startline,
- int startcolumn)
- {
- ReInit(dstream, startline, startcolumn, 4096);
- }
-
- public void ReInit(java.io.Reader dstream)
- {
- ReInit(dstream, 1, 1, 4096);
- }
- public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,
- int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
- {
- this(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
- }
-
- public SimpleCharStream(java.io.InputStream dstream, int startline,
- int startcolumn, int buffersize)
- {
- this(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
- }
-
- public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,
- int startcolumn) throws java.io.UnsupportedEncodingException
- {
- this(dstream, encoding, startline, startcolumn, 4096);
- }
-
- public SimpleCharStream(java.io.InputStream dstream, int startline,
- int startcolumn)
- {
- this(dstream, startline, startcolumn, 4096);
- }
-
- public SimpleCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
- {
- this(dstream, encoding, 1, 1, 4096);
- }
-
- public SimpleCharStream(java.io.InputStream dstream)
- {
- this(dstream, 1, 1, 4096);
- }
-
- public void ReInit(java.io.InputStream dstream, String encoding, int startline,
- int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
- {
- ReInit(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
- }
-
- public void ReInit(java.io.InputStream dstream, int startline,
- int startcolumn, int buffersize)
- {
- ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
- }
-
- public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
- {
- ReInit(dstream, encoding, 1, 1, 4096);
- }
-
- public void ReInit(java.io.InputStream dstream)
- {
- ReInit(dstream, 1, 1, 4096);
- }
- public void ReInit(java.io.InputStream dstream, String encoding, int startline,
- int startcolumn) throws java.io.UnsupportedEncodingException
- {
- ReInit(dstream, encoding, startline, startcolumn, 4096);
- }
- public void ReInit(java.io.InputStream dstream, int startline,
- int startcolumn)
- {
- ReInit(dstream, startline, startcolumn, 4096);
- }
- public String GetImage()
- {
- if (bufpos >= tokenBegin)
- return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
- else
- return new String(buffer, tokenBegin, bufsize - tokenBegin) +
- new String(buffer, 0, bufpos + 1);
- }
-
- public char[] GetSuffix(int len)
- {
- char[] ret = new char[len];
-
- if ((bufpos + 1) >= len)
- System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);
- else
- {
- System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,
- len - bufpos - 1);
- System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);
- }
-
- return ret;
- }
-
- public void Done()
- {
- buffer = null;
- bufline = null;
- bufcolumn = null;
- }
-
- /**
- * Method to adjust line and column numbers for the start of a token.
- */
- public void adjustBeginLineColumn(int newLine, int newCol)
- {
- int start = tokenBegin;
- int len;
-
- if (bufpos >= tokenBegin)
- {
- len = bufpos - tokenBegin + inBuf + 1;
- }
- else
- {
- len = bufsize - tokenBegin + bufpos + 1 + inBuf;
- }
-
- int i = 0, j = 0, k = 0;
- int nextColDiff = 0, columnDiff = 0;
-
- while (i < len &&
- bufline[j = start % bufsize] == bufline[k = ++start % bufsize])
- {
- bufline[j] = newLine;
- nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];
- bufcolumn[j] = newCol + columnDiff;
- columnDiff = nextColDiff;
- i++;
- }
-
- if (i < len)
- {
- bufline[j] = newLine++;
- bufcolumn[j] = newCol + columnDiff;
-
- while (i++ < len)
- {
- if (bufline[j = start % bufsize] != bufline[++start % bufsize])
- bufline[j] = newLine++;
- else
- bufline[j] = newLine;
- }
- }
-
- line = bufline[j];
- column = bufcolumn[j];
- }
-
-}
diff --git a/apache/org/apache/james/mime4j/field/contenttype/parser/Token.java b/apache/org/apache/james/mime4j/field/contenttype/parser/Token.java
deleted file mode 100644
index 34e65eec0..000000000
--- a/apache/org/apache/james/mime4j/field/contenttype/parser/Token.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/* Generated By:JavaCC: Do not edit this line. Token.java Version 3.0 */
-/*
- * Copyright 2004 the mime4j project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.james.mime4j.field.contenttype.parser;
-
-/**
- * Describes the input token stream.
- */
-
-public class Token {
-
- /**
- * An integer that describes the kind of this token. This numbering
- * system is determined by JavaCCParser, and a table of these numbers is
- * stored in the file ...Constants.java.
- */
- public int kind;
-
- /**
- * beginLine and beginColumn describe the position of the first character
- * of this token; endLine and endColumn describe the position of the
- * last character of this token.
- */
- public int beginLine, beginColumn, endLine, endColumn;
-
- /**
- * The string image of the token.
- */
- public String image;
-
- /**
- * A reference to the next regular (non-special) token from the input
- * stream. If this is the last token from the input stream, or if the
- * token manager has not read tokens beyond this one, this field is
- * set to null. This is true only if this token is also a regular
- * token. Otherwise, see below for a description of the contents of
- * this field.
- */
- public Token next;
-
- /**
- * This field is used to access special tokens that occur prior to this
- * token, but after the immediately preceding regular (non-special) token.
- * If there are no such special tokens, this field is set to null.
- * When there are more than one such special token, this field refers
- * to the last of these special tokens, which in turn refers to the next
- * previous special token through its specialToken field, and so on
- * until the first special token (whose specialToken field is null).
- * The next fields of special tokens refer to other special tokens that
- * immediately follow it (without an intervening regular token). If there
- * is no such token, this field is null.
- */
- public Token specialToken;
-
- /**
- * Returns the image.
- */
- public String toString()
- {
- return image;
- }
-
- /**
- * Returns a new Token object, by default. However, if you want, you
- * can create and return subclass objects based on the value of ofKind.
- * Simply add the cases to the switch for all those special cases.
- * For example, if you have a subclass of Token called IDToken that
- * you want to create if ofKind is ID, simlpy add something like :
- *
- * case MyParserConstants.ID : return new IDToken();
- *
- * to the following switch statement. Then you can cast matchedToken
- * variable to the appropriate type and use it in your lexical actions.
- */
- public static final Token newToken(int ofKind)
- {
- switch(ofKind)
- {
- default : return new Token();
- }
- }
-
-}
diff --git a/apache/org/apache/james/mime4j/field/contenttype/parser/TokenMgrError.java b/apache/org/apache/james/mime4j/field/contenttype/parser/TokenMgrError.java
deleted file mode 100644
index ea5a7826e..000000000
--- a/apache/org/apache/james/mime4j/field/contenttype/parser/TokenMgrError.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 3.0 */
-/*
- * Copyright 2004 the mime4j project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.james.mime4j.field.contenttype.parser;
-
-public class TokenMgrError extends Error
-{
- /*
- * Ordinals for various reasons why an Error of this type can be thrown.
- */
-
- /**
- * Lexical error occured.
- */
- static final int LEXICAL_ERROR = 0;
-
- /**
- * An attempt wass made to create a second instance of a static token manager.
- */
- static final int STATIC_LEXER_ERROR = 1;
-
- /**
- * Tried to change to an invalid lexical state.
- */
- static final int INVALID_LEXICAL_STATE = 2;
-
- /**
- * Detected (and bailed out of) an infinite loop in the token manager.
- */
- static final int LOOP_DETECTED = 3;
-
- /**
- * Indicates the reason why the exception is thrown. It will have
- * one of the above 4 values.
- */
- int errorCode;
-
- /**
- * Replaces unprintable characters by their espaced (or unicode escaped)
- * equivalents in the given string
- */
- protected static final String addEscapes(String str) {
- StringBuffer retval = new StringBuffer();
- char ch;
- for (int i = 0; i < str.length(); i++) {
- switch (str.charAt(i))
- {
- case 0 :
- continue;
- case '\b':
- retval.append("\\b");
- continue;
- case '\t':
- retval.append("\\t");
- continue;
- case '\n':
- retval.append("\\n");
- continue;
- case '\f':
- retval.append("\\f");
- continue;
- case '\r':
- retval.append("\\r");
- continue;
- case '\"':
- retval.append("\\\"");
- continue;
- case '\'':
- retval.append("\\\'");
- continue;
- case '\\':
- retval.append("\\\\");
- continue;
- default:
- if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
- String s = "0000" + Integer.toString(ch, 16);
- retval.append("\\u" + s.substring(s.length() - 4, s.length()));
- } else {
- retval.append(ch);
- }
- continue;
- }
- }
- return retval.toString();
- }
-
- /**
- * Returns a detailed message for the Error when it is thrown by the
- * token manager to indicate a lexical error.
- * Parameters :
- * EOFSeen : indicates if EOF caused the lexicl error
- * curLexState : lexical state in which this error occured
- * errorLine : line number when the error occured
- * errorColumn : column number when the error occured
- * errorAfter : prefix that was seen before this error occured
- * curchar : the offending character
- * Note: You can customize the lexical error message by modifying this method.
- */
- protected static String LexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar) {
- return("Lexical error at line " +
- errorLine + ", column " +
- errorColumn + ". Encountered: " +
- (EOFSeen ? "<EOF> " : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int)curChar + "), ") +
- "after : \"" + addEscapes(errorAfter) + "\"");
- }
-
- /**
- * You can also modify the body of this method to customize your error messages.
- * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not
- * of end-users concern, so you can return something like :
- *
- * "Internal Error : Please file a bug report .... "
- *
- * from this method for such cases in the release version of your parser.
- */
- public String getMessage() {
- return super.getMessage();
- }
-
- /*
- * Constructors of various flavors follow.
- */
-
- public TokenMgrError() {
- }
-
- public TokenMgrError(String message, int reason) {
- super(message);
- errorCode = reason;
- }
-
- public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar, int reason) {
- this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason);
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/datetime/DateTime.java b/apache/org/apache/james/mime4j/field/datetime/DateTime.java
deleted file mode 100644
index 506ff54e5..000000000
--- a/apache/org/apache/james/mime4j/field/datetime/DateTime.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j.field.datetime;
-
-import org.apache.james.mime4j.field.datetime.parser.DateTimeParser;
-import org.apache.james.mime4j.field.datetime.parser.ParseException;
-import org.apache.james.mime4j.field.datetime.parser.TokenMgrError;
-
-import java.util.Date;
-import java.util.Calendar;
-import java.util.TimeZone;
-import java.util.GregorianCalendar;
-import java.io.StringReader;
-
-public class DateTime {
- private final Date date;
- private final int year;
- private final int month;
- private final int day;
- private final int hour;
- private final int minute;
- private final int second;
- private final int timeZone;
-
- public DateTime(String yearString, int month, int day, int hour, int minute, int second, int timeZone) {
- this.year = convertToYear(yearString);
- this.date = convertToDate(year, month, day, hour, minute, second, timeZone);
- this.month = month;
- this.day = day;
- this.hour = hour;
- this.minute = minute;
- this.second = second;
- this.timeZone = timeZone;
- }
-
- private int convertToYear(String yearString) {
- int year = Integer.parseInt(yearString);
- switch (yearString.length()) {
- case 1:
- case 2:
- if (year >= 0 && year < 50)
- return 2000 + year;
- else
- return 1900 + year;
- case 3:
- return 1900 + year;
- default:
- return year;
- }
- }
-
- public static Date convertToDate(int year, int month, int day, int hour, int minute, int second, int timeZone) {
- Calendar c = new GregorianCalendar(TimeZone.getTimeZone("GMT+0"));
- c.set(year, month - 1, day, hour, minute, second);
- c.set(Calendar.MILLISECOND, 0);
-
- if (timeZone != Integer.MIN_VALUE) {
- int minutes = ((timeZone / 100) * 60) + timeZone % 100;
- c.add(Calendar.MINUTE, -1 * minutes);
- }
-
- return c.getTime();
- }
-
- public Date getDate() {
- return date;
- }
-
- public int getYear() {
- return year;
- }
-
- public int getMonth() {
- return month;
- }
-
- public int getDay() {
- return day;
- }
-
- public int getHour() {
- return hour;
- }
-
- public int getMinute() {
- return minute;
- }
-
- public int getSecond() {
- return second;
- }
-
- public int getTimeZone() {
- return timeZone;
- }
-
- public void print() {
- System.out.println(getYear() + " " + getMonth() + " " + getDay() + "; " + getHour() + " " + getMinute() + " " + getSecond() + " " + getTimeZone());
- }
-
-
- public static DateTime parse(String dateString) throws ParseException {
- try {
- return new DateTimeParser(new StringReader(dateString)).parseAll();
- }
- catch (TokenMgrError err) {
- throw new ParseException(err.getMessage());
- }
- }
-}
diff --git a/apache/org/apache/james/mime4j/field/datetime/parser/DateTimeParser.java b/apache/org/apache/james/mime4j/field/datetime/parser/DateTimeParser.java
deleted file mode 100644
index 43edebb5c..000000000
--- a/apache/org/apache/james/mime4j/field/datetime/parser/DateTimeParser.java
+++ /dev/null
@@ -1,570 +0,0 @@
-/* Generated By:JavaCC: Do not edit this line. DateTimeParser.java */
-/*
- * Copyright 2004 the mime4j project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.james.mime4j.field.datetime.parser;
-
-import org.apache.james.mime4j.field.datetime.DateTime;
-
-import java.util.Vector;
-
-public class DateTimeParser implements DateTimeParserConstants {
- private static final boolean ignoreMilitaryZoneOffset = true;
-
- public static void main(String args[]) throws ParseException {
- while (true) {
- try {
- DateTimeParser parser = new DateTimeParser(System.in);
- parser.parseLine();
- } catch (Exception x) {
- x.printStackTrace();
- return;
- }
- }
- }
-
- private static int parseDigits(Token token) {
- return Integer.parseInt(token.image, 10);
- }
-
- private static int getMilitaryZoneOffset(char c) {
- if (ignoreMilitaryZoneOffset)
- return 0;
-
- c = Character.toUpperCase(c);
-
- switch (c) {
- case 'A': return 1;
- case 'B': return 2;
- case 'C': return 3;
- case 'D': return 4;
- case 'E': return 5;
- case 'F': return 6;
- case 'G': return 7;
- case 'H': return 8;
- case 'I': return 9;
- case 'K': return 10;
- case 'L': return 11;
- case 'M': return 12;
-
- case 'N': return -1;
- case 'O': return -2;
- case 'P': return -3;
- case 'Q': return -4;
- case 'R': return -5;
- case 'S': return -6;
- case 'T': return -7;
- case 'U': return -8;
- case 'V': return -9;
- case 'W': return -10;
- case 'X': return -11;
- case 'Y': return -12;
-
- case 'Z': return 0;
- default: return 0;
- }
- }
-
- private static class Time {
- private int hour;
- private int minute;
- private int second;
- private int zone;
-
- public Time(int hour, int minute, int second, int zone) {
- this.hour = hour;
- this.minute = minute;
- this.second = second;
- this.zone = zone;
- }
-
- public int getHour() { return hour; }
- public int getMinute() { return minute; }
- public int getSecond() { return second; }
- public int getZone() { return zone; }
- }
-
- private static class Date {
- private String year;
- private int month;
- private int day;
-
- public Date(String year, int month, int day) {
- this.year = year;
- this.month = month;
- this.day = day;
- }
-
- public String getYear() { return year; }
- public int getMonth() { return month; }
- public int getDay() { return day; }
- }
-
- final public DateTime parseLine() throws ParseException {
- DateTime dt;
- dt = date_time();
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 1:
- jj_consume_token(1);
- break;
- default:
- jj_la1[0] = jj_gen;
- ;
- }
- jj_consume_token(2);
- {if (true) return dt;}
- throw new Error("Missing return statement in function");
- }
-
- final public DateTime parseAll() throws ParseException {
- DateTime dt;
- dt = date_time();
- jj_consume_token(0);
- {if (true) return dt;}
- throw new Error("Missing return statement in function");
- }
-
- final public DateTime date_time() throws ParseException {
- Date d; Time t;
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 4:
- case 5:
- case 6:
- case 7:
- case 8:
- case 9:
- case 10:
- day_of_week();
- jj_consume_token(3);
- break;
- default:
- jj_la1[1] = jj_gen;
- ;
- }
- d = date();
- t = time();
- {if (true) return new DateTime(
- d.getYear(),
- d.getMonth(),
- d.getDay(),
- t.getHour(),
- t.getMinute(),
- t.getSecond(),
- t.getZone());} // time zone offset
-
- throw new Error("Missing return statement in function");
- }
-
- final public String day_of_week() throws ParseException {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 4:
- jj_consume_token(4);
- break;
- case 5:
- jj_consume_token(5);
- break;
- case 6:
- jj_consume_token(6);
- break;
- case 7:
- jj_consume_token(7);
- break;
- case 8:
- jj_consume_token(8);
- break;
- case 9:
- jj_consume_token(9);
- break;
- case 10:
- jj_consume_token(10);
- break;
- default:
- jj_la1[2] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
- {if (true) return token.image;}
- throw new Error("Missing return statement in function");
- }
-
- final public Date date() throws ParseException {
- int d, m; String y;
- d = day();
- m = month();
- y = year();
- {if (true) return new Date(y, m, d);}
- throw new Error("Missing return statement in function");
- }
-
- final public int day() throws ParseException {
- Token t;
- t = jj_consume_token(DIGITS);
- {if (true) return parseDigits(t);}
- throw new Error("Missing return statement in function");
- }
-
- final public int month() throws ParseException {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 11:
- jj_consume_token(11);
- {if (true) return 1;}
- break;
- case 12:
- jj_consume_token(12);
- {if (true) return 2;}
- break;
- case 13:
- jj_consume_token(13);
- {if (true) return 3;}
- break;
- case 14:
- jj_consume_token(14);
- {if (true) return 4;}
- break;
- case 15:
- jj_consume_token(15);
- {if (true) return 5;}
- break;
- case 16:
- jj_consume_token(16);
- {if (true) return 6;}
- break;
- case 17:
- jj_consume_token(17);
- {if (true) return 7;}
- break;
- case 18:
- jj_consume_token(18);
- {if (true) return 8;}
- break;
- case 19:
- jj_consume_token(19);
- {if (true) return 9;}
- break;
- case 20:
- jj_consume_token(20);
- {if (true) return 10;}
- break;
- case 21:
- jj_consume_token(21);
- {if (true) return 11;}
- break;
- case 22:
- jj_consume_token(22);
- {if (true) return 12;}
- break;
- default:
- jj_la1[3] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
- throw new Error("Missing return statement in function");
- }
-
- final public String year() throws ParseException {
- Token t;
- t = jj_consume_token(DIGITS);
- {if (true) return t.image;}
- throw new Error("Missing return statement in function");
- }
-
- final public Time time() throws ParseException {
- int h, m, s=0, z;
- h = hour();
- jj_consume_token(23);
- m = minute();
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 23:
- jj_consume_token(23);
- s = second();
- break;
- default:
- jj_la1[4] = jj_gen;
- ;
- }
- z = zone();
- {if (true) return new Time(h, m, s, z);}
- throw new Error("Missing return statement in function");
- }
-
- final public int hour() throws ParseException {
- Token t;
- t = jj_consume_token(DIGITS);
- {if (true) return parseDigits(t);}
- throw new Error("Missing return statement in function");
- }
-
- final public int minute() throws ParseException {
- Token t;
- t = jj_consume_token(DIGITS);
- {if (true) return parseDigits(t);}
- throw new Error("Missing return statement in function");
- }
-
- final public int second() throws ParseException {
- Token t;
- t = jj_consume_token(DIGITS);
- {if (true) return parseDigits(t);}
- throw new Error("Missing return statement in function");
- }
-
- final public int zone() throws ParseException {
- Token t, u; int z;
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case OFFSETDIR:
- t = jj_consume_token(OFFSETDIR);
- u = jj_consume_token(DIGITS);
- z=parseDigits(u)*(t.image.equals("-") ? -1 : 1);
- break;
- case 25:
- case 26:
- case 27:
- case 28:
- case 29:
- case 30:
- case 31:
- case 32:
- case 33:
- case 34:
- case MILITARY_ZONE:
- z = obs_zone();
- break;
- default:
- jj_la1[5] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
- {if (true) return z;}
- throw new Error("Missing return statement in function");
- }
-
- final public int obs_zone() throws ParseException {
- Token t; int z;
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 25:
- jj_consume_token(25);
- z=0;
- break;
- case 26:
- jj_consume_token(26);
- z=0;
- break;
- case 27:
- jj_consume_token(27);
- z=-5;
- break;
- case 28:
- jj_consume_token(28);
- z=-4;
- break;
- case 29:
- jj_consume_token(29);
- z=-6;
- break;
- case 30:
- jj_consume_token(30);
- z=-5;
- break;
- case 31:
- jj_consume_token(31);
- z=-7;
- break;
- case 32:
- jj_consume_token(32);
- z=-6;
- break;
- case 33:
- jj_consume_token(33);
- z=-8;
- break;
- case 34:
- jj_consume_token(34);
- z=-7;
- break;
- case MILITARY_ZONE:
- t = jj_consume_token(MILITARY_ZONE);
- z=getMilitaryZoneOffset(t.image.charAt(0));
- break;
- default:
- jj_la1[6] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
- {if (true) return z * 100;}
- throw new Error("Missing return statement in function");
- }
-
- public DateTimeParserTokenManager token_source;
- SimpleCharStream jj_input_stream;
- public Token token, jj_nt;
- private int jj_ntk;
- private int jj_gen;
- final private int[] jj_la1 = new int[7];
- static private int[] jj_la1_0;
- static private int[] jj_la1_1;
- static {
- jj_la1_0();
- jj_la1_1();
- }
- private static void jj_la1_0() {
- jj_la1_0 = new int[] {0x2,0x7f0,0x7f0,0x7ff800,0x800000,0xff000000,0xfe000000,};
- }
- private static void jj_la1_1() {
- jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0xf,0xf,};
- }
-
- public DateTimeParser(java.io.InputStream stream) {
- this(stream, null);
- }
- public DateTimeParser(java.io.InputStream stream, String encoding) {
- try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
- token_source = new DateTimeParserTokenManager(jj_input_stream);
- token = new Token();
- jj_ntk = -1;
- jj_gen = 0;
- for (int i = 0; i < 7; i++) jj_la1[i] = -1;
- }
-
- public void ReInit(java.io.InputStream stream) {
- ReInit(stream, null);
- }
- public void ReInit(java.io.InputStream stream, String encoding) {
- try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
- token_source.ReInit(jj_input_stream);
- token = new Token();
- jj_ntk = -1;
- jj_gen = 0;
- for (int i = 0; i < 7; i++) jj_la1[i] = -1;
- }
-
- public DateTimeParser(java.io.Reader stream) {
- jj_input_stream = new SimpleCharStream(stream, 1, 1);
- token_source = new DateTimeParserTokenManager(jj_input_stream);
- token = new Token();
- jj_ntk = -1;
- jj_gen = 0;
- for (int i = 0; i < 7; i++) jj_la1[i] = -1;
- }
-
- public void ReInit(java.io.Reader stream) {
- jj_input_stream.ReInit(stream, 1, 1);
- token_source.ReInit(jj_input_stream);
- token = new Token();
- jj_ntk = -1;
- jj_gen = 0;
- for (int i = 0; i < 7; i++) jj_la1[i] = -1;
- }
-
- public DateTimeParser(DateTimeParserTokenManager tm) {
- token_source = tm;
- token = new Token();
- jj_ntk = -1;
- jj_gen = 0;
- for (int i = 0; i < 7; i++) jj_la1[i] = -1;
- }
-
- public void ReInit(DateTimeParserTokenManager tm) {
- token_source = tm;
- token = new Token();
- jj_ntk = -1;
- jj_gen = 0;
- for (int i = 0; i < 7; i++) jj_la1[i] = -1;
- }
-
- final private Token jj_consume_token(int kind) throws ParseException {
- Token oldToken;
- if ((oldToken = token).next != null) token = token.next;
- else token = token.next = token_source.getNextToken();
- jj_ntk = -1;
- if (token.kind == kind) {
- jj_gen++;
- return token;
- }
- token = oldToken;
- jj_kind = kind;
- throw generateParseException();
- }
-
- final public Token getNextToken() {
- if (token.next != null) token = token.next;
- else token = token.next = token_source.getNextToken();
- jj_ntk = -1;
- jj_gen++;
- return token;
- }
-
- final public Token getToken(int index) {
- Token t = token;
- for (int i = 0; i < index; i++) {
- if (t.next != null) t = t.next;
- else t = t.next = token_source.getNextToken();
- }
- return t;
- }
-
- final private int jj_ntk() {
- if ((jj_nt=token.next) == null)
- return (jj_ntk = (token.next=token_source.getNextToken()).kind);
- else
- return (jj_ntk = jj_nt.kind);
- }
-
- private Vector<int[]> jj_expentries = new Vector<int[]>();
- private int[] jj_expentry;
- private int jj_kind = -1;
-
- public ParseException generateParseException() {
- jj_expentries.removeAllElements();
- boolean[] la1tokens = new boolean[49];
- for (int i = 0; i < 49; i++) {
- la1tokens[i] = false;
- }
- if (jj_kind >= 0) {
- la1tokens[jj_kind] = true;
- jj_kind = -1;
- }
- for (int i = 0; i < 7; i++) {
- if (jj_la1[i] == jj_gen) {
- for (int j = 0; j < 32; j++) {
- if ((jj_la1_0[i] & (1<<j)) != 0) {
- la1tokens[j] = true;
- }
- if ((jj_la1_1[i] & (1<<j)) != 0) {
- la1tokens[32+j] = true;
- }
- }
- }
- }
- for (int i = 0; i < 49; i++) {
- if (la1tokens[i]) {
- jj_expentry = new int[1];
- jj_expentry[0] = i;
- jj_expentries.addElement(jj_expentry);
- }
- }
- int[][] exptokseq = new int[jj_expentries.size()][];
- for (int i = 0; i < jj_expentries.size(); i++) {
- exptokseq[i] = jj_expentries.elementAt(i);
- }
- return new ParseException(token, exptokseq, tokenImage);
- }
-
- final public void enable_tracing() {
- }
-
- final public void disable_tracing() {
- }
-
-}
diff --git a/apache/org/apache/james/mime4j/field/datetime/parser/DateTimeParserConstants.java b/apache/org/apache/james/mime4j/field/datetime/parser/DateTimeParserConstants.java
deleted file mode 100644
index 2c203db2e..000000000
--- a/apache/org/apache/james/mime4j/field/datetime/parser/DateTimeParserConstants.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/* Generated By:JavaCC: Do not edit this line. DateTimeParserConstants.java */
-/*
- * Copyright 2004 the mime4j project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.james.mime4j.field.datetime.parser;
-
-public interface DateTimeParserConstants {
-
- int EOF = 0;
- int OFFSETDIR = 24;
- int MILITARY_ZONE = 35;
- int WS = 36;
- int COMMENT = 38;
- int DIGITS = 46;
- int QUOTEDPAIR = 47;
- int ANY = 48;
-
- int DEFAULT = 0;
- int INCOMMENT = 1;
- int NESTED_COMMENT = 2;
-
- String[] tokenImage = {
- "<EOF>",
- "\"\\r\"",
- "\"\\n\"",
- "\",\"",
- "\"Mon\"",
- "\"Tue\"",
- "\"Wed\"",
- "\"Thu\"",
- "\"Fri\"",
- "\"Sat\"",
- "\"Sun\"",
- "\"Jan\"",
- "\"Feb\"",
- "\"Mar\"",
- "\"Apr\"",
- "\"May\"",
- "\"Jun\"",
- "\"Jul\"",
- "\"Aug\"",
- "\"Sep\"",
- "\"Oct\"",
- "\"Nov\"",
- "\"Dec\"",
- "\":\"",
- "<OFFSETDIR>",
- "\"UT\"",
- "\"GMT\"",
- "\"EST\"",
- "\"EDT\"",
- "\"CST\"",
- "\"CDT\"",
- "\"MST\"",
- "\"MDT\"",
- "\"PST\"",
- "\"PDT\"",
- "<MILITARY_ZONE>",
- "<WS>",
- "\"(\"",
- "\")\"",
- "<token of kind 39>",
- "\"(\"",
- "<token of kind 41>",
- "<token of kind 42>",
- "\"(\"",
- "\")\"",
- "<token of kind 45>",
- "<DIGITS>",
- "<QUOTEDPAIR>",
- "<ANY>",
- };
-
-}
diff --git a/apache/org/apache/james/mime4j/field/datetime/parser/DateTimeParserTokenManager.java b/apache/org/apache/james/mime4j/field/datetime/parser/DateTimeParserTokenManager.java
deleted file mode 100644
index 4b2d2fd95..000000000
--- a/apache/org/apache/james/mime4j/field/datetime/parser/DateTimeParserTokenManager.java
+++ /dev/null
@@ -1,882 +0,0 @@
-/* Generated By:JavaCC: Do not edit this line. DateTimeParserTokenManager.java */
-/*
- * Copyright 2004 the mime4j project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.james.mime4j.field.datetime.parser;
-import org.apache.james.mime4j.field.datetime.DateTime;
-import java.util.Calendar;
-
-public class DateTimeParserTokenManager implements DateTimeParserConstants
-{
- // Keeps track of how many levels of comment nesting
- // we've encountered. This is only used when the 2nd
- // level is reached, for example ((this)), not (this).
- // This is because the outermost level must be treated
- // specially anyway, because the outermost ")" has a
- // different token type than inner ")" instances.
- static int commentNest;
- public java.io.PrintStream debugStream = System.out;
- public void setDebugStream(java.io.PrintStream ds) { debugStream = ds; }
-private final int jjStopStringLiteralDfa_0(int pos, long active0)
-{
- switch (pos)
- {
- case 0:
- if ((active0 & 0x7fe7cf7f0L) != 0L)
- {
- jjmatchedKind = 35;
- return -1;
- }
- return -1;
- case 1:
- if ((active0 & 0x7fe7cf7f0L) != 0L)
- {
- if (jjmatchedPos == 0)
- {
- jjmatchedKind = 35;
- jjmatchedPos = 0;
- }
- return -1;
- }
- return -1;
- default :
- return -1;
- }
-}
-private final int jjStartNfa_0(int pos, long active0)
-{
- return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0), pos + 1);
-}
-private final int jjStopAtPos(int pos, int kind)
-{
- jjmatchedKind = kind;
- jjmatchedPos = pos;
- return pos + 1;
-}
-private final int jjStartNfaWithStates_0(int pos, int kind, int state)
-{
- jjmatchedKind = kind;
- jjmatchedPos = pos;
- try { curChar = input_stream.readChar(); }
- catch(java.io.IOException e) { return pos + 1; }
- return jjMoveNfa_0(state, pos + 1);
-}
-private final int jjMoveStringLiteralDfa0_0()
-{
- switch(curChar)
- {
- case 10:
- return jjStopAtPos(0, 2);
- case 13:
- return jjStopAtPos(0, 1);
- case 40:
- return jjStopAtPos(0, 37);
- case 44:
- return jjStopAtPos(0, 3);
- case 58:
- return jjStopAtPos(0, 23);
- case 65:
- return jjMoveStringLiteralDfa1_0(0x44000L);
- case 67:
- return jjMoveStringLiteralDfa1_0(0x60000000L);
- case 68:
- return jjMoveStringLiteralDfa1_0(0x400000L);
- case 69:
- return jjMoveStringLiteralDfa1_0(0x18000000L);
- case 70:
- return jjMoveStringLiteralDfa1_0(0x1100L);
- case 71:
- return jjMoveStringLiteralDfa1_0(0x4000000L);
- case 74:
- return jjMoveStringLiteralDfa1_0(0x30800L);
- case 77:
- return jjMoveStringLiteralDfa1_0(0x18000a010L);
- case 78:
- return jjMoveStringLiteralDfa1_0(0x200000L);
- case 79:
- return jjMoveStringLiteralDfa1_0(0x100000L);
- case 80:
- return jjMoveStringLiteralDfa1_0(0x600000000L);
- case 83:
- return jjMoveStringLiteralDfa1_0(0x80600L);
- case 84:
- return jjMoveStringLiteralDfa1_0(0xa0L);
- case 85:
- return jjMoveStringLiteralDfa1_0(0x2000000L);
- case 87:
- return jjMoveStringLiteralDfa1_0(0x40L);
- default :
- return jjMoveNfa_0(0, 0);
- }
-}
-private final int jjMoveStringLiteralDfa1_0(long active0)
-{
- try { curChar = input_stream.readChar(); }
- catch(java.io.IOException e) {
- jjStopStringLiteralDfa_0(0, active0);
- return 1;
- }
- switch(curChar)
- {
- case 68:
- return jjMoveStringLiteralDfa2_0(active0, 0x550000000L);
- case 77:
- return jjMoveStringLiteralDfa2_0(active0, 0x4000000L);
- case 83:
- return jjMoveStringLiteralDfa2_0(active0, 0x2a8000000L);
- case 84:
- if ((active0 & 0x2000000L) != 0L)
- return jjStopAtPos(1, 25);
- break;
- case 97:
- return jjMoveStringLiteralDfa2_0(active0, 0xaa00L);
- case 99:
- return jjMoveStringLiteralDfa2_0(active0, 0x100000L);
- case 101:
- return jjMoveStringLiteralDfa2_0(active0, 0x481040L);
- case 104:
- return jjMoveStringLiteralDfa2_0(active0, 0x80L);
- case 111:
- return jjMoveStringLiteralDfa2_0(active0, 0x200010L);
- case 112:
- return jjMoveStringLiteralDfa2_0(active0, 0x4000L);
- case 114:
- return jjMoveStringLiteralDfa2_0(active0, 0x100L);
- case 117:
- return jjMoveStringLiteralDfa2_0(active0, 0x70420L);
- default :
- break;
- }
- return jjStartNfa_0(0, active0);
-}
-private final int jjMoveStringLiteralDfa2_0(long old0, long active0)
-{
- if (((active0 &= old0)) == 0L)
- return jjStartNfa_0(0, old0);
- try { curChar = input_stream.readChar(); }
- catch(java.io.IOException e) {
- jjStopStringLiteralDfa_0(1, active0);
- return 2;
- }
- switch(curChar)
- {
- case 84:
- if ((active0 & 0x4000000L) != 0L)
- return jjStopAtPos(2, 26);
- else if ((active0 & 0x8000000L) != 0L)
- return jjStopAtPos(2, 27);
- else if ((active0 & 0x10000000L) != 0L)
- return jjStopAtPos(2, 28);
- else if ((active0 & 0x20000000L) != 0L)
- return jjStopAtPos(2, 29);
- else if ((active0 & 0x40000000L) != 0L)
- return jjStopAtPos(2, 30);
- else if ((active0 & 0x80000000L) != 0L)
- return jjStopAtPos(2, 31);
- else if ((active0 & 0x100000000L) != 0L)
- return jjStopAtPos(2, 32);
- else if ((active0 & 0x200000000L) != 0L)
- return jjStopAtPos(2, 33);
- else if ((active0 & 0x400000000L) != 0L)
- return jjStopAtPos(2, 34);
- break;
- case 98:
- if ((active0 & 0x1000L) != 0L)
- return jjStopAtPos(2, 12);
- break;
- case 99:
- if ((active0 & 0x400000L) != 0L)
- return jjStopAtPos(2, 22);
- break;
- case 100:
- if ((active0 & 0x40L) != 0L)
- return jjStopAtPos(2, 6);
- break;
- case 101:
- if ((active0 & 0x20L) != 0L)
- return jjStopAtPos(2, 5);
- break;
- case 103:
- if ((active0 & 0x40000L) != 0L)
- return jjStopAtPos(2, 18);
- break;
- case 105:
- if ((active0 & 0x100L) != 0L)
- return jjStopAtPos(2, 8);
- break;
- case 108:
- if ((active0 & 0x20000L) != 0L)
- return jjStopAtPos(2, 17);
- break;
- case 110:
- if ((active0 & 0x10L) != 0L)
- return jjStopAtPos(2, 4);
- else if ((active0 & 0x400L) != 0L)
- return jjStopAtPos(2, 10);
- else if ((active0 & 0x800L) != 0L)
- return jjStopAtPos(2, 11);
- else if ((active0 & 0x10000L) != 0L)
- return jjStopAtPos(2, 16);
- break;
- case 112:
- if ((active0 & 0x80000L) != 0L)
- return jjStopAtPos(2, 19);
- break;
- case 114:
- if ((active0 & 0x2000L) != 0L)
- return jjStopAtPos(2, 13);
- else if ((active0 & 0x4000L) != 0L)
- return jjStopAtPos(2, 14);
- break;
- case 116:
- if ((active0 & 0x200L) != 0L)
- return jjStopAtPos(2, 9);
- else if ((active0 & 0x100000L) != 0L)
- return jjStopAtPos(2, 20);
- break;
- case 117:
- if ((active0 & 0x80L) != 0L)
- return jjStopAtPos(2, 7);
- break;
- case 118:
- if ((active0 & 0x200000L) != 0L)
- return jjStopAtPos(2, 21);
- break;
- case 121:
- if ((active0 & 0x8000L) != 0L)
- return jjStopAtPos(2, 15);
- break;
- default :
- break;
- }
- return jjStartNfa_0(1, active0);
-}
-private final void jjCheckNAdd(int state)
-{
- if (jjrounds[state] != jjround)
- {
- jjstateSet[jjnewStateCnt++] = state;
- jjrounds[state] = jjround;
- }
-}
-private final void jjAddStates(int start, int end)
-{
- do {
- jjstateSet[jjnewStateCnt++] = jjnextStates[start];
- } while (start++ != end);
-}
-private final void jjCheckNAddTwoStates(int state1, int state2)
-{
- jjCheckNAdd(state1);
- jjCheckNAdd(state2);
-}
-private final void jjCheckNAddStates(int start, int end)
-{
- do {
- jjCheckNAdd(jjnextStates[start]);
- } while (start++ != end);
-}
-private final void jjCheckNAddStates(int start)
-{
- jjCheckNAdd(jjnextStates[start]);
- jjCheckNAdd(jjnextStates[start + 1]);
-}
-private final int jjMoveNfa_0(int startState, int curPos)
-{
- int[] nextStates;
- int startsAt = 0;
- jjnewStateCnt = 4;
- int i = 1;
- jjstateSet[0] = startState;
- int j, kind = 0x7fffffff;
- for (;;)
- {
- if (++jjround == 0x7fffffff)
- ReInitRounds();
- if (curChar < 64)
- {
- long l = 1L << curChar;
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- if ((0x3ff000000000000L & l) != 0L)
- {
- if (kind > 46)
- kind = 46;
- jjCheckNAdd(3);
- }
- else if ((0x100000200L & l) != 0L)
- {
- if (kind > 36)
- kind = 36;
- jjCheckNAdd(2);
- }
- else if ((0x280000000000L & l) != 0L)
- {
- if (kind > 24)
- kind = 24;
- }
- break;
- case 2:
- if ((0x100000200L & l) == 0L)
- break;
- kind = 36;
- jjCheckNAdd(2);
- break;
- case 3:
- if ((0x3ff000000000000L & l) == 0L)
- break;
- kind = 46;
- jjCheckNAdd(3);
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- else if (curChar < 128)
- {
- long l = 1L << (curChar & 077);
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- if ((0x7fffbfe07fffbfeL & l) != 0L)
- kind = 35;
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- else
- {
- int i2 = (curChar & 0xff) >> 6;
- long l2 = 1L << (curChar & 077);
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- default : break;
- }
- } while(i != startsAt);
- }
- if (kind != 0x7fffffff)
- {
- jjmatchedKind = kind;
- jjmatchedPos = curPos;
- kind = 0x7fffffff;
- }
- ++curPos;
- if ((i = jjnewStateCnt) == (startsAt = 4 - (jjnewStateCnt = startsAt)))
- return curPos;
- try { curChar = input_stream.readChar(); }
- catch(java.io.IOException e) { return curPos; }
- }
-}
-private final int jjStopStringLiteralDfa_1(int pos, long active0)
-{
- switch (pos)
- {
- default :
- return -1;
- }
-}
-private final int jjStartNfa_1(int pos, long active0)
-{
- return jjMoveNfa_1(jjStopStringLiteralDfa_1(pos, active0), pos + 1);
-}
-private final int jjStartNfaWithStates_1(int pos, int kind, int state)
-{
- jjmatchedKind = kind;
- jjmatchedPos = pos;
- try { curChar = input_stream.readChar(); }
- catch(java.io.IOException e) { return pos + 1; }
- return jjMoveNfa_1(state, pos + 1);
-}
-private final int jjMoveStringLiteralDfa0_1()
-{
- switch(curChar)
- {
- case 40:
- return jjStopAtPos(0, 40);
- case 41:
- return jjStopAtPos(0, 38);
- default :
- return jjMoveNfa_1(0, 0);
- }
-}
-static final long[] jjbitVec0 = {
- 0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
-};
-private final int jjMoveNfa_1(int startState, int curPos)
-{
- int[] nextStates;
- int startsAt = 0;
- jjnewStateCnt = 3;
- int i = 1;
- jjstateSet[0] = startState;
- int j, kind = 0x7fffffff;
- for (;;)
- {
- if (++jjround == 0x7fffffff)
- ReInitRounds();
- if (curChar < 64)
- {
- long l = 1L << curChar;
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- if (kind > 41)
- kind = 41;
- break;
- case 1:
- if (kind > 39)
- kind = 39;
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- else if (curChar < 128)
- {
- long l = 1L << (curChar & 077);
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- if (kind > 41)
- kind = 41;
- if (curChar == 92)
- jjstateSet[jjnewStateCnt++] = 1;
- break;
- case 1:
- if (kind > 39)
- kind = 39;
- break;
- case 2:
- if (kind > 41)
- kind = 41;
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- else
- {
- int i2 = (curChar & 0xff) >> 6;
- long l2 = 1L << (curChar & 077);
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- if ((jjbitVec0[i2] & l2) != 0L && kind > 41)
- kind = 41;
- break;
- case 1:
- if ((jjbitVec0[i2] & l2) != 0L && kind > 39)
- kind = 39;
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- if (kind != 0x7fffffff)
- {
- jjmatchedKind = kind;
- jjmatchedPos = curPos;
- kind = 0x7fffffff;
- }
- ++curPos;
- if ((i = jjnewStateCnt) == (startsAt = 3 - (jjnewStateCnt = startsAt)))
- return curPos;
- try { curChar = input_stream.readChar(); }
- catch(java.io.IOException e) { return curPos; }
- }
-}
-private final int jjStopStringLiteralDfa_2(int pos, long active0)
-{
- switch (pos)
- {
- default :
- return -1;
- }
-}
-private final int jjStartNfa_2(int pos, long active0)
-{
- return jjMoveNfa_2(jjStopStringLiteralDfa_2(pos, active0), pos + 1);
-}
-private final int jjStartNfaWithStates_2(int pos, int kind, int state)
-{
- jjmatchedKind = kind;
- jjmatchedPos = pos;
- try { curChar = input_stream.readChar(); }
- catch(java.io.IOException e) { return pos + 1; }
- return jjMoveNfa_2(state, pos + 1);
-}
-private final int jjMoveStringLiteralDfa0_2()
-{
- switch(curChar)
- {
- case 40:
- return jjStopAtPos(0, 43);
- case 41:
- return jjStopAtPos(0, 44);
- default :
- return jjMoveNfa_2(0, 0);
- }
-}
-private final int jjMoveNfa_2(int startState, int curPos)
-{
- int[] nextStates;
- int startsAt = 0;
- jjnewStateCnt = 3;
- int i = 1;
- jjstateSet[0] = startState;
- int j, kind = 0x7fffffff;
- for (;;)
- {
- if (++jjround == 0x7fffffff)
- ReInitRounds();
- if (curChar < 64)
- {
- long l = 1L << curChar;
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- if (kind > 45)
- kind = 45;
- break;
- case 1:
- if (kind > 42)
- kind = 42;
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- else if (curChar < 128)
- {
- long l = 1L << (curChar & 077);
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- if (kind > 45)
- kind = 45;
- if (curChar == 92)
- jjstateSet[jjnewStateCnt++] = 1;
- break;
- case 1:
- if (kind > 42)
- kind = 42;
- break;
- case 2:
- if (kind > 45)
- kind = 45;
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- else
- {
- int i2 = (curChar & 0xff) >> 6;
- long l2 = 1L << (curChar & 077);
- MatchLoop: do
- {
- switch(jjstateSet[--i])
- {
- case 0:
- if ((jjbitVec0[i2] & l2) != 0L && kind > 45)
- kind = 45;
- break;
- case 1:
- if ((jjbitVec0[i2] & l2) != 0L && kind > 42)
- kind = 42;
- break;
- default : break;
- }
- } while(i != startsAt);
- }
- if (kind != 0x7fffffff)
- {
- jjmatchedKind = kind;
- jjmatchedPos = curPos;
- kind = 0x7fffffff;
- }
- ++curPos;
- if ((i = jjnewStateCnt) == (startsAt = 3 - (jjnewStateCnt = startsAt)))
- return curPos;
- try { curChar = input_stream.readChar(); }
- catch(java.io.IOException e) { return curPos; }
- }
-}
-static final int[] jjnextStates = {
-};
-public static final String[] jjstrLiteralImages = {
-"", "\15", "\12", "\54", "\115\157\156", "\124\165\145", "\127\145\144",
-"\124\150\165", "\106\162\151", "\123\141\164", "\123\165\156", "\112\141\156",
-"\106\145\142", "\115\141\162", "\101\160\162", "\115\141\171", "\112\165\156",
-"\112\165\154", "\101\165\147", "\123\145\160", "\117\143\164", "\116\157\166",
-"\104\145\143", "\72", null, "\125\124", "\107\115\124", "\105\123\124", "\105\104\124",
-"\103\123\124", "\103\104\124", "\115\123\124", "\115\104\124", "\120\123\124",
-"\120\104\124", null, null, null, null, null, null, null, null, null, null, null, null, null,
-null, };
-public static final String[] lexStateNames = {
- "DEFAULT",
- "INCOMMENT",
- "NESTED_COMMENT",
-};
-public static final int[] jjnewLexState = {
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 0, -1, 2, -1, -1, -1, -1, -1, -1, -1, -1,
-};
-static final long[] jjtoToken = {
- 0x400fffffffffL,
-};
-static final long[] jjtoSkip = {
- 0x5000000000L,
-};
-static final long[] jjtoSpecial = {
- 0x1000000000L,
-};
-static final long[] jjtoMore = {
- 0x3fa000000000L,
-};
-protected SimpleCharStream input_stream;
-private final int[] jjrounds = new int[4];
-private final int[] jjstateSet = new int[8];
-StringBuffer image;
-int jjimageLen;
-int lengthOfMatch;
-protected char curChar;
-public DateTimeParserTokenManager(SimpleCharStream stream){
- if (SimpleCharStream.staticFlag)
- throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
- input_stream = stream;
-}
-public DateTimeParserTokenManager(SimpleCharStream stream, int lexState){
- this(stream);
- SwitchTo(lexState);
-}
-public void ReInit(SimpleCharStream stream)
-{
- jjmatchedPos = jjnewStateCnt = 0;
- curLexState = defaultLexState;
- input_stream = stream;
- ReInitRounds();
-}
-private final void ReInitRounds()
-{
- int i;
- jjround = 0x80000001;
- for (i = 4; i-- > 0;)
- jjrounds[i] = 0x80000000;
-}
-public void ReInit(SimpleCharStream stream, int lexState)
-{
- ReInit(stream);
- SwitchTo(lexState);
-}
-public void SwitchTo(int lexState)
-{
- if (lexState >= 3 || lexState < 0)
- throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
- else
- curLexState = lexState;
-}
-
-protected Token jjFillToken()
-{
- Token t = Token.newToken(jjmatchedKind);
- t.kind = jjmatchedKind;
- String im = jjstrLiteralImages[jjmatchedKind];
- t.image = (im == null) ? input_stream.GetImage() : im;
- t.beginLine = input_stream.getBeginLine();
- t.beginColumn = input_stream.getBeginColumn();
- t.endLine = input_stream.getEndLine();
- t.endColumn = input_stream.getEndColumn();
- return t;
-}
-
-int curLexState = 0;
-int defaultLexState = 0;
-int jjnewStateCnt;
-int jjround;
-int jjmatchedPos;
-int jjmatchedKind;
-
-public Token getNextToken()
-{
- int kind;
- Token specialToken = null;
- Token matchedToken;
- int curPos = 0;
-
- EOFLoop :
- for (;;)
- {
- try
- {
- curChar = input_stream.BeginToken();
- }
- catch(java.io.IOException e)
- {
- jjmatchedKind = 0;
- matchedToken = jjFillToken();
- matchedToken.specialToken = specialToken;
- return matchedToken;
- }
- image = null;
- jjimageLen = 0;
-
- for (;;)
- {
- switch(curLexState)
- {
- case 0:
- jjmatchedKind = 0x7fffffff;
- jjmatchedPos = 0;
- curPos = jjMoveStringLiteralDfa0_0();
- break;
- case 1:
- jjmatchedKind = 0x7fffffff;
- jjmatchedPos = 0;
- curPos = jjMoveStringLiteralDfa0_1();
- break;
- case 2:
- jjmatchedKind = 0x7fffffff;
- jjmatchedPos = 0;
- curPos = jjMoveStringLiteralDfa0_2();
- break;
- }
- if (jjmatchedKind != 0x7fffffff)
- {
- if (jjmatchedPos + 1 < curPos)
- input_stream.backup(curPos - jjmatchedPos - 1);
- if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
- {
- matchedToken = jjFillToken();
- matchedToken.specialToken = specialToken;
- if (jjnewLexState[jjmatchedKind] != -1)
- curLexState = jjnewLexState[jjmatchedKind];
- return matchedToken;
- }
- else if ((jjtoSkip[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
- {
- if ((jjtoSpecial[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
- {
- matchedToken = jjFillToken();
- if (specialToken == null)
- specialToken = matchedToken;
- else
- {
- matchedToken.specialToken = specialToken;
- specialToken = (specialToken.next = matchedToken);
- }
- }
- if (jjnewLexState[jjmatchedKind] != -1)
- curLexState = jjnewLexState[jjmatchedKind];
- continue EOFLoop;
- }
- MoreLexicalActions();
- if (jjnewLexState[jjmatchedKind] != -1)
- curLexState = jjnewLexState[jjmatchedKind];
- curPos = 0;
- jjmatchedKind = 0x7fffffff;
- try {
- curChar = input_stream.readChar();
- continue;
- }
- catch (java.io.IOException e1) { }
- }
- int error_line = input_stream.getEndLine();
- int error_column = input_stream.getEndColumn();
- String error_after = null;
- boolean EOFSeen = false;
- try { input_stream.readChar(); input_stream.backup(1); }
- catch (java.io.IOException e1) {
- EOFSeen = true;
- error_after = curPos <= 1 ? "" : input_stream.GetImage();
- if (curChar == '\n' || curChar == '\r') {
- error_line++;
- error_column = 0;
- }
- else
- error_column++;
- }
- if (!EOFSeen) {
- input_stream.backup(1);
- error_after = curPos <= 1 ? "" : input_stream.GetImage();
- }
- throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR);
- }
- }
-}
-
-void MoreLexicalActions()
-{
- jjimageLen += (lengthOfMatch = jjmatchedPos + 1);
- switch(jjmatchedKind)
- {
- case 39 :
- if (image == null)
- image = new StringBuffer();
- image.append(input_stream.GetSuffix(jjimageLen));
- jjimageLen = 0;
- image.deleteCharAt(image.length() - 2);
- break;
- case 40 :
- if (image == null)
- image = new StringBuffer();
- image.append(input_stream.GetSuffix(jjimageLen));
- jjimageLen = 0;
- commentNest = 1;
- break;
- case 42 :
- if (image == null)
- image = new StringBuffer();
- image.append(input_stream.GetSuffix(jjimageLen));
- jjimageLen = 0;
- image.deleteCharAt(image.length() - 2);
- break;
- case 43 :
- if (image == null)
- image = new StringBuffer();
- image.append(input_stream.GetSuffix(jjimageLen));
- jjimageLen = 0;
- ++commentNest;
- break;
- case 44 :
- if (image == null)
- image = new StringBuffer();
- image.append(input_stream.GetSuffix(jjimageLen));
- jjimageLen = 0;
- --commentNest; if (commentNest == 0) SwitchTo(INCOMMENT);
- break;
- default :
- break;
- }
-}
-}
diff --git a/apache/org/apache/james/mime4j/field/datetime/parser/ParseException.java b/apache/org/apache/james/mime4j/field/datetime/parser/ParseException.java
deleted file mode 100644
index 13b3ff097..000000000
--- a/apache/org/apache/james/mime4j/field/datetime/parser/ParseException.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/* Generated By:JavaCC: Do not edit this line. ParseException.java Version 3.0 */
-/*
- * Copyright 2004 the mime4j project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.james.mime4j.field.datetime.parser;
-
-/**
- * This exception is thrown when parse errors are encountered.
- * You can explicitly create objects of this exception type by
- * calling the method generateParseException in the generated
- * parser.
- *
- * You can modify this class to customize your error reporting
- * mechanisms so long as you retain the public fields.
- */
-public class ParseException extends Exception {
-
- /**
- * This constructor is used by the method "generateParseException"
- * in the generated parser. Calling this constructor generates
- * a new object of this type with the fields "currentToken",
- * "expectedTokenSequences", and "tokenImage" set. The boolean
- * flag "specialConstructor" is also set to true to indicate that
- * this constructor was used to create this object.
- * This constructor calls its super class with the empty string
- * to force the "toString" method of parent class "Throwable" to
- * print the error message in the form:
- * ParseException: <result of getMessage>
- */
- public ParseException(Token currentTokenVal,
- int[][] expectedTokenSequencesVal,
- String[] tokenImageVal
- )
- {
- super("");
- specialConstructor = true;
- currentToken = currentTokenVal;
- expectedTokenSequences = expectedTokenSequencesVal;
- tokenImage = tokenImageVal;
- }
-
- /**
- * The following constructors are for use by you for whatever
- * purpose you can think of. Constructing the exception in this
- * manner makes the exception behave in the normal way - i.e., as
- * documented in the class "Throwable". The fields "errorToken",
- * "expectedTokenSequences", and "tokenImage" do not contain
- * relevant information. The JavaCC generated code does not use
- * these constructors.
- */
-
- public ParseException() {
- super();
- specialConstructor = false;
- }
-
- public ParseException(String message) {
- super(message);
- specialConstructor = false;
- }
-
- /**
- * This variable determines which constructor was used to create
- * this object and thereby affects the semantics of the
- * "getMessage" method (see below).
- */
- protected boolean specialConstructor;
-
- /**
- * This is the last token that has been consumed successfully. If
- * this object has been created due to a parse error, the token
- * followng this token will (therefore) be the first error token.
- */
- public Token currentToken;
-
- /**
- * Each entry in this array is an array of integers. Each array
- * of integers represents a sequence of tokens (by their ordinal
- * values) that is expected at this point of the parse.
- */
- public int[][] expectedTokenSequences;
-
- /**
- * This is a reference to the "tokenImage" array of the generated
- * parser within which the parse error occurred. This array is
- * defined in the generated ...Constants interface.
- */
- public String[] tokenImage;
-
- /**
- * This method has the standard behavior when this object has been
- * created using the standard constructors. Otherwise, it uses
- * "currentToken" and "expectedTokenSequences" to generate a parse
- * error message and returns it. If this object has been created
- * due to a parse error, and you do not catch it (it gets thrown
- * from the parser), then this method is called during the printing
- * of the final stack trace, and hence the correct error message
- * gets displayed.
- */
- public String getMessage() {
- if (!specialConstructor) {
- return super.getMessage();
- }
- StringBuffer expected = new StringBuffer();
- int maxSize = 0;
- for (int i = 0; i < expectedTokenSequences.length; i++) {
- if (maxSize < expectedTokenSequences[i].length) {
- maxSize = expectedTokenSequences[i].length;
- }
- for (int j = 0; j < expectedTokenSequences[i].length; j++) {
- expected.append(tokenImage[expectedTokenSequences[i][j]]).append(" ");
- }
- if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) {
- expected.append("...");
- }
- expected.append(eol).append(" ");
- }
- String retval = "Encountered \"";
- Token tok = currentToken.next;
- for (int i = 0; i < maxSize; i++) {
- if (i != 0) retval += " ";
- if (tok.kind == 0) {
- retval += tokenImage[0];
- break;
- }
- retval += add_escapes(tok.image);
- tok = tok.next;
- }
- retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn;
- retval += "." + eol;
- if (expectedTokenSequences.length == 1) {
- retval += "Was expecting:" + eol + " ";
- } else {
- retval += "Was expecting one of:" + eol + " ";
- }
- retval += expected.toString();
- return retval;
- }
-
- /**
- * The end of line string for this machine.
- */
- protected String eol = System.getProperty("line.separator", "\n");
-
- /**
- * Used to convert raw characters to their escaped version
- * when these raw version cannot be used as part of an ASCII
- * string literal.
- */
- protected String add_escapes(String str) {
- StringBuffer retval = new StringBuffer();
- char ch;
- for (int i = 0; i < str.length(); i++) {
- switch (str.charAt(i))
- {
- case 0 :
- continue;
- case '\b':
- retval.append("\\b");
- continue;
- case '\t':
- retval.append("\\t");
- continue;
- case '\n':
- retval.append("\\n");
- continue;
- case '\f':
- retval.append("\\f");
- continue;
- case '\r':
- retval.append("\\r");
- continue;
- case '\"':
- retval.append("\\\"");
- continue;
- case '\'':
- retval.append("\\\'");
- continue;
- case '\\':
- retval.append("\\\\");
- continue;
- default:
- if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
- String s = "0000" + Integer.toString(ch, 16);
- retval.append("\\u" + s.substring(s.length() - 4, s.length()));
- } else {
- retval.append(ch);
- }
- continue;
- }
- }
- return retval.toString();
- }
-
-}
diff --git a/apache/org/apache/james/mime4j/field/datetime/parser/SimpleCharStream.java b/apache/org/apache/james/mime4j/field/datetime/parser/SimpleCharStream.java
deleted file mode 100644
index 2724529f7..000000000
--- a/apache/org/apache/james/mime4j/field/datetime/parser/SimpleCharStream.java
+++ /dev/null
@@ -1,454 +0,0 @@
-/* Generated By:JavaCC: Do not edit this line. SimpleCharStream.java Version 4.0 */
-/*
- * Copyright 2004 the mime4j project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.james.mime4j.field.datetime.parser;
-
-/**
- * An implementation of interface CharStream, where the stream is assumed to
- * contain only ASCII characters (without unicode processing).
- */
-
-public class SimpleCharStream
-{
- public static final boolean staticFlag = false;
- int bufsize;
- int available;
- int tokenBegin;
- public int bufpos = -1;
- protected int bufline[];
- protected int bufcolumn[];
-
- protected int column = 0;
- protected int line = 1;
-
- protected boolean prevCharIsCR = false;
- protected boolean prevCharIsLF = false;
-
- protected java.io.Reader inputStream;
-
- protected char[] buffer;
- protected int maxNextCharInd = 0;
- protected int inBuf = 0;
- protected int tabSize = 8;
-
- protected void setTabSize(int i) { tabSize = i; }
- protected int getTabSize(int i) { return tabSize; }
-
-
- protected void ExpandBuff(boolean wrapAround)
- {
- char[] newbuffer = new char[bufsize + 2048];
- int newbufline[] = new int[bufsize + 2048];
- int newbufcolumn[] = new int[bufsize + 2048];
-
- try
- {
- if (wrapAround)
- {
- System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
- System.arraycopy(buffer, 0, newbuffer,
- bufsize - tokenBegin, bufpos);
- buffer = newbuffer;
-
- System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
- System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
- bufline = newbufline;
-
- System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
- System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
- bufcolumn = newbufcolumn;
-
- maxNextCharInd = (bufpos += (bufsize - tokenBegin));
- }
- else
- {
- System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
- buffer = newbuffer;
-
- System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
- bufline = newbufline;
-
- System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
- bufcolumn = newbufcolumn;
-
- maxNextCharInd = (bufpos -= tokenBegin);
- }
- }
- catch (Throwable t)
- {
- throw new Error(t.getMessage());
- }
-
-
- bufsize += 2048;
- available = bufsize;
- tokenBegin = 0;
- }
-
- protected void FillBuff() throws java.io.IOException
- {
- if (maxNextCharInd == available)
- {
- if (available == bufsize)
- {
- if (tokenBegin > 2048)
- {
- bufpos = maxNextCharInd = 0;
- available = tokenBegin;
- }
- else if (tokenBegin < 0)
- bufpos = maxNextCharInd = 0;
- else
- ExpandBuff(false);
- }
- else if (available > tokenBegin)
- available = bufsize;
- else if ((tokenBegin - available) < 2048)
- ExpandBuff(true);
- else
- available = tokenBegin;
- }
-
- int i;
- try {
- if ((i = inputStream.read(buffer, maxNextCharInd,
- available - maxNextCharInd)) == -1)
- {
- inputStream.close();
- throw new java.io.IOException();
- }
- else
- maxNextCharInd += i;
- return;
- }
- catch(java.io.IOException e) {
- --bufpos;
- backup(0);
- if (tokenBegin == -1)
- tokenBegin = bufpos;
- throw e;
- }
- }
-
- public char BeginToken() throws java.io.IOException
- {
- tokenBegin = -1;
- char c = readChar();
- tokenBegin = bufpos;
-
- return c;
- }
-
- protected void UpdateLineColumn(char c)
- {
- column++;
-
- if (prevCharIsLF)
- {
- prevCharIsLF = false;
- line += (column = 1);
- }
- else if (prevCharIsCR)
- {
- prevCharIsCR = false;
- if (c == '\n')
- {
- prevCharIsLF = true;
- }
- else
- line += (column = 1);
- }
-
- switch (c)
- {
- case '\r' :
- prevCharIsCR = true;
- break;
- case '\n' :
- prevCharIsLF = true;
- break;
- case '\t' :
- column--;
- column += (tabSize - (column % tabSize));
- break;
- default :
- break;
- }
-
- bufline[bufpos] = line;
- bufcolumn[bufpos] = column;
- }
-
- public char readChar() throws java.io.IOException
- {
- if (inBuf > 0)
- {
- --inBuf;
-
- if (++bufpos == bufsize)
- bufpos = 0;
-
- return buffer[bufpos];
- }
-
- if (++bufpos >= maxNextCharInd)
- FillBuff();
-
- char c = buffer[bufpos];
-
- UpdateLineColumn(c);
- return (c);
- }
-
- /**
- * @deprecated
- * @see #getEndColumn
- */
- @Deprecated
- public int getColumn() {
- return bufcolumn[bufpos];
- }
-
- /**
- * @deprecated
- * @see #getEndLine
- */
- @Deprecated
- public int getLine() {
- return bufline[bufpos];
- }
-
- public int getEndColumn() {
- return bufcolumn[bufpos];
- }
-
- public int getEndLine() {
- return bufline[bufpos];
- }
-
- public int getBeginColumn() {
- return bufcolumn[tokenBegin];
- }
-
- public int getBeginLine() {
- return bufline[tokenBegin];
- }
-
- public void backup(int amount) {
-
- inBuf += amount;
- if ((bufpos -= amount) < 0)
- bufpos += bufsize;
- }
-
- public SimpleCharStream(java.io.Reader dstream, int startline,
- int startcolumn, int buffersize)
- {
- inputStream = dstream;
- line = startline;
- column = startcolumn - 1;
-
- available = bufsize = buffersize;
- buffer = new char[buffersize];
- bufline = new int[buffersize];
- bufcolumn = new int[buffersize];
- }
-
- public SimpleCharStream(java.io.Reader dstream, int startline,
- int startcolumn)
- {
- this(dstream, startline, startcolumn, 4096);
- }
-
- public SimpleCharStream(java.io.Reader dstream)
- {
- this(dstream, 1, 1, 4096);
- }
- public void ReInit(java.io.Reader dstream, int startline,
- int startcolumn, int buffersize)
- {
- inputStream = dstream;
- line = startline;
- column = startcolumn - 1;
-
- if (buffer == null || buffersize != buffer.length)
- {
- available = bufsize = buffersize;
- buffer = new char[buffersize];
- bufline = new int[buffersize];
- bufcolumn = new int[buffersize];
- }
- prevCharIsLF = prevCharIsCR = false;
- tokenBegin = inBuf = maxNextCharInd = 0;
- bufpos = -1;
- }
-
- public void ReInit(java.io.Reader dstream, int startline,
- int startcolumn)
- {
- ReInit(dstream, startline, startcolumn, 4096);
- }
-
- public void ReInit(java.io.Reader dstream)
- {
- ReInit(dstream, 1, 1, 4096);
- }
- public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,
- int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
- {
- this(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
- }
-
- public SimpleCharStream(java.io.InputStream dstream, int startline,
- int startcolumn, int buffersize)
- {
- this(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
- }
-
- public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,
- int startcolumn) throws java.io.UnsupportedEncodingException
- {
- this(dstream, encoding, startline, startcolumn, 4096);
- }
-
- public SimpleCharStream(java.io.InputStream dstream, int startline,
- int startcolumn)
- {
- this(dstream, startline, startcolumn, 4096);
- }
-
- public SimpleCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
- {
- this(dstream, encoding, 1, 1, 4096);
- }
-
- public SimpleCharStream(java.io.InputStream dstream)
- {
- this(dstream, 1, 1, 4096);
- }
-
- public void ReInit(java.io.InputStream dstream, String encoding, int startline,
- int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
- {
- ReInit(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
- }
-
- public void ReInit(java.io.InputStream dstream, int startline,
- int startcolumn, int buffersize)
- {
- ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
- }
-
- public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
- {
- ReInit(dstream, encoding, 1, 1, 4096);
- }
-
- public void ReInit(java.io.InputStream dstream)
- {
- ReInit(dstream, 1, 1, 4096);
- }
- public void ReInit(java.io.InputStream dstream, String encoding, int startline,
- int startcolumn) throws java.io.UnsupportedEncodingException
- {
- ReInit(dstream, encoding, startline, startcolumn, 4096);
- }
- public void ReInit(java.io.InputStream dstream, int startline,
- int startcolumn)
- {
- ReInit(dstream, startline, startcolumn, 4096);
- }
- public String GetImage()
- {
- if (bufpos >= tokenBegin)
- return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
- else
- return new String(buffer, tokenBegin, bufsize - tokenBegin) +
- new String(buffer, 0, bufpos + 1);
- }
-
- public char[] GetSuffix(int len)
- {
- char[] ret = new char[len];
-
- if ((bufpos + 1) >= len)
- System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);
- else
- {
- System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,
- len - bufpos - 1);
- System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);
- }
-
- return ret;
- }
-
- public void Done()
- {
- buffer = null;
- bufline = null;
- bufcolumn = null;
- }
-
- /**
- * Method to adjust line and column numbers for the start of a token.
- */
- public void adjustBeginLineColumn(int newLine, int newCol)
- {
- int start = tokenBegin;
- int len;
-
- if (bufpos >= tokenBegin)
- {
- len = bufpos - tokenBegin + inBuf + 1;
- }
- else
- {
- len = bufsize - tokenBegin + bufpos + 1 + inBuf;
- }
-
- int i = 0, j = 0, k = 0;
- int nextColDiff = 0, columnDiff = 0;
-
- while (i < len &&
- bufline[j = start % bufsize] == bufline[k = ++start % bufsize])
- {
- bufline[j] = newLine;
- nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];
- bufcolumn[j] = newCol + columnDiff;
- columnDiff = nextColDiff;
- i++;
- }
-
- if (i < len)
- {
- bufline[j] = newLine++;
- bufcolumn[j] = newCol + columnDiff;
-
- while (i++ < len)
- {
- if (bufline[j = start % bufsize] != bufline[++start % bufsize])
- bufline[j] = newLine++;
- else
- bufline[j] = newLine;
- }
- }
-
- line = bufline[j];
- column = bufcolumn[j];
- }
-
-}
diff --git a/apache/org/apache/james/mime4j/field/datetime/parser/Token.java b/apache/org/apache/james/mime4j/field/datetime/parser/Token.java
deleted file mode 100644
index 0927a0921..000000000
--- a/apache/org/apache/james/mime4j/field/datetime/parser/Token.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/* Generated By:JavaCC: Do not edit this line. Token.java Version 3.0 */
-/*
- * Copyright 2004 the mime4j project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.james.mime4j.field.datetime.parser;
-
-/**
- * Describes the input token stream.
- */
-
-public class Token {
-
- /**
- * An integer that describes the kind of this token. This numbering
- * system is determined by JavaCCParser, and a table of these numbers is
- * stored in the file ...Constants.java.
- */
- public int kind;
-
- /**
- * beginLine and beginColumn describe the position of the first character
- * of this token; endLine and endColumn describe the position of the
- * last character of this token.
- */
- public int beginLine, beginColumn, endLine, endColumn;
-
- /**
- * The string image of the token.
- */
- public String image;
-
- /**
- * A reference to the next regular (non-special) token from the input
- * stream. If this is the last token from the input stream, or if the
- * token manager has not read tokens beyond this one, this field is
- * set to null. This is true only if this token is also a regular
- * token. Otherwise, see below for a description of the contents of
- * this field.
- */
- public Token next;
-
- /**
- * This field is used to access special tokens that occur prior to this
- * token, but after the immediately preceding regular (non-special) token.
- * If there are no such special tokens, this field is set to null.
- * When there are more than one such special token, this field refers
- * to the last of these special tokens, which in turn refers to the next
- * previous special token through its specialToken field, and so on
- * until the first special token (whose specialToken field is null).
- * The next fields of special tokens refer to other special tokens that
- * immediately follow it (without an intervening regular token). If there
- * is no such token, this field is null.
- */
- public Token specialToken;
-
- /**
- * Returns the image.
- */
- public String toString()
- {
- return image;
- }
-
- /**
- * Returns a new Token object, by default. However, if you want, you
- * can create and return subclass objects based on the value of ofKind.
- * Simply add the cases to the switch for all those special cases.
- * For example, if you have a subclass of Token called IDToken that
- * you want to create if ofKind is ID, simlpy add something like :
- *
- * case MyParserConstants.ID : return new IDToken();
- *
- * to the following switch statement. Then you can cast matchedToken
- * variable to the appropriate type and use it in your lexical actions.
- */
- public static final Token newToken(int ofKind)
- {
- switch(ofKind)
- {
- default : return new Token();
- }
- }
-
-}
diff --git a/apache/org/apache/james/mime4j/field/datetime/parser/TokenMgrError.java b/apache/org/apache/james/mime4j/field/datetime/parser/TokenMgrError.java
deleted file mode 100644
index e7043c1b7..000000000
--- a/apache/org/apache/james/mime4j/field/datetime/parser/TokenMgrError.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 3.0 */
-/*
- * Copyright 2004 the mime4j project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.james.mime4j.field.datetime.parser;
-
-public class TokenMgrError extends Error
-{
- /*
- * Ordinals for various reasons why an Error of this type can be thrown.
- */
-
- /**
- * Lexical error occured.
- */
- static final int LEXICAL_ERROR = 0;
-
- /**
- * An attempt wass made to create a second instance of a static token manager.
- */
- static final int STATIC_LEXER_ERROR = 1;
-
- /**
- * Tried to change to an invalid lexical state.
- */
- static final int INVALID_LEXICAL_STATE = 2;
-
- /**
- * Detected (and bailed out of) an infinite loop in the token manager.
- */
- static final int LOOP_DETECTED = 3;
-
- /**
- * Indicates the reason why the exception is thrown. It will have
- * one of the above 4 values.
- */
- int errorCode;
-
- /**
- * Replaces unprintable characters by their espaced (or unicode escaped)
- * equivalents in the given string
- */
- protected static final String addEscapes(String str) {
- StringBuffer retval = new StringBuffer();
- char ch;
- for (int i = 0; i < str.length(); i++) {
- switch (str.charAt(i))
- {
- case 0 :
- continue;
- case '\b':
- retval.append("\\b");
- continue;
- case '\t':
- retval.append("\\t");
- continue;
- case '\n':
- retval.append("\\n");
- continue;
- case '\f':
- retval.append("\\f");
- continue;
- case '\r':
- retval.append("\\r");
- continue;
- case '\"':
- retval.append("\\\"");
- continue;
- case '\'':
- retval.append("\\\'");
- continue;
- case '\\':
- retval.append("\\\\");
- continue;
- default:
- if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
- String s = "0000" + Integer.toString(ch, 16);
- retval.append("\\u" + s.substring(s.length() - 4, s.length()));
- } else {
- retval.append(ch);
- }
- continue;
- }
- }
- return retval.toString();
- }
-
- /**
- * Returns a detailed message for the Error when it is thrown by the
- * token manager to indicate a lexical error.
- * Parameters :
- * EOFSeen : indicates if EOF caused the lexicl error
- * curLexState : lexical state in which this error occured
- * errorLine : line number when the error occured
- * errorColumn : column number when the error occured
- * errorAfter : prefix that was seen before this error occured
- * curchar : the offending character
- * Note: You can customize the lexical error message by modifying this method.
- */
- protected static String LexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar) {
- return("Lexical error at line " +
- errorLine + ", column " +
- errorColumn + ". Encountered: " +
- (EOFSeen ? "<EOF> " : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int)curChar + "), ") +
- "after : \"" + addEscapes(errorAfter) + "\"");
- }
-
- /**
- * You can also modify the body of this method to customize your error messages.
- * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not
- * of end-users concern, so you can return something like :
- *
- * "Internal Error : Please file a bug report .... "
- *
- * from this method for such cases in the release version of your parser.
- */
- public String getMessage() {
- return super.getMessage();
- }
-
- /*
- * Constructors of various flavors follow.
- */
-
- public TokenMgrError() {
- }
-
- public TokenMgrError(String message, int reason) {
- super(message);
- errorCode = reason;
- }
-
- public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar, int reason) {
- this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason);
- }
-}
diff --git a/apache/org/apache/james/mime4j/util/CharsetUtil.java b/apache/org/apache/james/mime4j/util/CharsetUtil.java
deleted file mode 100644
index 4e712fcdd..000000000
--- a/apache/org/apache/james/mime4j/util/CharsetUtil.java
+++ /dev/null
@@ -1,1249 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j.util;
-
-import java.io.UnsupportedEncodingException;
-import java.nio.charset.IllegalCharsetNameException;
-import java.nio.charset.UnsupportedCharsetException;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.TreeSet;
-
-//BEGIN android-changed: Stubbing out logging
-import org.apache.james.mime4j.Log;
-import org.apache.james.mime4j.LogFactory;
-//END android-changed
-
-/**
- * Utility class for working with character sets. It is somewhat similar to
- * the Java 1.4 <code>java.nio.charset.Charset</code> class but knows many
- * more aliases and is compatible with Java 1.3. It will use a simple detection
- * mechanism to detect what character sets the current VM supports. This will
- * be a sub-set of the character sets listed in the
- * <a href="http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html">
- * Java 1.5 (J2SE5.0) Supported Encodings</a> document.
- * <p>
- * The <a href="http://www.iana.org/assignments/character-sets">
- * IANA Character Sets</a> document has been used to determine the preferred
- * MIME character set names and to get a list of known aliases.
- * <p>
- * This is a complete list of the character sets known to this class:
- * <table>
- * <tr>
- * <td>Canonical (Java) name</td>
- * <td>MIME preferred</td>
- * <td>Aliases</td>
- * </tr>
- * <tr>
- * <td>ASCII</td>
- * <td>US-ASCII</td>
- * <td>ANSI_X3.4-1968 iso-ir-6 ANSI_X3.4-1986 ISO_646.irv:1991 ISO646-US us IBM367 cp367 csASCII ascii7 646 iso_646.irv:1983 </td>
- * </tr>
- * <tr>
- * <td>Big5</td>
- * <td>Big5</td>
- * <td>csBig5 CN-Big5 BIG-FIVE BIGFIVE </td>
- * </tr>
- * <tr>
- * <td>Big5_HKSCS</td>
- * <td>Big5-HKSCS</td>
- * <td>big5hkscs </td>
- * </tr>
- * <tr>
- * <td>Big5_Solaris</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp037</td>
- * <td>IBM037</td>
- * <td>ebcdic-cp-us ebcdic-cp-ca ebcdic-cp-wt ebcdic-cp-nl csIBM037 </td>
- * </tr>
- * <tr>
- * <td>Cp1006</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp1025</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp1026</td>
- * <td>IBM1026</td>
- * <td>csIBM1026 </td>
- * </tr>
- * <tr>
- * <td>Cp1046</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp1047</td>
- * <td>IBM1047</td>
- * <td>IBM-1047 </td>
- * </tr>
- * <tr>
- * <td>Cp1097</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp1098</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp1112</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp1122</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp1123</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp1124</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp1140</td>
- * <td>IBM01140</td>
- * <td>CCSID01140 CP01140 ebcdic-us-37+euro </td>
- * </tr>
- * <tr>
- * <td>Cp1141</td>
- * <td>IBM01141</td>
- * <td>CCSID01141 CP01141 ebcdic-de-273+euro </td>
- * </tr>
- * <tr>
- * <td>Cp1142</td>
- * <td>IBM01142</td>
- * <td>CCSID01142 CP01142 ebcdic-dk-277+euro ebcdic-no-277+euro </td>
- * </tr>
- * <tr>
- * <td>Cp1143</td>
- * <td>IBM01143</td>
- * <td>CCSID01143 CP01143 ebcdic-fi-278+euro ebcdic-se-278+euro </td>
- * </tr>
- * <tr>
- * <td>Cp1144</td>
- * <td>IBM01144</td>
- * <td>CCSID01144 CP01144 ebcdic-it-280+euro </td>
- * </tr>
- * <tr>
- * <td>Cp1145</td>
- * <td>IBM01145</td>
- * <td>CCSID01145 CP01145 ebcdic-es-284+euro </td>
- * </tr>
- * <tr>
- * <td>Cp1146</td>
- * <td>IBM01146</td>
- * <td>CCSID01146 CP01146 ebcdic-gb-285+euro </td>
- * </tr>
- * <tr>
- * <td>Cp1147</td>
- * <td>IBM01147</td>
- * <td>CCSID01147 CP01147 ebcdic-fr-297+euro </td>
- * </tr>
- * <tr>
- * <td>Cp1148</td>
- * <td>IBM01148</td>
- * <td>CCSID01148 CP01148 ebcdic-international-500+euro </td>
- * </tr>
- * <tr>
- * <td>Cp1149</td>
- * <td>IBM01149</td>
- * <td>CCSID01149 CP01149 ebcdic-is-871+euro </td>
- * </tr>
- * <tr>
- * <td>Cp1250</td>
- * <td>windows-1250</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp1251</td>
- * <td>windows-1251</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp1252</td>
- * <td>windows-1252</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp1253</td>
- * <td>windows-1253</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp1254</td>
- * <td>windows-1254</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp1255</td>
- * <td>windows-1255</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp1256</td>
- * <td>windows-1256</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp1257</td>
- * <td>windows-1257</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp1258</td>
- * <td>windows-1258</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp1381</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp1383</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp273</td>
- * <td>IBM273</td>
- * <td>csIBM273 </td>
- * </tr>
- * <tr>
- * <td>Cp277</td>
- * <td>IBM277</td>
- * <td>EBCDIC-CP-DK EBCDIC-CP-NO csIBM277 </td>
- * </tr>
- * <tr>
- * <td>Cp278</td>
- * <td>IBM278</td>
- * <td>CP278 ebcdic-cp-fi ebcdic-cp-se csIBM278 </td>
- * </tr>
- * <tr>
- * <td>Cp280</td>
- * <td>IBM280</td>
- * <td>ebcdic-cp-it csIBM280 </td>
- * </tr>
- * <tr>
- * <td>Cp284</td>
- * <td>IBM284</td>
- * <td>ebcdic-cp-es csIBM284 </td>
- * </tr>
- * <tr>
- * <td>Cp285</td>
- * <td>IBM285</td>
- * <td>ebcdic-cp-gb csIBM285 </td>
- * </tr>
- * <tr>
- * <td>Cp297</td>
- * <td>IBM297</td>
- * <td>ebcdic-cp-fr csIBM297 </td>
- * </tr>
- * <tr>
- * <td>Cp33722</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp420</td>
- * <td>IBM420</td>
- * <td>ebcdic-cp-ar1 csIBM420 </td>
- * </tr>
- * <tr>
- * <td>Cp424</td>
- * <td>IBM424</td>
- * <td>ebcdic-cp-he csIBM424 </td>
- * </tr>
- * <tr>
- * <td>Cp437</td>
- * <td>IBM437</td>
- * <td>437 csPC8CodePage437 </td>
- * </tr>
- * <tr>
- * <td>Cp500</td>
- * <td>IBM500</td>
- * <td>ebcdic-cp-be ebcdic-cp-ch csIBM500 </td>
- * </tr>
- * <tr>
- * <td>Cp737</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp775</td>
- * <td>IBM775</td>
- * <td>csPC775Baltic </td>
- * </tr>
- * <tr>
- * <td>Cp838</td>
- * <td>IBM-Thai</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp850</td>
- * <td>IBM850</td>
- * <td>850 csPC850Multilingual </td>
- * </tr>
- * <tr>
- * <td>Cp852</td>
- * <td>IBM852</td>
- * <td>852 csPCp852 </td>
- * </tr>
- * <tr>
- * <td>Cp855</td>
- * <td>IBM855</td>
- * <td>855 csIBM855 </td>
- * </tr>
- * <tr>
- * <td>Cp856</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp857</td>
- * <td>IBM857</td>
- * <td>857 csIBM857 </td>
- * </tr>
- * <tr>
- * <td>Cp858</td>
- * <td>IBM00858</td>
- * <td>CCSID00858 CP00858 PC-Multilingual-850+euro </td>
- * </tr>
- * <tr>
- * <td>Cp860</td>
- * <td>IBM860</td>
- * <td>860 csIBM860 </td>
- * </tr>
- * <tr>
- * <td>Cp861</td>
- * <td>IBM861</td>
- * <td>861 cp-is csIBM861 </td>
- * </tr>
- * <tr>
- * <td>Cp862</td>
- * <td>IBM862</td>
- * <td>862 csPC862LatinHebrew </td>
- * </tr>
- * <tr>
- * <td>Cp863</td>
- * <td>IBM863</td>
- * <td>863 csIBM863 </td>
- * </tr>
- * <tr>
- * <td>Cp864</td>
- * <td>IBM864</td>
- * <td>cp864 csIBM864 </td>
- * </tr>
- * <tr>
- * <td>Cp865</td>
- * <td>IBM865</td>
- * <td>865 csIBM865 </td>
- * </tr>
- * <tr>
- * <td>Cp866</td>
- * <td>IBM866</td>
- * <td>866 csIBM866 </td>
- * </tr>
- * <tr>
- * <td>Cp868</td>
- * <td>IBM868</td>
- * <td>cp-ar csIBM868 </td>
- * </tr>
- * <tr>
- * <td>Cp869</td>
- * <td>IBM869</td>
- * <td>cp-gr csIBM869 </td>
- * </tr>
- * <tr>
- * <td>Cp870</td>
- * <td>IBM870</td>
- * <td>ebcdic-cp-roece ebcdic-cp-yu csIBM870 </td>
- * </tr>
- * <tr>
- * <td>Cp871</td>
- * <td>IBM871</td>
- * <td>ebcdic-cp-is csIBM871 </td>
- * </tr>
- * <tr>
- * <td>Cp875</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp918</td>
- * <td>IBM918</td>
- * <td>ebcdic-cp-ar2 csIBM918 </td>
- * </tr>
- * <tr>
- * <td>Cp921</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp922</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp930</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp933</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp935</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp937</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp939</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp942</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp942C</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp943</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp943C</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp948</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp949</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp949C</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp950</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp964</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>Cp970</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>EUC_CN</td>
- * <td>GB2312</td>
- * <td>x-EUC-CN csGB2312 euccn euc-cn gb2312-80 gb2312-1980 CN-GB CN-GB-ISOIR165 </td>
- * </tr>
- * <tr>
- * <td>EUC_JP</td>
- * <td>EUC-JP</td>
- * <td>csEUCPkdFmtJapanese Extended_UNIX_Code_Packed_Format_for_Japanese eucjis x-eucjp eucjp x-euc-jp </td>
- * </tr>
- * <tr>
- * <td>EUC_JP_LINUX</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>EUC_JP_Solaris</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>EUC_KR</td>
- * <td>EUC-KR</td>
- * <td>csEUCKR ksc5601 5601 ksc5601_1987 ksc_5601 ksc5601-1987 ks_c_5601-1987 euckr </td>
- * </tr>
- * <tr>
- * <td>EUC_TW</td>
- * <td>EUC-TW</td>
- * <td>x-EUC-TW cns11643 euctw </td>
- * </tr>
- * <tr>
- * <td>GB18030</td>
- * <td>GB18030</td>
- * <td>gb18030-2000 </td>
- * </tr>
- * <tr>
- * <td>GBK</td>
- * <td>windows-936</td>
- * <td>CP936 MS936 ms_936 x-mswin-936 </td>
- * </tr>
- * <tr>
- * <td>ISCII91</td>
- * <td>?</td>
- * <td>x-ISCII91 iscii </td>
- * </tr>
- * <tr>
- * <td>ISO2022CN</td>
- * <td>ISO-2022-CN</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>ISO2022JP</td>
- * <td>ISO-2022-JP</td>
- * <td>csISO2022JP JIS jis_encoding csjisencoding </td>
- * </tr>
- * <tr>
- * <td>ISO2022KR</td>
- * <td>ISO-2022-KR</td>
- * <td>csISO2022KR </td>
- * </tr>
- * <tr>
- * <td>ISO2022_CN_CNS</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>ISO2022_CN_GB</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>ISO8859_1</td>
- * <td>ISO-8859-1</td>
- * <td>ISO_8859-1:1987 iso-ir-100 ISO_8859-1 latin1 l1 IBM819 CP819 csISOLatin1 8859_1 819 IBM-819 ISO8859-1 ISO_8859_1 </td>
- * </tr>
- * <tr>
- * <td>ISO8859_13</td>
- * <td>ISO-8859-13</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>ISO8859_15</td>
- * <td>ISO-8859-15</td>
- * <td>ISO_8859-15 Latin-9 8859_15 csISOlatin9 IBM923 cp923 923 L9 IBM-923 ISO8859-15 LATIN9 LATIN0 csISOlatin0 ISO8859_15_FDIS </td>
- * </tr>
- * <tr>
- * <td>ISO8859_2</td>
- * <td>ISO-8859-2</td>
- * <td>ISO_8859-2:1987 iso-ir-101 ISO_8859-2 latin2 l2 csISOLatin2 8859_2 iso8859_2 </td>
- * </tr>
- * <tr>
- * <td>ISO8859_3</td>
- * <td>ISO-8859-3</td>
- * <td>ISO_8859-3:1988 iso-ir-109 ISO_8859-3 latin3 l3 csISOLatin3 8859_3 </td>
- * </tr>
- * <tr>
- * <td>ISO8859_4</td>
- * <td>ISO-8859-4</td>
- * <td>ISO_8859-4:1988 iso-ir-110 ISO_8859-4 latin4 l4 csISOLatin4 8859_4 </td>
- * </tr>
- * <tr>
- * <td>ISO8859_5</td>
- * <td>ISO-8859-5</td>
- * <td>ISO_8859-5:1988 iso-ir-144 ISO_8859-5 cyrillic csISOLatinCyrillic 8859_5 </td>
- * </tr>
- * <tr>
- * <td>ISO8859_6</td>
- * <td>ISO-8859-6</td>
- * <td>ISO_8859-6:1987 iso-ir-127 ISO_8859-6 ECMA-114 ASMO-708 arabic csISOLatinArabic 8859_6 </td>
- * </tr>
- * <tr>
- * <td>ISO8859_7</td>
- * <td>ISO-8859-7</td>
- * <td>ISO_8859-7:1987 iso-ir-126 ISO_8859-7 ELOT_928 ECMA-118 greek greek8 csISOLatinGreek 8859_7 sun_eu_greek </td>
- * </tr>
- * <tr>
- * <td>ISO8859_8</td>
- * <td>ISO-8859-8</td>
- * <td>ISO_8859-8:1988 iso-ir-138 ISO_8859-8 hebrew csISOLatinHebrew 8859_8 </td>
- * </tr>
- * <tr>
- * <td>ISO8859_9</td>
- * <td>ISO-8859-9</td>
- * <td>ISO_8859-9:1989 iso-ir-148 ISO_8859-9 latin5 l5 csISOLatin5 8859_9 </td>
- * </tr>
- * <tr>
- * <td>JISAutoDetect</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>JIS_C6626-1983</td>
- * <td>JIS_C6626-1983</td>
- * <td>x-JIS0208 JIS0208 csISO87JISX0208 x0208 JIS_X0208-1983 iso-ir-87 </td>
- * </tr>
- * <tr>
- * <td>JIS_X0201</td>
- * <td>JIS_X0201</td>
- * <td>X0201 JIS0201 csHalfWidthKatakana </td>
- * </tr>
- * <tr>
- * <td>JIS_X0212-1990</td>
- * <td>JIS_X0212-1990</td>
- * <td>iso-ir-159 x0212 JIS0212 csISO159JISX02121990 </td>
- * </tr>
- * <tr>
- * <td>KOI8_R</td>
- * <td>KOI8-R</td>
- * <td>csKOI8R koi8 </td>
- * </tr>
- * <tr>
- * <td>MS874</td>
- * <td>windows-874</td>
- * <td>cp874 </td>
- * </tr>
- * <tr>
- * <td>MS932</td>
- * <td>Windows-31J</td>
- * <td>windows-932 csWindows31J x-ms-cp932 </td>
- * </tr>
- * <tr>
- * <td>MS949</td>
- * <td>windows-949</td>
- * <td>windows949 ms_949 x-windows-949 </td>
- * </tr>
- * <tr>
- * <td>MS950</td>
- * <td>windows-950</td>
- * <td>x-windows-950 </td>
- * </tr>
- * <tr>
- * <td>MS950_HKSCS</td>
- * <td></td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>MacArabic</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>MacCentralEurope</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>MacCroatian</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>MacCyrillic</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>MacDingbat</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>MacGreek</td>
- * <td>MacGreek</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>MacHebrew</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>MacIceland</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>MacRoman</td>
- * <td>MacRoman</td>
- * <td>Macintosh MAC csMacintosh </td>
- * </tr>
- * <tr>
- * <td>MacRomania</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>MacSymbol</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>MacThai</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>MacTurkish</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>MacUkraine</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>SJIS</td>
- * <td>Shift_JIS</td>
- * <td>MS_Kanji csShiftJIS shift-jis x-sjis pck </td>
- * </tr>
- * <tr>
- * <td>TIS620</td>
- * <td>TIS-620</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>UTF-16</td>
- * <td>UTF-16</td>
- * <td>UTF_16 </td>
- * </tr>
- * <tr>
- * <td>UTF8</td>
- * <td>UTF-8</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>UnicodeBig</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>UnicodeBigUnmarked</td>
- * <td>UTF-16BE</td>
- * <td>X-UTF-16BE UTF_16BE ISO-10646-UCS-2 </td>
- * </tr>
- * <tr>
- * <td>UnicodeLittle</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * <tr>
- * <td>UnicodeLittleUnmarked</td>
- * <td>UTF-16LE</td>
- * <td>UTF_16LE X-UTF-16LE </td>
- * </tr>
- * <tr>
- * <td>x-Johab</td>
- * <td>johab</td>
- * <td>johab cp1361 ms1361 ksc5601-1992 ksc5601_1992 </td>
- * </tr>
- * <tr>
- * <td>x-iso-8859-11</td>
- * <td>?</td>
- * <td></td>
- * </tr>
- * </table>
- *
- *
- * @version $Id: CharsetUtil.java,v 1.1 2004/10/25 07:26:46 ntherning Exp $
- */
-public class CharsetUtil {
- private static Log log = LogFactory.getLog(CharsetUtil.class);
-
- private static class Charset implements Comparable<Charset> {
- private String canonical = null;
- private String mime = null;
- private String[] aliases = null;
-
- private Charset(String canonical, String mime, String[] aliases) {
- this.canonical = canonical;
- this.mime = mime;
- this.aliases = aliases;
- }
-
- public int compareTo(Charset c) {
- return this.canonical.compareTo(c.canonical);
- }
- }
-
- private static Charset[] JAVA_CHARSETS = {
- new Charset("ISO8859_1", "ISO-8859-1",
- new String[] {"ISO_8859-1:1987", "iso-ir-100", "ISO_8859-1",
- "latin1", "l1", "IBM819", "CP819",
- "csISOLatin1", "8859_1", "819", "IBM-819",
- "ISO8859-1", "ISO_8859_1"}),
- new Charset("ISO8859_2", "ISO-8859-2",
- new String[] {"ISO_8859-2:1987", "iso-ir-101", "ISO_8859-2",
- "latin2", "l2", "csISOLatin2", "8859_2",
- "iso8859_2"}),
- new Charset("ISO8859_3", "ISO-8859-3", new String[] {"ISO_8859-3:1988", "iso-ir-109", "ISO_8859-3", "latin3", "l3", "csISOLatin3", "8859_3"}),
- new Charset("ISO8859_4", "ISO-8859-4",
- new String[] {"ISO_8859-4:1988", "iso-ir-110", "ISO_8859-4",
- "latin4", "l4", "csISOLatin4", "8859_4"}),
- new Charset("ISO8859_5", "ISO-8859-5",
- new String[] {"ISO_8859-5:1988", "iso-ir-144", "ISO_8859-5",
- "cyrillic", "csISOLatinCyrillic", "8859_5"}),
- new Charset("ISO8859_6", "ISO-8859-6", new String[] {"ISO_8859-6:1987", "iso-ir-127", "ISO_8859-6", "ECMA-114", "ASMO-708", "arabic", "csISOLatinArabic", "8859_6"}),
- new Charset("ISO8859_7", "ISO-8859-7",
- new String[] {"ISO_8859-7:1987", "iso-ir-126", "ISO_8859-7",
- "ELOT_928", "ECMA-118", "greek", "greek8",
- "csISOLatinGreek", "8859_7", "sun_eu_greek"}),
- new Charset("ISO8859_8", "ISO-8859-8", new String[] {"ISO_8859-8:1988", "iso-ir-138", "ISO_8859-8", "hebrew", "csISOLatinHebrew", "8859_8"}),
- new Charset("ISO8859_9", "ISO-8859-9",
- new String[] {"ISO_8859-9:1989", "iso-ir-148", "ISO_8859-9",
- "latin5", "l5", "csISOLatin5", "8859_9"}),
-
- new Charset("ISO8859_13", "ISO-8859-13", new String[] {}),
- new Charset("ISO8859_15", "ISO-8859-15",
- new String[] {"ISO_8859-15", "Latin-9", "8859_15",
- "csISOlatin9", "IBM923", "cp923", "923", "L9",
- "IBM-923", "ISO8859-15", "LATIN9", "LATIN0",
- "csISOlatin0", "ISO8859_15_FDIS"}),
- new Charset("KOI8_R", "KOI8-R", new String[] {"csKOI8R", "koi8"}),
- new Charset("ASCII", "US-ASCII",
- new String[] {"ANSI_X3.4-1968", "iso-ir-6",
- "ANSI_X3.4-1986", "ISO_646.irv:1991",
- "ISO646-US", "us", "IBM367", "cp367",
- "csASCII", "ascii7", "646", "iso_646.irv:1983"}),
- new Charset("UTF8", "UTF-8", new String[] {}),
- new Charset("UTF-16", "UTF-16", new String[] {"UTF_16"}),
- new Charset("UnicodeBigUnmarked", "UTF-16BE", new String[] {"X-UTF-16BE", "UTF_16BE", "ISO-10646-UCS-2"}),
- new Charset("UnicodeLittleUnmarked", "UTF-16LE", new String[] {"UTF_16LE", "X-UTF-16LE"}),
- new Charset("Big5", "Big5", new String[] {"csBig5", "CN-Big5", "BIG-FIVE", "BIGFIVE"}),
- new Charset("Big5_HKSCS", "Big5-HKSCS", new String[] {"big5hkscs"}),
- new Charset("EUC_JP", "EUC-JP",
- new String[] {"csEUCPkdFmtJapanese",
- "Extended_UNIX_Code_Packed_Format_for_Japanese",
- "eucjis", "x-eucjp", "eucjp", "x-euc-jp"}),
- new Charset("EUC_KR", "EUC-KR",
- new String[] {"csEUCKR", "ksc5601", "5601", "ksc5601_1987",
- "ksc_5601", "ksc5601-1987", "ks_c_5601-1987",
- "euckr"}),
- new Charset("GB18030", "GB18030", new String[] {"gb18030-2000"}),
- new Charset("EUC_CN", "GB2312", new String[] {"x-EUC-CN", "csGB2312", "euccn", "euc-cn", "gb2312-80", "gb2312-1980", "CN-GB", "CN-GB-ISOIR165"}),
- new Charset("GBK", "windows-936", new String[] {"CP936", "MS936", "ms_936", "x-mswin-936"}),
-
- new Charset("Cp037", "IBM037", new String[] {"ebcdic-cp-us", "ebcdic-cp-ca", "ebcdic-cp-wt", "ebcdic-cp-nl", "csIBM037"}),
- new Charset("Cp273", "IBM273", new String[] {"csIBM273"}),
- new Charset("Cp277", "IBM277", new String[] {"EBCDIC-CP-DK", "EBCDIC-CP-NO", "csIBM277"}),
- new Charset("Cp278", "IBM278", new String[] {"CP278", "ebcdic-cp-fi", "ebcdic-cp-se", "csIBM278"}),
- new Charset("Cp280", "IBM280", new String[] {"ebcdic-cp-it", "csIBM280"}),
- new Charset("Cp284", "IBM284", new String[] {"ebcdic-cp-es", "csIBM284"}),
- new Charset("Cp285", "IBM285", new String[] {"ebcdic-cp-gb", "csIBM285"}),
- new Charset("Cp297", "IBM297", new String[] {"ebcdic-cp-fr", "csIBM297"}),
- new Charset("Cp420", "IBM420", new String[] {"ebcdic-cp-ar1", "csIBM420"}),
- new Charset("Cp424", "IBM424", new String[] {"ebcdic-cp-he", "csIBM424"}),
- new Charset("Cp437", "IBM437", new String[] {"437", "csPC8CodePage437"}),
- new Charset("Cp500", "IBM500", new String[] {"ebcdic-cp-be", "ebcdic-cp-ch", "csIBM500"}),
- new Charset("Cp775", "IBM775", new String[] {"csPC775Baltic"}),
- new Charset("Cp838", "IBM-Thai", new String[] {}),
- new Charset("Cp850", "IBM850", new String[] {"850", "csPC850Multilingual"}),
- new Charset("Cp852", "IBM852", new String[] {"852", "csPCp852"}),
- new Charset("Cp855", "IBM855", new String[] {"855", "csIBM855"}),
- new Charset("Cp857", "IBM857", new String[] {"857", "csIBM857"}),
- new Charset("Cp858", "IBM00858",
- new String[] {"CCSID00858", "CP00858",
- "PC-Multilingual-850+euro"}),
- new Charset("Cp860", "IBM860", new String[] {"860", "csIBM860"}),
- new Charset("Cp861", "IBM861", new String[] {"861", "cp-is", "csIBM861"}),
- new Charset("Cp862", "IBM862", new String[] {"862", "csPC862LatinHebrew"}),
- new Charset("Cp863", "IBM863", new String[] {"863", "csIBM863"}),
- new Charset("Cp864", "IBM864", new String[] {"cp864", "csIBM864"}),
- new Charset("Cp865", "IBM865", new String[] {"865", "csIBM865"}),
- new Charset("Cp866", "IBM866", new String[] {"866", "csIBM866"}),
- new Charset("Cp868", "IBM868", new String[] {"cp-ar", "csIBM868"}),
- new Charset("Cp869", "IBM869", new String[] {"cp-gr", "csIBM869"}),
- new Charset("Cp870", "IBM870", new String[] {"ebcdic-cp-roece", "ebcdic-cp-yu", "csIBM870"}),
- new Charset("Cp871", "IBM871", new String[] {"ebcdic-cp-is", "csIBM871"}),
- new Charset("Cp918", "IBM918", new String[] {"ebcdic-cp-ar2", "csIBM918"}),
- new Charset("Cp1026", "IBM1026", new String[] {"csIBM1026"}),
- new Charset("Cp1047", "IBM1047", new String[] {"IBM-1047"}),
- new Charset("Cp1140", "IBM01140",
- new String[] {"CCSID01140", "CP01140",
- "ebcdic-us-37+euro"}),
- new Charset("Cp1141", "IBM01141",
- new String[] {"CCSID01141", "CP01141",
- "ebcdic-de-273+euro"}),
- new Charset("Cp1142", "IBM01142", new String[] {"CCSID01142", "CP01142", "ebcdic-dk-277+euro", "ebcdic-no-277+euro"}),
- new Charset("Cp1143", "IBM01143", new String[] {"CCSID01143", "CP01143", "ebcdic-fi-278+euro", "ebcdic-se-278+euro"}),
- new Charset("Cp1144", "IBM01144", new String[] {"CCSID01144", "CP01144", "ebcdic-it-280+euro"}),
- new Charset("Cp1145", "IBM01145", new String[] {"CCSID01145", "CP01145", "ebcdic-es-284+euro"}),
- new Charset("Cp1146", "IBM01146", new String[] {"CCSID01146", "CP01146", "ebcdic-gb-285+euro"}),
- new Charset("Cp1147", "IBM01147", new String[] {"CCSID01147", "CP01147", "ebcdic-fr-297+euro"}),
- new Charset("Cp1148", "IBM01148", new String[] {"CCSID01148", "CP01148", "ebcdic-international-500+euro"}),
- new Charset("Cp1149", "IBM01149", new String[] {"CCSID01149", "CP01149", "ebcdic-is-871+euro"}),
- new Charset("Cp1250", "windows-1250", new String[] {}),
- new Charset("Cp1251", "windows-1251", new String[] {}),
- new Charset("Cp1252", "windows-1252", new String[] {}),
- new Charset("Cp1253", "windows-1253", new String[] {}),
- new Charset("Cp1254", "windows-1254", new String[] {}),
- new Charset("Cp1255", "windows-1255", new String[] {}),
- new Charset("Cp1256", "windows-1256", new String[] {}),
- new Charset("Cp1257", "windows-1257", new String[] {}),
- new Charset("Cp1258", "windows-1258", new String[] {}),
- new Charset("ISO2022CN", "ISO-2022-CN", new String[] {}),
- new Charset("ISO2022JP", "ISO-2022-JP", new String[] {"csISO2022JP", "JIS", "jis_encoding", "csjisencoding"}),
- new Charset("ISO2022KR", "ISO-2022-KR", new String[] {"csISO2022KR"}),
- new Charset("JIS_X0201", "JIS_X0201", new String[] {"X0201", "JIS0201", "csHalfWidthKatakana"}),
- new Charset("JIS_X0212-1990", "JIS_X0212-1990", new String[] {"iso-ir-159", "x0212", "JIS0212", "csISO159JISX02121990"}),
- new Charset("JIS_C6626-1983", "JIS_C6626-1983", new String[] {"x-JIS0208", "JIS0208", "csISO87JISX0208", "x0208", "JIS_X0208-1983", "iso-ir-87"}),
- new Charset("SJIS", "Shift_JIS", new String[] {"MS_Kanji", "csShiftJIS", "shift-jis", "x-sjis", "pck"}),
- new Charset("TIS620", "TIS-620", new String[] {}),
- new Charset("MS932", "Windows-31J", new String[] {"windows-932", "csWindows31J", "x-ms-cp932"}),
- new Charset("EUC_TW", "EUC-TW", new String[] {"x-EUC-TW", "cns11643", "euctw"}),
- new Charset("x-Johab", "johab", new String[] {"johab", "cp1361", "ms1361", "ksc5601-1992", "ksc5601_1992"}),
- new Charset("MS950_HKSCS", "", new String[] {}),
- new Charset("MS874", "windows-874", new String[] {"cp874"}),
- new Charset("MS949", "windows-949", new String[] {"windows949", "ms_949", "x-windows-949"}),
- new Charset("MS950", "windows-950", new String[] {"x-windows-950"}),
-
- new Charset("Cp737", null, new String[] {}),
- new Charset("Cp856", null, new String[] {}),
- new Charset("Cp875", null, new String[] {}),
- new Charset("Cp921", null, new String[] {}),
- new Charset("Cp922", null, new String[] {}),
- new Charset("Cp930", null, new String[] {}),
- new Charset("Cp933", null, new String[] {}),
- new Charset("Cp935", null, new String[] {}),
- new Charset("Cp937", null, new String[] {}),
- new Charset("Cp939", null, new String[] {}),
- new Charset("Cp942", null, new String[] {}),
- new Charset("Cp942C", null, new String[] {}),
- new Charset("Cp943", null, new String[] {}),
- new Charset("Cp943C", null, new String[] {}),
- new Charset("Cp948", null, new String[] {}),
- new Charset("Cp949", null, new String[] {}),
- new Charset("Cp949C", null, new String[] {}),
- new Charset("Cp950", null, new String[] {}),
- new Charset("Cp964", null, new String[] {}),
- new Charset("Cp970", null, new String[] {}),
- new Charset("Cp1006", null, new String[] {}),
- new Charset("Cp1025", null, new String[] {}),
- new Charset("Cp1046", null, new String[] {}),
- new Charset("Cp1097", null, new String[] {}),
- new Charset("Cp1098", null, new String[] {}),
- new Charset("Cp1112", null, new String[] {}),
- new Charset("Cp1122", null, new String[] {}),
- new Charset("Cp1123", null, new String[] {}),
- new Charset("Cp1124", null, new String[] {}),
- new Charset("Cp1381", null, new String[] {}),
- new Charset("Cp1383", null, new String[] {}),
- new Charset("Cp33722", null, new String[] {}),
- new Charset("Big5_Solaris", null, new String[] {}),
- new Charset("EUC_JP_LINUX", null, new String[] {}),
- new Charset("EUC_JP_Solaris", null, new String[] {}),
- new Charset("ISCII91", null, new String[] {"x-ISCII91", "iscii"}),
- new Charset("ISO2022_CN_CNS", null, new String[] {}),
- new Charset("ISO2022_CN_GB", null, new String[] {}),
- new Charset("x-iso-8859-11", null, new String[] {}),
- new Charset("JISAutoDetect", null, new String[] {}),
- new Charset("MacArabic", null, new String[] {}),
- new Charset("MacCentralEurope", null, new String[] {}),
- new Charset("MacCroatian", null, new String[] {}),
- new Charset("MacCyrillic", null, new String[] {}),
- new Charset("MacDingbat", null, new String[] {}),
- new Charset("MacGreek", "MacGreek", new String[] {}),
- new Charset("MacHebrew", null, new String[] {}),
- new Charset("MacIceland", null, new String[] {}),
- new Charset("MacRoman", "MacRoman", new String[] {"Macintosh", "MAC", "csMacintosh"}),
- new Charset("MacRomania", null, new String[] {}),
- new Charset("MacSymbol", null, new String[] {}),
- new Charset("MacThai", null, new String[] {}),
- new Charset("MacTurkish", null, new String[] {}),
- new Charset("MacUkraine", null, new String[] {}),
- new Charset("UnicodeBig", null, new String[] {}),
- new Charset("UnicodeLittle", null, new String[] {})
- };
-
- /**
- * Contains the canonical names of character sets which can be used to
- * decode bytes into Java chars.
- */
- private static TreeSet<String> decodingSupported = null;
-
- /**
- * Contains the canonical names of character sets which can be used to
- * encode Java chars into bytes.
- */
- private static TreeSet<String> encodingSupported = null;
-
- /**
- * Maps character set names to Charset objects. All possible names of
- * a charset will be mapped to the Charset.
- */
- private static HashMap<String, Charset> charsetMap = null;
-
- static {
- decodingSupported = new TreeSet<String>();
- encodingSupported = new TreeSet<String>();
- byte[] dummy = new byte[] {'d', 'u', 'm', 'm', 'y'};
- for (int i = 0; i < JAVA_CHARSETS.length; i++) {
- try {
- String s = new String(dummy, JAVA_CHARSETS[i].canonical);
- decodingSupported.add(JAVA_CHARSETS[i].canonical.toLowerCase(Locale.US));
- } catch (UnsupportedOperationException e) {
- } catch (UnsupportedEncodingException e) {
- }
- try {
- "dummy".getBytes(JAVA_CHARSETS[i].canonical);
- encodingSupported.add(JAVA_CHARSETS[i].canonical.toLowerCase(Locale.US));
- } catch (UnsupportedOperationException e) {
- } catch (UnsupportedEncodingException e) {
- }
- }
-
- charsetMap = new HashMap<String, Charset>();
- for (int i = 0; i < JAVA_CHARSETS.length; i++) {
- Charset c = JAVA_CHARSETS[i];
- charsetMap.put(c.canonical.toLowerCase(Locale.US), c);
- if (c.mime != null) {
- charsetMap.put(c.mime.toLowerCase(Locale.US), c);
- }
- if (c.aliases != null) {
- for (int j = 0; j < c.aliases.length; j++) {
- charsetMap.put(c.aliases[j].toLowerCase(Locale.US), c);
- }
- }
- }
-
- if (log.isDebugEnabled()) {
- log.debug("Character sets which support decoding: "
- + decodingSupported);
- log.debug("Character sets which support encoding: "
- + encodingSupported);
- }
- }
-
- /**
- * ANDROID: THE FOLLOWING SET OF STATIC STRINGS ARE COPIED FROM A NEWER VERSION OF MIME4J
- */
-
- /** carriage return - line feed sequence */
- public static final String CRLF = "\r\n";
-
- /** US-ASCII CR, carriage return (13) */
- public static final int CR = '\r';
-
- /** US-ASCII LF, line feed (10) */
- public static final int LF = '\n';
-
- /** US-ASCII SP, space (32) */
- public static final int SP = ' ';
-
- /** US-ASCII HT, horizontal-tab (9)*/
- public static final int HT = '\t';
-
- public static final java.nio.charset.Charset US_ASCII = java.nio.charset.Charset
- .forName("US-ASCII");
-
- public static final java.nio.charset.Charset ISO_8859_1 = java.nio.charset.Charset
- .forName("ISO-8859-1");
-
- public static final java.nio.charset.Charset UTF_8 = java.nio.charset.Charset
- .forName("UTF-8");
-
- /**
- * Returns <code>true</code> if the specified character is a whitespace
- * character (CR, LF, SP or HT).
- *
- * ANDROID: COPIED FROM A NEWER VERSION OF MIME4J
- *
- * @param ch
- * character to test.
- * @return <code>true</code> if the specified character is a whitespace
- * character, <code>false</code> otherwise.
- */
- public static boolean isWhitespace(char ch) {
- return ch == SP || ch == HT || ch == CR || ch == LF;
- }
-
- /**
- * Returns <code>true</code> if the specified string consists entirely of
- * whitespace characters.
- *
- * ANDROID: COPIED FROM A NEWER VERSION OF MIME4J
- *
- * @param s
- * string to test.
- * @return <code>true</code> if the specified string consists entirely of
- * whitespace characters, <code>false</code> otherwise.
- */
- public static boolean isWhitespace(final String s) {
- if (s == null) {
- throw new IllegalArgumentException("String may not be null");
- }
- final int len = s.length();
- for (int i = 0; i < len; i++) {
- if (!isWhitespace(s.charAt(i))) {
- return false;
- }
- }
- return true;
- }
-
- /**
- * Determines if the VM supports encoding (chars to bytes) the
- * specified character set. NOTE: the given character set name may
- * not be known to the VM even if this method returns <code>true</code>.
- * Use {@link #toJavaCharset(String)} to get the canonical Java character
- * set name.
- *
- * @param charsetName the characters set name.
- * @return <code>true</code> if encoding is supported, <code>false</code>
- * otherwise.
- */
- public static boolean isEncodingSupported(String charsetName) {
- return encodingSupported.contains(charsetName.toLowerCase(Locale.US));
- }
-
- /**
- * Determines if the VM supports decoding (bytes to chars) the
- * specified character set. NOTE: the given character set name may
- * not be known to the VM even if this method returns <code>true</code>.
- * Use {@link #toJavaCharset(String)} to get the canonical Java character
- * set name.
- *
- * @param charsetName the characters set name.
- * @return <code>true</code> if decoding is supported, <code>false</code>
- * otherwise.
- */
- public static boolean isDecodingSupported(String charsetName) {
- return decodingSupported.contains(charsetName.toLowerCase(Locale.US));
- }
-
- /**
- * Gets the preferred MIME character set name for the specified
- * character set or <code>null</code> if not known.
- *
- * @param charsetName the character set name to look for.
- * @return the MIME preferred name or <code>null</code> if not known.
- */
- public static String toMimeCharset(String charsetName) {
- Charset c = charsetMap.get(charsetName.toLowerCase(Locale.US));
- if (c != null) {
- return c.mime;
- }
- return null;
- }
-
- /**
- * Gets the canonical Java character set name for the specified
- * character set or <code>null</code> if not known. This should be
- * called before doing any conversions using the Java API. NOTE:
- * you must use {@link #isEncodingSupported(String)} or
- * {@link #isDecodingSupported(String)} to make sure the returned
- * Java character set is supported by the current VM.
- *
- * @param charsetName the character set name to look for.
- * @return the canonical Java name or <code>null</code> if not known.
- */
- public static String toJavaCharset(String charsetName) {
- Charset c = charsetMap.get(charsetName.toLowerCase(Locale.US));
- if (c != null) {
- return c.canonical;
- }
- return null;
- }
-
- public static java.nio.charset.Charset getCharset(String charsetName) {
- String defaultCharset = "ISO-8859-1";
-
- // Use the default chareset if given charset is null
- if(charsetName == null) charsetName = defaultCharset;
-
- try {
- return java.nio.charset.Charset.forName(charsetName);
- } catch (IllegalCharsetNameException e) {
- log.info("Illegal charset " + charsetName + ", fallback to " +
- defaultCharset + ": " + e);
- // Use default charset on exception
- return java.nio.charset.Charset.forName(defaultCharset);
- } catch (UnsupportedCharsetException ex) {
- log.info("Unsupported charset " + charsetName + ", fallback to " +
- defaultCharset + ": " + ex);
- // Use default charset on exception
- return java.nio.charset.Charset.forName(defaultCharset);
- }
-
- }
- /*
- * Uncomment the code below and run the main method to regenerate the
- * Javadoc table above when the known charsets change.
- */
-
- /*
- private static String dumpHtmlTable() {
- LinkedList l = new LinkedList(Arrays.asList(JAVA_CHARSETS));
- Collections.sort(l);
- StringBuffer sb = new StringBuffer();
- sb.append(" * <table>\n");
- sb.append(" * <tr>\n");
- sb.append(" * <td>Canonical (Java) name</td>\n");
- sb.append(" * <td>MIME preferred</td>\n");
- sb.append(" * <td>Aliases</td>\n");
- sb.append(" * </tr>\n");
-
- for (Iterator it = l.iterator(); it.hasNext();) {
- Charset c = (Charset) it.next();
- sb.append(" * <tr>\n");
- sb.append(" * <td>" + c.canonical + "</td>\n");
- sb.append(" * <td>" + (c.mime == null ? "?" : c.mime)+ "</td>\n");
- sb.append(" * <td>");
- for (int i = 0; c.aliases != null && i < c.aliases.length; i++) {
- sb.append(c.aliases[i] + " ");
- }
- sb.append("</td>\n");
- sb.append(" * </tr>\n");
- }
- sb.append(" * </table>\n");
- return sb.toString();
- }
-
- public static void main(String[] args) {
- System.out.println(dumpHtmlTable());
- }*/
-} \ No newline at end of file
diff --git a/assets/quantum/res/drawable/quantum_ic_business_vd_theme_24.xml b/assets/quantum/res/drawable/quantum_ic_business_vd_theme_24.xml
new file mode 100644
index 000000000..5fc1cef03
--- /dev/null
+++ b/assets/quantum/res/drawable/quantum_ic_business_vd_theme_24.xml
@@ -0,0 +1,10 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M12,7L12,3L2,3v18h20L22,7L12,7zM6,19L4,19v-2h2v2zM6,15L4,15v-2h2v2zM6,11L4,11L4,9h2v2zM6,7L4,7L4,5h2v2zM10,19L8,19v-2h2v2zM10,15L8,15v-2h2v2zM10,11L8,11L8,9h2v2zM10,7L8,7L8,5h2v2zM20,19h-8v-2h2v-2h-2v-2h2v-2h-2L12,9h8v10zM18,11h-2v2h2v-2zM18,15h-2v2h2v-2z"/>
+</vector>
diff --git a/assets/quantum/res/drawable/quantum_ic_report_vd_theme_24.xml b/assets/quantum/res/drawable/quantum_ic_report_vd_theme_24.xml
new file mode 100644
index 000000000..d8544cb9b
--- /dev/null
+++ b/assets/quantum/res/drawable/quantum_ic_report_vd_theme_24.xml
@@ -0,0 +1,10 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M15.73,3L8.27,3L3,8.27v7.46L8.27,21h7.46L21,15.73L21,8.27L15.73,3zM12,17.3c-0.72,0 -1.3,-0.58 -1.3,-1.3 0,-0.72 0.58,-1.3 1.3,-1.3 0.72,0 1.3,0.58 1.3,1.3 0,0.72 -0.58,1.3 -1.3,1.3zM13,13h-2L11,7h2v6z"/>
+</vector>
diff --git a/assets/quantum/res/drawable/quantum_ic_voicemail_vd_theme_24.xml b/assets/quantum/res/drawable/quantum_ic_voicemail_vd_theme_24.xml
new file mode 100644
index 000000000..d7e79d799
--- /dev/null
+++ b/assets/quantum/res/drawable/quantum_ic_voicemail_vd_theme_24.xml
@@ -0,0 +1,10 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M18.5,6C15.46,6 13,8.46 13,11.5c0,1.33 0.47,2.55 1.26,3.5L9.74,15c0.79,-0.95 1.26,-2.17 1.26,-3.5C11,8.46 8.54,6 5.5,6S0,8.46 0,11.5 2.46,17 5.5,17h13c3.04,0 5.5,-2.46 5.5,-5.5S21.54,6 18.5,6zM5.5,15C3.57,15 2,13.43 2,11.5S3.57,8 5.5,8 9,9.57 9,11.5 7.43,15 5.5,15zM18.5,15c-1.93,0 -3.5,-1.57 -3.5,-3.5S16.57,8 18.5,8 22,9.57 22,11.5 20.43,15 18.5,15z"/>
+</vector>
diff --git a/java/com/android/contacts/common/ContactPhotoManager.java b/java/com/android/contacts/common/ContactPhotoManager.java
index 9e627ae1f..652e93637 100644
--- a/java/com/android/contacts/common/ContactPhotoManager.java
+++ b/java/com/android/contacts/common/ContactPhotoManager.java
@@ -39,6 +39,7 @@ public abstract class ContactPhotoManager implements ComponentCallbacks2 {
/** Contact type constants used for default letter images */
public static final int TYPE_PERSON = LetterTileDrawable.TYPE_PERSON;
+ public static final int TYPE_SPAM = LetterTileDrawable.TYPE_SPAM;
public static final int TYPE_BUSINESS = LetterTileDrawable.TYPE_BUSINESS;
public static final int TYPE_VOICEMAIL = LetterTileDrawable.TYPE_VOICEMAIL;
public static final int TYPE_DEFAULT = LetterTileDrawable.TYPE_DEFAULT;
@@ -235,8 +236,13 @@ public abstract class ContactPhotoManager implements ComponentCallbacks2 {
loadThumbnail(view, photoId, darkTheme, isCircular, defaultImageRequest, DEFAULT_AVATAR);
}
- public final void loadDialerThumbnail(
- QuickContactBadge badge, Uri contactUri, long photoId, String displayName, int contactType) {
+ public final void loadDialerThumbnailOrPhoto(
+ QuickContactBadge badge,
+ Uri contactUri,
+ long photoId,
+ Uri photoUri,
+ String displayName,
+ int contactType) {
badge.assignContactUri(contactUri);
badge.setOverlay(null);
@@ -244,8 +250,11 @@ public abstract class ContactPhotoManager implements ComponentCallbacks2 {
ContactPhotoManager.DefaultImageRequest request =
new ContactPhotoManager.DefaultImageRequest(
displayName, lookupKey, contactType, true /* isCircular */);
- loadThumbnail(
- badge, photoId, false /* darkTheme */, true /* isCircular */, request, DEFAULT_AVATAR);
+ if (photoId == 0 && photoUri != null) {
+ loadDirectoryPhoto(badge, photoUri, false /* darkTheme */, true /* isCircular */, request);
+ } else {
+ loadThumbnail(badge, photoId, false /* darkTheme */, true /* isCircular */, request);
+ }
}
/**
@@ -500,4 +509,3 @@ public abstract class ContactPhotoManager implements ComponentCallbacks2 {
}
}
}
-
diff --git a/java/com/android/contacts/common/dialog/CallSubjectDialog.java b/java/com/android/contacts/common/dialog/CallSubjectDialog.java
index 5e0d6b58a..117ac5e4e 100644
--- a/java/com/android/contacts/common/dialog/CallSubjectDialog.java
+++ b/java/com/android/contacts/common/dialog/CallSubjectDialog.java
@@ -47,8 +47,8 @@ import com.android.contacts.common.ContactPhotoManager;
import com.android.contacts.common.R;
import com.android.contacts.common.compat.telecom.TelecomManagerCompat;
import com.android.dialer.animation.AnimUtils;
+import com.android.dialer.callintent.CallInitiationType;
import com.android.dialer.callintent.CallIntentBuilder;
-import com.android.dialer.callintent.nano.CallInitiationType;
import com.android.dialer.common.LogUtil;
import com.android.dialer.util.ViewUtil;
import java.nio.charset.Charset;
@@ -65,7 +65,7 @@ public class CallSubjectDialog extends Activity {
public static final String PREF_KEY_SUBJECT_HISTORY_ITEM = "subject_history_item";
/** Activity intent argument bundle keys: */
public static final String ARG_PHOTO_ID = "PHOTO_ID";
-
+ public static final String ARG_PHOTO_URI = "PHOTO_URI";
public static final String ARG_CONTACT_URI = "CONTACT_URI";
public static final String ARG_NAME_OR_NUMBER = "NAME_OR_NUMBER";
public static final String ARG_NUMBER = "NUMBER";
@@ -134,6 +134,7 @@ public class CallSubjectDialog extends Activity {
};
private long mPhotoID;
+ private Uri mPhotoUri;
private Uri mContactUri;
private String mNameOrNumber;
private String mNumber;
@@ -195,6 +196,7 @@ public class CallSubjectDialog extends Activity {
start(
activity,
-1 /* photoId */,
+ null /* photoUri */,
null /* contactUri */,
number /* nameOrNumber */,
number /* number */,
@@ -220,6 +222,7 @@ public class CallSubjectDialog extends Activity {
public static void start(
Activity activity,
long photoId,
+ Uri photoUri,
Uri contactUri,
String nameOrNumber,
String number,
@@ -229,6 +232,7 @@ public class CallSubjectDialog extends Activity {
PhoneAccountHandle phoneAccountHandle) {
Bundle arguments = new Bundle();
arguments.putLong(ARG_PHOTO_ID, photoId);
+ arguments.putParcelable(ARG_PHOTO_URI, photoUri);
arguments.putParcelable(ARG_CONTACT_URI, contactUri);
arguments.putString(ARG_NAME_OR_NUMBER, nameOrNumber);
arguments.putString(ARG_NUMBER, number);
@@ -320,7 +324,8 @@ public class CallSubjectDialog extends Activity {
private void updateContactInfo() {
if (mContactUri != null) {
ContactPhotoManager.getInstance(this)
- .loadDialerThumbnail(mContactPhoto, mContactUri, mPhotoID, mNameOrNumber, mContactType);
+ .loadDialerThumbnailOrPhoto(
+ mContactPhoto, mContactUri, mPhotoID, mPhotoUri, mNameOrNumber, mContactType);
} else {
mContactPhoto.setVisibility(View.GONE);
}
@@ -343,6 +348,7 @@ public class CallSubjectDialog extends Activity {
return;
}
mPhotoID = arguments.getLong(ARG_PHOTO_ID);
+ mPhotoUri = arguments.getParcelable(ARG_PHOTO_URI);
mContactUri = arguments.getParcelable(ARG_CONTACT_URI);
mNameOrNumber = arguments.getString(ARG_NAME_OR_NUMBER);
mNumber = arguments.getString(ARG_NUMBER);
diff --git a/java/com/android/contacts/common/lettertiles/LetterTileDrawable.java b/java/com/android/contacts/common/lettertiles/LetterTileDrawable.java
index ca12f1812..f8ea140b3 100644
--- a/java/com/android/contacts/common/lettertiles/LetterTileDrawable.java
+++ b/java/com/android/contacts/common/lettertiles/LetterTileDrawable.java
@@ -20,7 +20,6 @@ import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
-import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Outline;
@@ -49,7 +48,7 @@ public class LetterTileDrawable extends Drawable {
* #TYPE_BUSINESS}, and voicemail contacts should use {@link #TYPE_VOICEMAIL}.
*/
@Retention(RetentionPolicy.SOURCE)
- @IntDef({TYPE_PERSON, TYPE_BUSINESS, TYPE_VOICEMAIL, TYPE_GENERIC_AVATAR})
+ @IntDef({TYPE_PERSON, TYPE_BUSINESS, TYPE_VOICEMAIL, TYPE_GENERIC_AVATAR, TYPE_SPAM})
public @interface ContactType {}
/** Contact type constants */
@@ -61,6 +60,7 @@ public class LetterTileDrawable extends Drawable {
* situations where a contact is anonymous.
*/
public static final int TYPE_GENERIC_AVATAR = 4;
+ public static final int TYPE_SPAM = 5;
@ContactType public static final int TYPE_DEFAULT = TYPE_PERSON;
/**
@@ -78,6 +78,10 @@ public class LetterTileDrawable extends Drawable {
/** 54% opacity */
private static final int ALPHA = 138;
+ /** 100% opacity */
+ private static final int SPAM_ALPHA = 255;
+ /** Default icon scale for vector drawable. */
+ private static final float VECTOR_ICON_SCALE = 0.7f;
/** Reusable components to avoid new allocations */
private static final Paint sPaint = new Paint();
@@ -87,14 +91,16 @@ public class LetterTileDrawable extends Drawable {
/** Letter tile */
private static TypedArray sColors;
+ private static int sSpamColor;
private static int sDefaultColor;
private static int sTileFontColor;
private static float sLetterToTileRatio;
- private static Bitmap sDefaultPersonAvatar;
- private static Bitmap sDefaultBusinessAvatar;
- private static Bitmap sDefaultVoicemailAvatar;
+ private static Drawable sDefaultPersonAvatar;
+ private static Drawable sDefaultBusinessAvatar;
+ private static Drawable sDefaultVoicemailAvatar;
+ private static Drawable sDefaultSpamAvatar;
private final Paint mPaint;
- private int mContactType = TYPE_DEFAULT;
+ @ContactType private int mContactType = TYPE_DEFAULT;
private float mScale = 1.0f;
private float mOffset = 0.0f;
private boolean mIsCircle = false;
@@ -102,21 +108,20 @@ public class LetterTileDrawable extends Drawable {
private int mColor;
private Character mLetter = null;
- @ContactType private int mAvatarType = TYPE_DEFAULT;
private String mDisplayName;
public LetterTileDrawable(final Resources res) {
if (sColors == null) {
sColors = res.obtainTypedArray(R.array.letter_tile_colors);
+ sSpamColor = res.getColor(R.color.spam_contact_background);
sDefaultColor = res.getColor(R.color.letter_tile_default_color);
sTileFontColor = res.getColor(R.color.letter_tile_font_color);
sLetterToTileRatio = res.getFraction(R.dimen.letter_to_tile_ratio, 1, 1);
sDefaultPersonAvatar =
- BitmapFactory.decodeResource(
- res, R.drawable.product_logo_avatar_anonymous_white_color_120);
- sDefaultBusinessAvatar =
- BitmapFactory.decodeResource(res, R.drawable.ic_business_white_120dp);
- sDefaultVoicemailAvatar = BitmapFactory.decodeResource(res, R.drawable.ic_voicemail_avatar);
+ res.getDrawable(R.drawable.product_logo_avatar_anonymous_white_color_120, null);
+ sDefaultBusinessAvatar = res.getDrawable(R.drawable.quantum_ic_business_vd_theme_24, null);
+ sDefaultVoicemailAvatar = res.getDrawable(R.drawable.quantum_ic_voicemail_vd_theme_24, null);
+ sDefaultSpamAvatar = res.getDrawable(R.drawable.quantum_ic_report_vd_theme_24, null);
sPaint.setTypeface(
Typeface.create(res.getString(R.string.letter_tile_letter_font_family), Typeface.NORMAL));
sPaint.setTextAlign(Align.CENTER);
@@ -128,12 +133,32 @@ public class LetterTileDrawable extends Drawable {
mColor = sDefaultColor;
}
- private static Bitmap getBitmapForContactType(int contactType) {
+ private Rect getScaledBounds(float scale, float offset) {
+ // The drawable should be drawn in the middle of the canvas without changing its width to
+ // height ratio.
+ final Rect destRect = copyBounds();
+ // Crop the destination bounds into a square, scaled and offset as appropriate
+ final int halfLength = (int) (scale * Math.min(destRect.width(), destRect.height()) / 2);
+
+ destRect.set(
+ destRect.centerX() - halfLength,
+ (int) (destRect.centerY() - halfLength + offset * destRect.height()),
+ destRect.centerX() + halfLength,
+ (int) (destRect.centerY() + halfLength + offset * destRect.height()));
+ return destRect;
+ }
+
+ private Drawable getDrawableForContactType(int contactType) {
switch (contactType) {
case TYPE_BUSINESS:
+ mScale = VECTOR_ICON_SCALE;
return sDefaultBusinessAvatar;
case TYPE_VOICEMAIL:
+ mScale = VECTOR_ICON_SCALE;
return sDefaultVoicemailAvatar;
+ case TYPE_SPAM:
+ mScale = VECTOR_ICON_SCALE;
+ return sDefaultSpamAvatar;
case TYPE_PERSON:
case TYPE_GENERIC_AVATAR:
default:
@@ -163,39 +188,11 @@ public class LetterTileDrawable extends Drawable {
return bitmap;
}
- /**
- * Draw the bitmap onto the canvas at the current bounds taking into account the current scale.
- */
- private void drawBitmap(
- final Bitmap bitmap, final int width, final int height, final Canvas canvas) {
- // The bitmap should be drawn in the middle of the canvas without changing its width to
- // height ratio.
- final Rect destRect = copyBounds();
-
- // Crop the destination bounds into a square, scaled and offset as appropriate
- final int halfLength = (int) (mScale * Math.min(destRect.width(), destRect.height()) / 2);
-
- destRect.set(
- destRect.centerX() - halfLength,
- (int) (destRect.centerY() - halfLength + mOffset * destRect.height()),
- destRect.centerX() + halfLength,
- (int) (destRect.centerY() + halfLength + mOffset * destRect.height()));
-
- // Source rectangle remains the entire bounds of the source bitmap.
- sRect.set(0, 0, width, height);
-
- sPaint.setTextAlign(Align.CENTER);
- sPaint.setAntiAlias(true);
- sPaint.setAlpha(ALPHA);
-
- canvas.drawBitmap(bitmap, sRect, destRect, sPaint);
- }
-
private void drawLetterTile(final Canvas canvas) {
// Draw background color.
sPaint.setColor(mColor);
-
sPaint.setAlpha(mPaint.getAlpha());
+
final Rect bounds = getBounds();
final int minDimension = Math.min(bounds.width(), bounds.height());
@@ -206,7 +203,6 @@ public class LetterTileDrawable extends Drawable {
}
// Draw letter/digit only if the first character is an english letter or there's a override
-
if (mLetter != null) {
// Draw letter or digit.
sFirstChar[0] = mLetter;
@@ -229,8 +225,10 @@ public class LetterTileDrawable extends Drawable {
sPaint);
} else {
// Draw the default image if there is no letter/digit to be drawn
- final Bitmap bitmap = getBitmapForContactType(mContactType);
- drawBitmap(bitmap, bitmap.getWidth(), bitmap.getHeight(), canvas);
+ Drawable drawable = getDrawableForContactType(mContactType);
+ drawable.setBounds(getScaledBounds(mScale, mOffset));
+ drawable.setAlpha(drawable == sDefaultSpamAvatar ? SPAM_ALPHA : ALPHA);
+ drawable.draw(canvas);
}
}
@@ -245,11 +243,16 @@ public class LetterTileDrawable extends Drawable {
/** Returns a deterministic color based on the provided contact identifier string. */
private int pickColor(final String identifier) {
+ if (mContactType == TYPE_SPAM) {
+ return sSpamColor;
+ }
+
if (mContactType == TYPE_VOICEMAIL
|| mContactType == TYPE_BUSINESS
|| TextUtils.isEmpty(identifier)) {
return sDefaultColor;
}
+
// String.hashCode() implementation is not supposed to change across java versions, so
// this should guarantee the same email address always maps to the same color.
// The email should already have been normalized by the ContactRequest.
@@ -321,7 +324,7 @@ public class LetterTileDrawable extends Drawable {
private LetterTileDrawable setLetterAndColorFromContactDetails(
final String displayName, final String identifier) {
- if (displayName != null && displayName.length() > 0 && isEnglishLetter(displayName.charAt(0))) {
+ if (!TextUtils.isEmpty(displayName) && isEnglishLetter(displayName.charAt(0))) {
mLetter = Character.toUpperCase(displayName.charAt(0));
} else {
mLetter = null;
@@ -382,11 +385,10 @@ public class LetterTileDrawable extends Drawable {
}
this.mDisplayName = displayName;
- this.mAvatarType = contactType;
- setContactType(this.mAvatarType);
+ setContactType(contactType);
// Special contact types receive default color and no letter tile, but special iconography.
- if (this.mAvatarType != TYPE_PERSON) {
+ if (contactType != TYPE_PERSON) {
this.setLetterAndColorFromContactDetails(null, null);
} else {
if (identifierForTileColor != null) {
diff --git a/java/com/android/contacts/common/list/OnPhoneNumberPickerActionListener.java b/java/com/android/contacts/common/list/OnPhoneNumberPickerActionListener.java
index 89bd889e6..c75e0a730 100644
--- a/java/com/android/contacts/common/list/OnPhoneNumberPickerActionListener.java
+++ b/java/com/android/contacts/common/list/OnPhoneNumberPickerActionListener.java
@@ -17,13 +17,11 @@ package com.android.contacts.common.list;
import android.app.ActionBar;
import android.net.Uri;
-import com.android.dialer.callintent.nano.CallSpecificAppData;
+import com.android.dialer.callintent.CallSpecificAppData;
/** Action callbacks that can be sent by a phone number picker. */
public interface OnPhoneNumberPickerActionListener {
- int CALL_INITIATION_UNKNOWN = 0;
-
/** Returns the selected phone number uri to the requester. */
void onPickDataUri(Uri dataUri, boolean isVideoCall, CallSpecificAppData callSpecificAppData);
diff --git a/java/com/android/contacts/common/list/PhoneNumberPickerFragment.java b/java/com/android/contacts/common/list/PhoneNumberPickerFragment.java
index 4ae81529b..99c41f92d 100644
--- a/java/com/android/contacts/common/list/PhoneNumberPickerFragment.java
+++ b/java/com/android/contacts/common/list/PhoneNumberPickerFragment.java
@@ -28,7 +28,9 @@ import android.view.View;
import android.view.ViewGroup;
import com.android.contacts.common.R;
import com.android.contacts.common.util.AccountFilterUtil;
-import com.android.dialer.callintent.nano.CallSpecificAppData;
+import com.android.dialer.callintent.CallInitiationType;
+import com.android.dialer.callintent.CallInitiationType.Type;
+import com.android.dialer.callintent.CallSpecificAppData;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.logging.Logger;
@@ -181,11 +183,12 @@ public class PhoneNumberPickerFragment extends ContactEntryListFragment<ContactE
final String number = getPhoneNumber(position);
if (!TextUtils.isEmpty(number)) {
cacheContactInfo(position);
- CallSpecificAppData callSpecificAppData = new CallSpecificAppData();
- callSpecificAppData.callInitiationType = getCallInitiationType(true /* isRemoteDirectory */);
- callSpecificAppData.positionOfSelectedSearchResult = position;
- callSpecificAppData.charactersInSearchString =
- getQueryString() == null ? 0 : getQueryString().length();
+ CallSpecificAppData callSpecificAppData =
+ CallSpecificAppData.newBuilder()
+ .setCallInitiationType(getCallInitiationType(true /* isRemoteDirectory */))
+ .setPositionOfSelectedSearchResult(position)
+ .setCharactersInSearchString(getQueryString() == null ? 0 : getQueryString().length())
+ .build();
mListener.onPickPhoneNumber(number, isVideoCall, callSpecificAppData);
} else {
LogUtil.i(
@@ -359,8 +362,8 @@ public class PhoneNumberPickerFragment extends ContactEntryListFragment<ContactE
* @param isRemoteDirectory {@code true} if the call was initiated using a contact/phone number
* not in the local contacts database
*/
- protected int getCallInitiationType(boolean isRemoteDirectory) {
- return OnPhoneNumberPickerActionListener.CALL_INITIATION_UNKNOWN;
+ protected CallInitiationType.Type getCallInitiationType(boolean isRemoteDirectory) {
+ return Type.UNKNOWN_INITIATION;
}
/**
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_ab_search.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_ab_search.png
new file mode 100644
index 000000000..d86b2195a
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_ab_search.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_arrow_back_24dp.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_arrow_back_24dp.png
new file mode 100644
index 000000000..ddbb2c459
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_arrow_back_24dp.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_business_white_120dp.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_business_white_120dp.png
new file mode 100644
index 000000000..d5942dcad
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_business_white_120dp.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_call_24dp.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_call_24dp.png
new file mode 100644
index 000000000..4dc506515
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_call_24dp.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_call_note_white_24dp.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_call_note_white_24dp.png
new file mode 100644
index 000000000..503e58e22
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_call_note_white_24dp.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_close_dk.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_close_dk.png
new file mode 100644
index 000000000..969552935
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_close_dk.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_create_24dp.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_create_24dp.png
new file mode 100644
index 000000000..540ab4dee
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_create_24dp.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_group_white_24dp.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_group_white_24dp.png
new file mode 100644
index 000000000..017e4bbf7
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_group_white_24dp.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_history_white_drawable_24dp.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_history_white_drawable_24dp.png
new file mode 100644
index 000000000..703d30b92
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_history_white_drawable_24dp.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_info_outline_24dp.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_info_outline_24dp.png
new file mode 100644
index 000000000..c7b1113cf
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_info_outline_24dp.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_back.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_back.png
new file mode 100644
index 000000000..deb3a6dc1
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_back.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_group_dk.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_group_dk.png
new file mode 100644
index 000000000..06bd18fbb
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_group_dk.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_group_lt.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_group_lt.png
new file mode 100644
index 000000000..d829d11e2
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_group_lt.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_overflow_lt.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_overflow_lt.png
new file mode 100644
index 000000000..1ba12950c
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_overflow_lt.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_person_dk.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_person_dk.png
new file mode 100644
index 000000000..5ff3ac574
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_person_dk.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_person_lt.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_person_lt.png
new file mode 100644
index 000000000..b4ebfc7b2
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_person_lt.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_remove_field_holo_light.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_remove_field_holo_light.png
new file mode 100644
index 000000000..03fd2fb10
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_remove_field_holo_light.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_star_dk.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_star_dk.png
new file mode 100644
index 000000000..e8cb0f5fe
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_star_dk.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_star_holo_light.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_star_holo_light.png
new file mode 100644
index 000000000..45137967c
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_star_holo_light.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_star_lt.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_star_lt.png
new file mode 100644
index 000000000..1c9bb81fa
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_star_lt.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_person_24dp.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_person_24dp.png
new file mode 100644
index 000000000..56708b0ba
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_person_24dp.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_phone_attach.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_phone_attach.png
new file mode 100644
index 000000000..84b1227bd
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_phone_attach.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_rx_videocam.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_rx_videocam.png
new file mode 100644
index 000000000..ccdda6701
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_rx_videocam.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_scroll_handle.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_scroll_handle.png
new file mode 100644
index 000000000..3aa29b852
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_scroll_handle.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_tx_videocam.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_tx_videocam.png
new file mode 100644
index 000000000..603ddc895
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_tx_videocam.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_videocam.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_videocam.png
new file mode 100644
index 000000000..97905c9f5
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_videocam.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_voicemail_avatar.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_voicemail_avatar.png
new file mode 100644
index 000000000..2121878ae
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_voicemail_avatar.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/list_activated_holo.9.png b/java/com/android/contacts/common/res/drawable-hdpi/list_activated_holo.9.png
new file mode 100644
index 000000000..4ea7afa00
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/list_activated_holo.9.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/list_background_holo.9.png b/java/com/android/contacts/common/res/drawable-hdpi/list_background_holo.9.png
new file mode 100644
index 000000000..cddf9be75
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/list_background_holo.9.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/list_focused_holo.9.png b/java/com/android/contacts/common/res/drawable-hdpi/list_focused_holo.9.png
new file mode 100644
index 000000000..86578be45
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/list_focused_holo.9.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/list_longpressed_holo_light.9.png b/java/com/android/contacts/common/res/drawable-hdpi/list_longpressed_holo_light.9.png
new file mode 100644
index 000000000..e9afcc924
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/list_longpressed_holo_light.9.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/list_pressed_holo_light.9.png b/java/com/android/contacts/common/res/drawable-hdpi/list_pressed_holo_light.9.png
new file mode 100644
index 000000000..2054530ed
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/list_pressed_holo_light.9.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/list_section_divider_holo_custom.9.png b/java/com/android/contacts/common/res/drawable-hdpi/list_section_divider_holo_custom.9.png
new file mode 100644
index 000000000..a0f17568e
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/list_section_divider_holo_custom.9.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/list_title_holo.9.png b/java/com/android/contacts/common/res/drawable-hdpi/list_title_holo.9.png
new file mode 100644
index 000000000..ae937176e
--- /dev/null
+++ b/java/com/android/contacts/common/res/drawable-hdpi/list_title_holo.9.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-mdpi/ic_business_white_120dp.png b/java/com/android/contacts/common/res/drawable-mdpi/ic_business_white_120dp.png
deleted file mode 100644
index 3dddca516..000000000
--- a/java/com/android/contacts/common/res/drawable-mdpi/ic_business_white_120dp.png
+++ /dev/null
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-mdpi/ic_voicemail_avatar.png b/java/com/android/contacts/common/res/drawable-mdpi/ic_voicemail_avatar.png
deleted file mode 100644
index a7875c5de..000000000
--- a/java/com/android/contacts/common/res/drawable-mdpi/ic_voicemail_avatar.png
+++ /dev/null
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-xhdpi/ic_business_white_120dp.png b/java/com/android/contacts/common/res/drawable-xhdpi/ic_business_white_120dp.png
deleted file mode 100644
index 6256300b4..000000000
--- a/java/com/android/contacts/common/res/drawable-xhdpi/ic_business_white_120dp.png
+++ /dev/null
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-xhdpi/ic_voicemail_avatar.png b/java/com/android/contacts/common/res/drawable-xhdpi/ic_voicemail_avatar.png
deleted file mode 100644
index 8dc1d595b..000000000
--- a/java/com/android/contacts/common/res/drawable-xhdpi/ic_voicemail_avatar.png
+++ /dev/null
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-xxhdpi/ic_business_white_120dp.png b/java/com/android/contacts/common/res/drawable-xxhdpi/ic_business_white_120dp.png
deleted file mode 100644
index 8d67e448f..000000000
--- a/java/com/android/contacts/common/res/drawable-xxhdpi/ic_business_white_120dp.png
+++ /dev/null
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-xxhdpi/ic_voicemail_avatar.png b/java/com/android/contacts/common/res/drawable-xxhdpi/ic_voicemail_avatar.png
deleted file mode 100644
index 5d22cbeea..000000000
--- a/java/com/android/contacts/common/res/drawable-xxhdpi/ic_voicemail_avatar.png
+++ /dev/null
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-xxxhdpi/ic_business_white_120dp.png b/java/com/android/contacts/common/res/drawable-xxxhdpi/ic_business_white_120dp.png
deleted file mode 100644
index 1741675de..000000000
--- a/java/com/android/contacts/common/res/drawable-xxxhdpi/ic_business_white_120dp.png
+++ /dev/null
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-xxxhdpi/ic_voicemail_avatar.png b/java/com/android/contacts/common/res/drawable-xxxhdpi/ic_voicemail_avatar.png
deleted file mode 100644
index 762b63648..000000000
--- a/java/com/android/contacts/common/res/drawable-xxxhdpi/ic_voicemail_avatar.png
+++ /dev/null
Binary files differ
diff --git a/java/com/android/contacts/common/res/mipmap-hdpi/ic_contacts_launcher.png b/java/com/android/contacts/common/res/mipmap-hdpi/ic_contacts_launcher.png
new file mode 100644
index 000000000..64eff002f
--- /dev/null
+++ b/java/com/android/contacts/common/res/mipmap-hdpi/ic_contacts_launcher.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/values-b+sr+Latn/strings.xml b/java/com/android/contacts/common/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..0d8cdee95
--- /dev/null
+++ b/java/com/android/contacts/common/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,267 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2012 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="toast_text_copied" msgid="8979281391599667362">"Tekst je kopiran"</string>
+ <string name="copy_text" msgid="5890820280087874642">"Kopiraj u priv. memoriju"</string>
+ <string name="call_custom" msgid="3041673234638990874">"Pozovi <xliff:g id="CUSTOM">%s</xliff:g>"</string>
+ <string name="call_home" msgid="125893483593803791">"Pozovi kućni telefon"</string>
+ <string name="call_mobile" msgid="967589404494150813">"Pozovi mobilni telefon"</string>
+ <string name="call_work" msgid="6040550697395300892">"Pozovi poslovni telefon"</string>
+ <string name="call_fax_work" msgid="5260192771364592922">"Pozovi poslovni faks"</string>
+ <string name="call_fax_home" msgid="5174311195081144124">"Pozovi kućni faks"</string>
+ <string name="call_pager" msgid="6814149227741274161">"Pozovi pejdžer"</string>
+ <string name="call_other" msgid="5536385588712587235">"Pozovi"</string>
+ <string name="call_callback" msgid="6314019862718112786">"Pozovi za povratni poziv"</string>
+ <string name="call_car" msgid="3197417098027764954">"Pozovi telefon u automobilu"</string>
+ <string name="call_company_main" msgid="2557663310028446397">"Pozovi glavni telefon preduzeća"</string>
+ <string name="call_isdn" msgid="4691270442763649522">"Pozovi ISDN"</string>
+ <string name="call_main" msgid="3293707608770407814">"Pozovi glavni telefon"</string>
+ <string name="call_other_fax" msgid="4724521984879021465">"Pozovi faks"</string>
+ <string name="call_radio" msgid="8942441419845057942">"Pozovi radio"</string>
+ <string name="call_telex" msgid="2031514461660668351">"Pozovi teleks"</string>
+ <string name="call_tty_tdd" msgid="7807210224965727701">"Pozovi TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="2716342732938578495">"Pozovi poslovni mobilni telefon"</string>
+ <string name="call_work_pager" msgid="3791778749827366574">"Pozovi poslovni pejdžer"</string>
+ <string name="call_assistant" msgid="4177478845473789294">"Pozovi <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="4958811711741872901">"Pozovi broj za MMS"</string>
+ <string name="call_by_shortcut" msgid="4623082183552111045">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (pozovi)"</string>
+ <string name="sms_custom" msgid="8785368968605026317">"Pošalji SMS na <xliff:g id="CUSTOM">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="3527719551060295243">"Pošalji SMS na kućni telefon"</string>
+ <string name="sms_mobile" msgid="8883045857887736518">"Pošalji SMS na mobilni telefon"</string>
+ <string name="sms_work" msgid="4158595439553450966">"Pošalji SMS na poslovni telefon"</string>
+ <string name="sms_fax_work" msgid="5483726627718055248">"Pošalji SMS na poslovni faks"</string>
+ <string name="sms_fax_home" msgid="9219265155770746077">"Pošalji SMS na kućni faks"</string>
+ <string name="sms_pager" msgid="4901085068525193933">"Pošalji SMS na pejdžer"</string>
+ <string name="sms_other" msgid="1742702947993285933">"Pošalji SMS"</string>
+ <string name="sms_callback" msgid="5833483630377538308">"Pošalji SMS za povratni poziv"</string>
+ <string name="sms_car" msgid="4314577266154395174">"Pošalji SMS na telefon u automobilu"</string>
+ <string name="sms_company_main" msgid="2308160928487360705">"Pošalji SMS na glavni broj telefona preduzeća"</string>
+ <string name="sms_isdn" msgid="6394300346179302542">"Pošalji SMS na ISDN"</string>
+ <string name="sms_main" msgid="8908087742014140774">"Pošalji SMS na glavni telefon"</string>
+ <string name="sms_other_fax" msgid="8768455473295405427">"Pošalji SMS na faks"</string>
+ <string name="sms_radio" msgid="855555176531704682">"Pošalji SMS na radio"</string>
+ <string name="sms_telex" msgid="6269029276223252719">"Pošalji SMS na teleks"</string>
+ <string name="sms_tty_tdd" msgid="6229057354509192444">"Pošalji SMS na TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2155975469329969840">"Pošalji SMS na poslovni mobilni telefon"</string>
+ <string name="sms_work_pager" msgid="8500140274906830742">"Pošalji SMS na poslovni pejdžer"</string>
+ <string name="sms_assistant" msgid="8513548482745330818">"Pošalji SMS na <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="5187888900503248542">"Pošalji SMS na broj za MMS"</string>
+ <string name="sms_by_shortcut" msgid="8005496406639963582">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (pošalji SMS)"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="7465690215775790243">"Brišete često kontaktirane?"</string>
+ <string name="clearFrequentsConfirmation" msgid="5750611450893399198">"Obrisaćete listu često kontaktiranih u aplikacijama Kontakti i Telefon, pa će imejl aplikacije morati ponovo da prikupe informacije o adresiranju."</string>
+ <string name="clearFrequentsProgress_title" msgid="2057183487226039454">"Brisanje često kontaktiranih..."</string>
+ <string name="status_available" msgid="2648156525685472626">"Dostupan/na"</string>
+ <string name="status_away" msgid="2298688367552893953">"Odsutan/na"</string>
+ <string name="status_busy" msgid="5990832098713248503">"Zauzet/a"</string>
+ <string name="contactsList" msgid="8806067891419291513">"Kontakti"</string>
+ <string name="local_invisible_directory" msgid="4723238462733650090">"Drugo"</string>
+ <string name="directory_search_label" msgid="4621215895484025229">"Direktorijum"</string>
+ <string name="directory_search_label_work" msgid="7679326282707414897">"Direktorijum za Work"</string>
+ <string name="local_search_label" msgid="907622822323119235">"Svi kontakti"</string>
+ <string name="user_profile_contacts_list_header" msgid="9180620153828279580">"Ja"</string>
+ <string name="search_results_searching" msgid="3710866752172327451">"Pretražuje se…"</string>
+ <string name="foundTooManyContacts" msgid="3685002426663730799">"Pronađeno je više od <xliff:g id="COUNT">%d</xliff:g>."</string>
+ <string name="listFoundAllContactsZero" msgid="1151813986040671916">"Nema kontakata"</string>
+ <plurals name="searchFoundContacts" formatted="false" msgid="3733009742282085433">
+ <item quantity="one">Pronađen je <xliff:g id="COUNT">%d</xliff:g></item>
+ <item quantity="few">Pronađena su <xliff:g id="COUNT">%d</xliff:g></item>
+ <item quantity="other">Pronađeno je <xliff:g id="COUNT">%d</xliff:g></item>
+ </plurals>
+ <string name="description_quick_contact_for" msgid="6327207399167819147">"Brzi kontakt za korisnika <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="978606963362745020">"(Nema imena)"</string>
+ <string name="favoritesFrequentCalled" msgid="4646019087163449555">"Često pozivani"</string>
+ <string name="favoritesFrequentContacted" msgid="946588736701567509">"Često kontaktirani"</string>
+ <string name="description_view_contact_detail" msgid="2428742401208561136">"Prikaži kontakt"</string>
+ <string name="list_filter_phones" msgid="8763316061763437182">"Svi kontakti sa brojevima telefona"</string>
+ <string name="list_filter_phones_work" msgid="7083575404573422965">"Kontakti sa profila za Work"</string>
+ <string name="view_updates_from_group" msgid="9011641093168385729">"Prikaži ažuriranja"</string>
+ <string name="account_phone" msgid="7067809073194061035">"Samo na uređaju, ne sinhronizuje se"</string>
+ <string name="nameLabelsGroup" msgid="7730465833159557471">"Ime"</string>
+ <string name="nicknameLabelsGroup" msgid="6310556912361840029">"Nadimak"</string>
+ <string name="full_name" msgid="648186563998465740">"Ime"</string>
+ <string name="name_given" msgid="5096576006314820536">"Imenu"</string>
+ <string name="name_family" msgid="6646235805198547467">"Prezimenu"</string>
+ <string name="name_prefix" msgid="9215326539658838">"Prefiks za ime"</string>
+ <string name="name_middle" msgid="703755205331582769">"Srednje ime"</string>
+ <string name="name_suffix" msgid="5777083390282548702">"Sufiks imena"</string>
+ <string name="name_phonetic" msgid="1650870996361663089">"Ime – fonetski"</string>
+ <string name="name_phonetic_given" msgid="618812334274603170">"Ime – fonetski"</string>
+ <string name="name_phonetic_middle" msgid="4826820763384625538">"Srednje ime – fonetski"</string>
+ <string name="name_phonetic_family" msgid="379905191212930771">"Prezime – fonetski"</string>
+ <string name="phoneLabelsGroup" msgid="169661929021355548">"Telefon"</string>
+ <string name="emailLabelsGroup" msgid="2249752810477488833">"Pošalji imejl"</string>
+ <string name="postalLabelsGroup" msgid="6772000590189142253">"Adresa"</string>
+ <string name="imLabelsGroup" msgid="5718066254237364731">"Razmena trenutnih poruka"</string>
+ <string name="organizationLabelsGroup" msgid="1101996309241601435">"Organizacija"</string>
+ <string name="relationLabelsGroup" msgid="53866051664600053">"Odnos"</string>
+ <string name="eventLabelsGroup" msgid="1236970042646618489">"Poseban dan"</string>
+ <string name="sms" msgid="7574344928185328095">"SMS"</string>
+ <string name="postal_address" msgid="1804707930129674200">"Adresa"</string>
+ <string name="ghostData_company" msgid="2554310786296833424">"Preduzeće"</string>
+ <string name="ghostData_title" msgid="4994968731830184837">"Naziv"</string>
+ <string name="label_notes" msgid="2050255313694219786">"Beleške"</string>
+ <string name="label_sip_address" msgid="8883266182575965926">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="1630734286462186790">"Veb-sajt"</string>
+ <string name="groupsLabel" msgid="2694002798416868728">"Grupe"</string>
+ <string name="email_home" msgid="889830029388962171">"Pošalji imejl na kućnu imejl adresu"</string>
+ <string name="email_mobile" msgid="4487686436743741150">"Pošalji imejl na mobilni telefon"</string>
+ <string name="email_work" msgid="4223487303344613528">"Pošalji imejl na poslovnu imejl adresu"</string>
+ <string name="email_other" msgid="4246411900126012062">"Pošalji imejl"</string>
+ <string name="email_custom" msgid="7246580894327511013">"Pošalji imejl na <xliff:g id="CUSTOM">%s</xliff:g>"</string>
+ <string name="email" msgid="2807318537887091606">"Pošalji imejl"</string>
+ <string name="postal_street" msgid="6918171741240802474">"Ulica"</string>
+ <string name="postal_pobox" msgid="2962203483168878561">"Poštanski fah"</string>
+ <string name="postal_neighborhood" msgid="5275280978237639716">"Kraj"</string>
+ <string name="postal_city" msgid="8674569121430005628">"Grad"</string>
+ <string name="postal_region" msgid="1730369286225469192">"Država"</string>
+ <string name="postal_postcode" msgid="4450700741261990439">"Poštanski broj"</string>
+ <string name="postal_country" msgid="232670707458768148">"Zemlja"</string>
+ <string name="map_home" msgid="4181131107392126938">"Prikaži kućnu adresu"</string>
+ <string name="map_work" msgid="5723471185992684400">"Prikaži poslovnu adresu"</string>
+ <string name="map_other" msgid="2253764780863500516">"Prikaži adresu"</string>
+ <string name="map_custom" msgid="5581743097882436157">"Prikaži adresu <xliff:g id="CUSTOM">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2954364435497941659">"Započni ćaskanje preko AIM-a"</string>
+ <string name="chat_msn" msgid="3130135239071228678">"Započni ćaskanje preko Windows Live-a"</string>
+ <string name="chat_yahoo" msgid="3233552142326865347">"Započni ćaskanje preko Yahoo-a"</string>
+ <string name="chat_skype" msgid="6486703981390592425">"Započni ćaskanje preko Skype-a"</string>
+ <string name="chat_qq" msgid="786924280665740019">"Započni ćaskanje preko QQ-a"</string>
+ <string name="chat_gtalk" msgid="7914674177243078035">"Započni ćaskanje preko Google Talk-a"</string>
+ <string name="chat_icq" msgid="3292934726414765801">"Započni ćaskanje preko ICQ-a"</string>
+ <string name="chat_jabber" msgid="6701542313597880204">"Započni ćaskanje preko Jabber-a"</string>
+ <string name="chat" msgid="1020428260359370236">"Ćaskanje"</string>
+ <string name="description_minus_button" msgid="2659092981396583806">"izbriši"</string>
+ <string name="expand_collapse_name_fields_description" msgid="9005732230091761802">"Proširivanje ili skupljanje polja za nazive"</string>
+ <string name="expand_collapse_phonetic_name_fields_description" msgid="3450645489720595412">"Proširi ili skupi polja za fonetsko ime"</string>
+ <string name="list_filter_all_accounts" msgid="473782314881473992">"Svi kontakti"</string>
+ <string name="menu_done" msgid="1817505539263889535">"Gotovo"</string>
+ <string name="menu_doNotSave" msgid="4174389775790094548">"Otkaži"</string>
+ <string name="listAllContactsInAccount" msgid="3486378621592995630">"Kontakti u grupi <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="listCustomView" msgid="5306282632413086731">"Kontakti u prilagođenom prikazu"</string>
+ <string name="listSingleContact" msgid="8620818791932382627">"Pojedinačni kontakt"</string>
+ <string name="dialog_new_contact_account" msgid="3089718960461539156">"Sačuvajte uvezene kontakte na:"</string>
+ <string name="import_from_sim" msgid="4025122666048801234">"Uvezi sa SIM kartice"</string>
+ <string name="import_from_sim_summary" msgid="7347530878981811858">"Uvoz sa SIM kartice <xliff:g id="SIM_NAME">^1</xliff:g> – <xliff:g id="SIM_NUMBER">^2</xliff:g>"</string>
+ <string name="import_from_sim_summary_no_number" msgid="2311025421424473798">"Uvoz sa SIM kartice <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <string name="import_from_vcf_file" product="default" msgid="2755992524137862594">"Uvezi iz .vcf datoteke"</string>
+ <string name="cancel_import_confirmation_message" msgid="1112854508504355394">"Želite li da otkažete uvoz datoteke <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="8507822905973961704">"Želite li da otkažete izvoz datoteke <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="3633975947527306665">"Nije moguće otkazati vCard uvoz/izvoz"</string>
+ <string name="fail_reason_unknown" msgid="4526834573707737085">"Nepoznata greška."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2564113989228646444">"Nismo uspeli da otvorimo datoteku „<xliff:g id="FILE_NAME">%s</xliff:g>“: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="1391801997398257839">"Nije moguće pokrenuti program za izvoz: „<xliff:g id="EXACT_REASON">%s</xliff:g>“"</string>
+ <string name="fail_reason_no_exportable_contact" msgid="5905140440417594395">"Nema kontakata za izvoz."</string>
+ <string name="missing_required_permission" msgid="3977319568919699902">"Onemogućili ste obaveznu dozvolu."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="4022425018935814242">"Došlo je do greške pri izvozu: „<xliff:g id="EXACT_REASON">%s</xliff:g>“"</string>
+ <string name="fail_reason_too_long_filename" msgid="1782388695897859448">"Zahtevani naziv datoteke je predugačak („<xliff:g id="FILENAME">%s</xliff:g>“)."</string>
+ <string name="fail_reason_io_error" msgid="5610192449460803752">"U/I greška"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="5383581106403466715">"Nema dovoljno memorije. Datoteka je možda prevelika."</string>
+ <string name="fail_reason_vcard_parse_error" msgid="7166381747317969497">"Iz neočekivanog razloga nije moguće raščlaniti vCard datoteku."</string>
+ <string name="fail_reason_not_supported" msgid="6529299412185608834">"Format nije podržan."</string>
+ <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="2071371622333685552">"Nije moguće prikupiti metapodatke navedenih vCard datoteka."</string>
+ <string name="fail_reason_failed_to_read_files" msgid="7364342120566067558">"Nije moguć uvoz jedne ili više datoteka (%s)."</string>
+ <string name="exporting_vcard_finished_title" msgid="6969111823207538096">"Izvoz datoteke <xliff:g id="FILENAME">%s</xliff:g> je završen."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="3456404588243153606">"Izvoz kontakata je završen."</string>
+ <string name="exporting_vcard_finished_toast" msgid="864313687240614505">"Izvoz kontakata je završen. Kliknite na obaveštenje da biste ih delili."</string>
+ <string name="touch_to_share_contacts" msgid="8684610418619975866">"Dodirnite da biste delili kontakte."</string>
+ <string name="exporting_vcard_canceled_title" msgid="4160930279977285925">"Izvoz datoteke <xliff:g id="FILENAME">%s</xliff:g> je otkazan."</string>
+ <string name="exporting_contact_list_title" msgid="874590947793345632">"Izvoz podataka o kontaktima je u toku"</string>
+ <string name="exporting_contact_list_message" msgid="3263011604569444133">"Podaci o kontaktima se izvoze."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="443743100925218813">"Preuzimanje informacija iz baze podataka nije moguće."</string>
+ <string name="composer_has_no_exportable_contact" msgid="1492572045460138455">"Nema kontakata za izvoz. Ako imate kontakte na uređaju, neki dobavljači podataka možda ne dozvoljavaju izvoz kontakata sa uređaja."</string>
+ <string name="composer_not_initialized" msgid="7126008930727708362">"Program za izradu vCard datoteka se nije ispravno pokrenuo."</string>
+ <string name="exporting_contact_failed_title" msgid="5400878429352404258">"Izvoz nije moguć"</string>
+ <string name="exporting_contact_failed_message" msgid="1453772164161663415">"Podaci o kontaktima nizu izvezeni.\nRazlog: „<xliff:g id="FAIL_REASON">%s</xliff:g>“"</string>
+ <string name="importing_vcard_description" msgid="1206078719084863234">"Uvoz kontakta <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4759080957711586257">"Čitanje vCard podataka nije moguće"</string>
+ <string name="reading_vcard_canceled_title" msgid="3650078934530953275">"Čitanje vCard podataka je otkazano"</string>
+ <string name="importing_vcard_finished_title" msgid="1543368028741535966">"Uvoz vCard datoteke <xliff:g id="FILENAME">%s</xliff:g> je završen"</string>
+ <string name="importing_vcard_canceled_title" msgid="2454436016819017436">"Uvoz datoteke <xliff:g id="FILENAME">%s</xliff:g> je otkazan"</string>
+ <string name="vcard_import_will_start_message" msgid="6013286576133592154">"Datoteka <xliff:g id="FILENAME">%s</xliff:g> će uskoro biti uvezena."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="3172538521736189687">"Datoteka će uskoro biti uvezena."</string>
+ <string name="vcard_import_request_rejected_message" msgid="7620870852106507620">"Zahtev za uvoz vCard datoteke je odbijen. Probajte ponovo kasnije."</string>
+ <string name="vcard_export_will_start_message" msgid="4480722586633503615">"Datoteka <xliff:g id="FILENAME">%s</xliff:g> će uskoro biti izvezena."</string>
+ <string name="vcard_export_will_start_message_fallback" msgid="8746087280091814150">"Datoteka će uskoro biti izvezena."</string>
+ <string name="contacts_export_will_start_message" msgid="5950262391638837408">"Kontakti će uskoro biti izvezeni."</string>
+ <string name="vcard_export_request_rejected_message" msgid="4132430982367686579">"Zahtev za izvoz vCard datoteke je odbijen. Probajte ponovo kasnije."</string>
+ <string name="vcard_unknown_filename" msgid="7576066884501578965">"kontakt"</string>
+ <string name="caching_vcard_message" msgid="7778832851741500256">"Keširanje vCard datoteka u lokalnu privremenu memoriju. Uvoz će uskoro započeti."</string>
+ <string name="vcard_import_failed" msgid="4135012206186446511">"Uvoz vCard datoteke nije moguć."</string>
+ <string name="nfc_vcard_file_name" msgid="7174382505002702431">"Kontakt preko NFC-a"</string>
+ <string name="confirm_export_title" msgid="9164673124925342242">"Želite li da izvezete kontakte?"</string>
+ <string name="caching_vcard_title" msgid="8092335276785174935">"Keširanje"</string>
+ <string name="progress_notifier_message" msgid="2778542784808529164">"Uvozimo <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="export_to_vcf_file" product="default" msgid="6148360234812424446">"Izvezi u .vcf datoteku"</string>
+ <string name="display_options_sort_list_by" msgid="3541875948367831228">"Sortiraj prema"</string>
+ <string name="display_options_sort_by_given_name" msgid="4316351826810346915">"Imenu"</string>
+ <string name="display_options_sort_by_family_name" msgid="5238820876940079000">"Prezimenu"</string>
+ <string name="display_options_view_names_as" msgid="4204204205736735618">"Format imena i prezimena"</string>
+ <string name="display_options_view_given_name_first" msgid="2308026973021171020">"Prvo ime"</string>
+ <string name="display_options_view_family_name_first" msgid="987430497292428242">"Prvo prezime"</string>
+ <string name="default_editor_account" msgid="1826578934497338822">"Podrazumevani nalog za nove kontakte"</string>
+ <string name="sync_contact_metadata_dialog_title" msgid="7839882899954930421">"Sinhronizujte metapodatke kontakata"</string>
+ <string name="setting_about" msgid="5253319937596745755">"O Kontaktima"</string>
+ <string name="activity_title_settings" msgid="2398428034981372932">"Podešavanja"</string>
+ <string name="share_visible_contacts" msgid="6775120441469077620">"Deli vidljive kontakte"</string>
+ <string name="share_visible_contacts_failure" msgid="1365755167786055470">"Nije uspelo deljenje vidljivih kontakata."</string>
+ <string name="share_favorite_contacts" msgid="9138011836074034817">"Deli omiljene kontakte"</string>
+ <string name="share_contacts" msgid="6505699963814423437">"Deli sve kontakte"</string>
+ <string name="share_contacts_failure" msgid="6027174424732204424">"Deljenje kontakata nije uspelo."</string>
+ <string name="dialog_import_export" msgid="3052335055728876529">"Uvoz/izvoz kontakata"</string>
+ <string name="dialog_import" msgid="8508508044485808554">"Uvezi kontakte"</string>
+ <string name="share_error" msgid="5642622973966851784">"Ovaj kontakt ne može da se deli."</string>
+ <string name="no_contact_to_share" msgid="9115223064368461904">"Nema kontakata za deljenje."</string>
+ <string name="menu_search" msgid="1241802591112035764">"Pretraži"</string>
+ <string name="hint_findContacts" msgid="1913556676649442295">"Pronađite kontakte"</string>
+ <string name="contactsFavoritesLabel" msgid="5198982253222486561">"Omiljeno"</string>
+ <string name="listTotalAllContactsZero" msgid="8436822729781033537">"Nema kontakata."</string>
+ <string name="listTotalAllContactsZeroCustom" msgid="6072173682342248964">"Nema vidljivih kontakata."</string>
+ <string name="listTotalAllContactsZeroStarred" msgid="5008410556001744528">"Nema omiljenih"</string>
+ <string name="listTotalAllContactsZeroGroup" msgid="6782377127075025237">"Nema kontakata u grupi <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_clear_frequents" msgid="5358271535047496120">"Obriši često kontaktirane"</string>
+ <string name="menu_select_sim" msgid="3960197724339200637">"Izaberite SIM karticu"</string>
+ <string name="menu_accounts" msgid="8092083497106343280">"Upravljaj nalozima"</string>
+ <string name="menu_import_export" msgid="8834601882032781755">"Uvezi/izvezi"</string>
+ <string name="contact_status_update_attribution" msgid="6042601531361543253">"preko <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="3448746388181727251">"<xliff:g id="DATE">%1$s</xliff:g> preko <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="3550669942742167644">"zaustavljanje pretraživanja"</string>
+ <string name="description_clear_search" msgid="2347258825265600782">"Brisanje pretrage"</string>
+ <string name="settings_contact_display_options_title" msgid="5535295687646503547">"Opcije prikazivanja kontakata"</string>
+ <string name="select_account_dialog_title" msgid="2673504582803359239">"Nalog"</string>
+ <string name="set_default_account" msgid="7966099951006467572">"Uvek koristi ovo za pozive"</string>
+ <string name="select_phone_account_for_calls" msgid="1784460686103423274">"Pozovi pomoću"</string>
+ <string name="call_with_a_note" msgid="6242261320491851133">"Poziv sa beleškom"</string>
+ <string name="call_subject_hint" msgid="7233138753650420800">"Unesite belešku koju ćete poslati uz poziv..."</string>
+ <string name="send_and_call_button" msgid="4735168294120154013">"POŠALJI I POZOVI"</string>
+ <string name="call_subject_limit" msgid="8273208736191593939">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="8726132674272173486">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="tab_title" msgid="3387876802026074288">"Kartica <xliff:g id="TITLE">%1$s</xliff:g>."</string>
+ <plurals name="tab_title_with_unread_items" formatted="false" msgid="8548492980702182785">
+ <item quantity="one"> Kartica <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> nepročitana stavka. </item>
+ <item quantity="few"> Kartica <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> nepročitane stavke. </item>
+ <item quantity="other"> Kartica <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> nepročitanih stavki. </item>
+ </plurals>
+ <string name="about_build_version" msgid="6809677213570116689">"Verzija"</string>
+ <string name="about_open_source_licenses" msgid="9071344335180981674">"Licence otvorenog koda"</string>
+ <string name="about_open_source_licenses_summary" msgid="4662018242345608420">"Detalji licence za softver otvorenog koda"</string>
+ <string name="about_privacy_policy" msgid="120921692215934837">"Politika privatnosti"</string>
+ <string name="about_terms_of_service" msgid="9004506174858804172">"Uslovi korišćenja usluge"</string>
+ <string name="activity_title_licenses" msgid="2416018204229261875">"Licence otvorenog koda"</string>
+ <string name="url_open_error_toast" msgid="3814442157861318482">"Otvaranje URL-a nije uspelo."</string>
+ <string name="description_search_video_call" msgid="7229218423556643079">"Uputi video poziv"</string>
+</resources>
diff --git a/java/com/android/contacts/common/res/values/colors.xml b/java/com/android/contacts/common/res/values/colors.xml
index 7524eff58..434d193c7 100644
--- a/java/com/android/contacts/common/res/values/colors.xml
+++ b/java/com/android/contacts/common/res/values/colors.xml
@@ -20,6 +20,8 @@
<color name="focus_color">#44ff0000</color>
+ <color name="spam_contact_background">#A52714</color>
+
<!-- Color of ripples used for views with dark backgrounds -->
<color name="dialer_ripple_material_dark">#a0ffffff</color>
diff --git a/java/com/android/dialer/app/AndroidManifest.xml b/java/com/android/dialer/app/AndroidManifest.xml
index 67290b591..5b7e75751 100644
--- a/java/com/android/dialer/app/AndroidManifest.xml
+++ b/java/com/android/dialer/app/AndroidManifest.xml
@@ -109,6 +109,16 @@
<action android:name="android.telecom.action.SHOW_MISSED_CALLS_NOTIFICATION"/>
</intent-filter>
</receiver>
+ <!-- Handles voicemail notifications from telephony. Requires O -->
+ <receiver android:name=".voicemail.LegacyVoicemailNotificationReceiver"
+ android:directBootAware="true">
+ <intent-filter>
+ <action android:name="android.telephony.action.SHOW_VOICEMAIL_NOTIFICATION"/>
+ </intent-filter>
+ <intent-filter>
+ <action android:name="com.android.voicemail.VoicemailClient.ACTION_SHOW_LEGACY_VOICEMAIL" />
+ </intent-filter>
+ </receiver>
<provider
android:authorities="com.android.dialer.files"
diff --git a/java/com/android/dialer/app/DialtactsActivity.java b/java/com/android/dialer/app/DialtactsActivity.java
index 139fc6486..139f27af8 100644
--- a/java/com/android/dialer/app/DialtactsActivity.java
+++ b/java/com/android/dialer/app/DialtactsActivity.java
@@ -88,16 +88,16 @@ import com.android.dialer.app.widget.ActionBarController;
import com.android.dialer.app.widget.SearchEditTextLayout;
import com.android.dialer.callcomposer.CallComposerActivity;
import com.android.dialer.callintent.CallIntentBuilder;
-import com.android.dialer.callintent.nano.CallSpecificAppData;
+import com.android.dialer.callintent.CallSpecificAppData;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.database.Database;
import com.android.dialer.database.DialerDatabaseHelper;
import com.android.dialer.interactions.PhoneNumberInteraction;
import com.android.dialer.interactions.PhoneNumberInteraction.InteractionErrorCode;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
-import com.android.dialer.logging.nano.ScreenEvent;
+import com.android.dialer.logging.ScreenEvent;
import com.android.dialer.p13n.inference.P13nRanking;
import com.android.dialer.p13n.inference.protocol.P13nRanker;
import com.android.dialer.p13n.inference.protocol.P13nRanker.P13nRefreshCompleteListener;
diff --git a/java/com/android/dialer/app/calllog/BlockReportSpamListener.java b/java/com/android/dialer/app/calllog/BlockReportSpamListener.java
index 66f40bcd7..740d6b361 100644
--- a/java/com/android/dialer/app/calllog/BlockReportSpamListener.java
+++ b/java/com/android/dialer/app/calllog/BlockReportSpamListener.java
@@ -24,9 +24,10 @@ import android.support.v7.widget.RecyclerView;
import com.android.dialer.blocking.BlockReportSpamDialogs;
import com.android.dialer.blocking.FilteredNumberAsyncQueryHandler;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.ContactSource;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
-import com.android.dialer.logging.nano.ReportingLocation;
+import com.android.dialer.logging.ReportingLocation;
import com.android.dialer.spam.Spam;
/** Listener to show dialogs for block and report spam actions. */
@@ -54,7 +55,7 @@ public class BlockReportSpamListener implements CallLogListItemViewHolder.OnClic
final String number,
final String countryIso,
final int callType,
- final int contactSourceType) {
+ final ContactSource.Type contactSourceType) {
BlockReportSpamDialogs.BlockReportSpamDialogFragment.newInstance(
displayNumber,
Spam.get(mContext).isDialogReportSpamCheckedByDefault(),
@@ -98,7 +99,7 @@ public class BlockReportSpamListener implements CallLogListItemViewHolder.OnClic
final String number,
final String countryIso,
final int callType,
- final int contactSourceType) {
+ final ContactSource.Type contactSourceType) {
BlockReportSpamDialogs.BlockDialogFragment.newInstance(
displayNumber,
Spam.get(mContext).isSpamEnabled(),
@@ -142,7 +143,7 @@ public class BlockReportSpamListener implements CallLogListItemViewHolder.OnClic
final String number,
final String countryIso,
final int callType,
- final int contactSourceType,
+ final ContactSource.Type contactSourceType,
final boolean isSpam,
final Integer blockId) {
BlockReportSpamDialogs.UnblockDialogFragment.newInstance(
@@ -185,7 +186,7 @@ public class BlockReportSpamListener implements CallLogListItemViewHolder.OnClic
final String number,
final String countryIso,
final int callType,
- final int contactSourceType) {
+ final ContactSource.Type contactSourceType) {
BlockReportSpamDialogs.ReportNotSpamDialogFragment.newInstance(
displayNumber,
new BlockReportSpamDialogs.OnConfirmListener() {
diff --git a/java/com/android/dialer/app/calllog/CallLogActivity.java b/java/com/android/dialer/app/calllog/CallLogActivity.java
index 719ab4369..443171d3f 100644
--- a/java/com/android/dialer/app/calllog/CallLogActivity.java
+++ b/java/com/android/dialer/app/calllog/CallLogActivity.java
@@ -33,7 +33,7 @@ import com.android.dialer.app.DialtactsActivity;
import com.android.dialer.app.R;
import com.android.dialer.database.CallLogQueryHandler;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.ScreenEvent;
+import com.android.dialer.logging.ScreenEvent;
import com.android.dialer.util.TransactionSafeActivity;
import com.android.dialer.util.ViewUtil;
diff --git a/java/com/android/dialer/app/calllog/CallLogAdapter.java b/java/com/android/dialer/app/calllog/CallLogAdapter.java
index 06f48aa20..d4872d5b3 100644
--- a/java/com/android/dialer/app/calllog/CallLogAdapter.java
+++ b/java/com/android/dialer/app/calllog/CallLogAdapter.java
@@ -18,6 +18,7 @@ package com.android.dialer.app.calllog;
import android.app.Activity;
import android.content.ContentUris;
+import android.content.DialogInterface;
import android.content.res.Resources;
import android.database.Cursor;
import android.net.Uri;
@@ -33,13 +34,14 @@ import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.VisibleForTesting;
import android.support.annotation.WorkerThread;
+import android.support.v7.app.AlertDialog;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.ViewHolder;
import android.telecom.PhoneAccountHandle;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
-import android.util.SparseBooleanArray;
+import android.util.SparseArray;
import android.view.ActionMode;
import android.view.LayoutInflater;
import android.view.Menu;
@@ -59,8 +61,8 @@ import com.android.dialer.app.contactinfo.ContactInfoCache;
import com.android.dialer.app.voicemail.VoicemailPlaybackPresenter;
import com.android.dialer.app.voicemail.VoicemailPlaybackPresenter.OnVoicemailDeletedListener;
import com.android.dialer.blocking.FilteredNumberAsyncQueryHandler;
-import com.android.dialer.calldetails.nano.CallDetailsEntries;
-import com.android.dialer.calldetails.nano.CallDetailsEntries.CallDetailsEntry;
+import com.android.dialer.calldetails.CallDetailsEntries;
+import com.android.dialer.calldetails.CallDetailsEntries.CallDetailsEntry;
import com.android.dialer.calllogutils.PhoneAccountUtils;
import com.android.dialer.calllogutils.PhoneCallDetails;
import com.android.dialer.common.Assert;
@@ -71,12 +73,12 @@ import com.android.dialer.common.concurrent.AsyncTaskExecutors;
import com.android.dialer.enrichedcall.EnrichedCallCapabilities;
import com.android.dialer.enrichedcall.EnrichedCallComponent;
import com.android.dialer.enrichedcall.EnrichedCallManager;
-import com.android.dialer.enrichedcall.historyquery.proto.nano.HistoryResult;
+import com.android.dialer.enrichedcall.historyquery.proto.HistoryResult;
import com.android.dialer.lightbringer.Lightbringer;
import com.android.dialer.lightbringer.LightbringerComponent;
import com.android.dialer.lightbringer.LightbringerListener;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
import com.android.dialer.phonenumbercache.CallLogQuery;
import com.android.dialer.phonenumbercache.ContactInfo;
import com.android.dialer.phonenumbercache.ContactInfoHelper;
@@ -129,8 +131,8 @@ public class CallLogAdapter extends GroupingListAdapter
private final CallLogAlertManager mCallLogAlertManager;
- public static ActionMode mActionMode = null;
- private final SparseBooleanArray selectedItems = new SparseBooleanArray();
+ public ActionMode mActionMode = null;
+ private final SparseArray<String> selectedItems = new SparseArray<>();
private final ActionMode.Callback mActionModeCallback =
new ActionMode.Callback() {
@@ -155,7 +157,15 @@ public class CallLogAdapter extends GroupingListAdapter
// Called when the user selects a contextual menu item
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
- return false;
+ if (item.getItemId() == R.id.action_bar_delete_menu_item) {
+ if (selectedItems.size() > 0) {
+ showDeleteSelectedItemsDialog();
+ }
+ mode.finish();
+ return true;
+ } else {
+ return false;
+ }
}
// Called when the user exits the action mode
@@ -167,14 +177,66 @@ public class CallLogAdapter extends GroupingListAdapter
}
};
+ private void showDeleteSelectedItemsDialog() {
+ AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
+ Assert.checkArgument(selectedItems.size() > 0);
+ String voicemailString =
+ selectedItems.size() == 1
+ ? mActivity.getResources().getString(R.string.voicemailMultiSelectVoicemail)
+ : mActivity.getResources().getString(R.string.voicemailMultiSelectVoicemail);
+ String deleteVoicemailTitle =
+ mActivity
+ .getResources()
+ .getString(R.string.voicemailMultiSelectDialogTitle, voicemailString);
+ SparseArray<String> voicemailsToDeleteOnConfirmation = selectedItems.clone();
+ builder.setTitle(deleteVoicemailTitle);
+
+ builder.setPositiveButton(
+ mActivity.getResources().getString(R.string.voicemailMultiSelectDeleteConfirm),
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int id) {
+ deleteSelectedItems(voicemailsToDeleteOnConfirmation);
+ dialog.cancel();
+ }
+ });
+
+ builder.setNegativeButton(
+ mActivity.getResources().getString(R.string.voicemailMultiSelectDeleteCancel),
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int id) {
+ dialog.cancel();
+ }
+ });
+
+ AlertDialog dialog = builder.create();
+ dialog.show();
+ }
+
+ private void deleteSelectedItems(SparseArray<String> voicemailsToDelete) {
+ for (int i = 0; i < voicemailsToDelete.size(); i++) {
+ String voicemailUri = voicemailsToDelete.get(voicemailsToDelete.keyAt(i));
+ CallLogAsyncTaskUtil.deleteVoicemail(mActivity, Uri.parse(voicemailUri), null);
+ }
+ }
+
private final View.OnLongClickListener mLongPressListener =
new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if (ConfigProviderBindings.get(v.getContext())
- .getBoolean("enable_call_log_multiselect", false)) {
- v.startActionMode(mActionModeCallback);
- return false;
+ .getBoolean("enable_call_log_multiselect", true)
+ && mVoicemailPlaybackPresenter != null) {
+ if (v.getId() == R.id.primary_action_view) {
+ if (mActionMode == null) {
+ mActionMode = v.startActionMode(mActionModeCallback);
+ }
+ CallLogListItemViewHolder viewHolder = (CallLogListItemViewHolder) v.getTag();
+ viewHolder.quickContactView.setVisibility(View.GONE);
+ viewHolder.checkBoxView.setVisibility(View.VISIBLE);
+ return false;
+ }
}
return true;
}
@@ -190,15 +252,20 @@ public class CallLogAdapter extends GroupingListAdapter
return;
}
if (mActionMode != null && viewHolder.voicemailUri != null) {
- if (selectedItems.get((int) ContentUris.parseId(Uri.parse(viewHolder.voicemailUri)))) {
- selectedItems.delete((int) ContentUris.parseId(Uri.parse(viewHolder.voicemailUri)));
+ int id = getVoicemailId(viewHolder.voicemailUri);
+ if (selectedItems.get(id) != null) {
+ selectedItems.delete(id);
viewHolder.checkBoxView.setVisibility(View.GONE);
viewHolder.quickContactView.setVisibility(View.VISIBLE);
} else {
viewHolder.quickContactView.setVisibility(View.GONE);
viewHolder.checkBoxView.setVisibility(View.VISIBLE);
- selectedItems.put(
- (int) ContentUris.parseId(Uri.parse(viewHolder.voicemailUri)), true);
+ selectedItems.put(getVoicemailId(viewHolder.voicemailUri), viewHolder.voicemailUri);
+ }
+
+ if (selectedItems.size() == 0) {
+ mActionMode.finish();
+ return;
}
mActionMode.setTitle(Integer.toString(selectedItems.size()));
return;
@@ -216,12 +283,10 @@ public class CallLogAdapter extends GroupingListAdapter
getEnrichedCallManager().getCapabilities(viewHolder.number);
viewHolder.isCallComposerCapable =
capabilities != null && capabilities.supportsCallComposer();
-
- CallDetailsEntries callDetailsEntries = viewHolder.getDetailedPhoneDetails();
- setCallDetailsEntriesHistoryResults(
+ generateAndMapNewCallDetailsEntriesHistoryResults(
viewHolder.number,
- callDetailsEntries,
- getAllHistoricalData(viewHolder.number, callDetailsEntries));
+ viewHolder.getDetailedPhoneDetails(),
+ getAllHistoricalData(viewHolder.number, viewHolder.getDetailedPhoneDetails()));
if (viewHolder.rowId == mCurrentlyExpandedRowId) {
// Hide actions, if the clicked item is the expanded item.
@@ -241,6 +306,12 @@ public class CallLogAdapter extends GroupingListAdapter
}
};
+ private static int getVoicemailId(String voicemailUri) {
+ Assert.checkArgument(voicemailUri != null);
+ Assert.checkArgument(voicemailUri.length() > 0);
+ return (int) ContentUris.parseId(Uri.parse(voicemailUri));
+ }
+
/**
* A list of {@link CallLogQuery#ID} that will be hidden. The hide might be temporary so instead
* if removing an item, it will be shown as an invisible view. This simplifies the calculation of
@@ -547,9 +618,12 @@ public class CallLogAdapter extends GroupingListAdapter
// the value will be false while capabilities are requested. mExpandCollapseListener will
// attempt to set the field properly in that case
views.isCallComposerCapable = isCallComposerCapable(views.number);
- setCallDetailsEntriesHistoryResults(
- views.number, callDetailsEntries, getAllHistoricalData(views.number, callDetailsEntries));
- views.setDetailedPhoneDetails(callDetailsEntries);
+ CallDetailsEntries updatedCallDetailsEntries =
+ generateAndMapNewCallDetailsEntriesHistoryResults(
+ views.number,
+ callDetailsEntries,
+ getAllHistoricalData(views.number, callDetailsEntries));
+ views.setDetailedPhoneDetails(updatedCallDetailsEntries);
views.lightbringerReady = getLightbringer().isReachable(mActivity, views.number);
final AsyncTask<Void, Void, Boolean> loadDataTask =
new AsyncTask<Void, Void, Boolean>() {
@@ -625,23 +699,27 @@ public class CallLogAdapter extends GroupingListAdapter
return historicalData;
}
- private void setCallDetailsEntriesHistoryResults(
+ private static CallDetailsEntries generateAndMapNewCallDetailsEntriesHistoryResults(
@Nullable String number,
@NonNull CallDetailsEntries callDetailsEntries,
@NonNull Map<CallDetailsEntry, List<HistoryResult>> mappedResults) {
if (number == null) {
- return;
+ return callDetailsEntries;
}
- for (CallDetailsEntry entry : callDetailsEntries.entries) {
+ CallDetailsEntries.Builder mutableCallDetailsEntries = CallDetailsEntries.newBuilder();
+ for (CallDetailsEntry entry : callDetailsEntries.getEntriesList()) {
+ CallDetailsEntry.Builder newEntry = CallDetailsEntry.newBuilder().mergeFrom(entry);
List<HistoryResult> results = mappedResults.get(entry);
if (results != null) {
- entry.historyResults = mappedResults.get(entry).toArray(new HistoryResult[0]);
+ newEntry.addAllHistoryResults(mappedResults.get(entry));
LogUtil.v(
- "CallLogAdapter.setCallDetailsEntriesHistoryResults",
+ "CallLogAdapter.generateAndMapNewCallDetailsEntriesHistoryResults",
"mapped %d results",
- entry.historyResults.length);
+ newEntry.getHistoryResultsList().size());
}
+ mutableCallDetailsEntries.addEntries(newEntry.build());
}
+ return mutableCallDetailsEntries.build();
}
/**
@@ -703,21 +781,21 @@ public class CallLogAdapter extends GroupingListAdapter
private static CallDetailsEntries createCallDetailsEntries(Cursor cursor, int count) {
Assert.isMainThread();
int position = cursor.getPosition();
- CallDetailsEntries entries = new CallDetailsEntries();
- entries.entries = new CallDetailsEntry[count];
+ CallDetailsEntries.Builder entries = CallDetailsEntries.newBuilder();
for (int i = 0; i < count; i++) {
- CallDetailsEntry entry = new CallDetailsEntry();
- entry.callId = cursor.getLong(CallLogQuery.ID);
- entry.callType = cursor.getInt(CallLogQuery.CALL_TYPE);
- entry.dataUsage = cursor.getLong(CallLogQuery.DATA_USAGE);
- entry.date = cursor.getLong(CallLogQuery.DATE);
- entry.duration = cursor.getLong(CallLogQuery.DURATION);
- entry.features |= cursor.getInt(CallLogQuery.FEATURES);
- entries.entries[i] = entry;
+ CallDetailsEntry.Builder entry =
+ CallDetailsEntry.newBuilder()
+ .setCallId(cursor.getLong(CallLogQuery.ID))
+ .setCallType(cursor.getInt(CallLogQuery.CALL_TYPE))
+ .setDataUsage(cursor.getLong(CallLogQuery.DATA_USAGE))
+ .setDate(cursor.getLong(CallLogQuery.DATE))
+ .setDuration(cursor.getLong(CallLogQuery.DURATION))
+ .setFeatures(cursor.getInt(CallLogQuery.FEATURES));
+ entries.addEntries(entry.build());
cursor.moveToNext();
}
cursor.moveToPosition(position);
- return entries;
+ return entries.build();
}
/**
@@ -822,7 +900,7 @@ public class CallLogAdapter extends GroupingListAdapter
details.contactUserType == ContactsUtils.USER_TYPE_WORK ? View.VISIBLE : View.GONE);
if (views.voicemailUri != null
- && selectedItems.get((int) ContentUris.parseId(Uri.parse(views.voicemailUri)))) {
+ && selectedItems.get(getVoicemailId(views.voicemailUri)) != null) {
views.checkBoxView.setVisibility(View.VISIBLE);
views.quickContactView.setVisibility(View.GONE);
} else if (views.voicemailUri != null) {
diff --git a/java/com/android/dialer/app/calllog/CallLogListItemHelper.java b/java/com/android/dialer/app/calllog/CallLogListItemHelper.java
index a5df8cca1..ac43b9ea7 100644
--- a/java/com/android/dialer/app/calllog/CallLogListItemHelper.java
+++ b/java/com/android/dialer/app/calllog/CallLogListItemHelper.java
@@ -269,7 +269,7 @@ import com.android.dialer.compat.AppCompatConstants;
if (!TextUtils.isEmpty(details.getPreferredName())) {
recipient = details.getPreferredName();
} else {
- recipient = details.displayNumber + details.postDialDigits;
+ recipient = details.displayNumber;
}
return recipient;
}
diff --git a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
index 9adcddb3c..b57f9b04a 100644
--- a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
+++ b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
@@ -22,6 +22,7 @@ import android.content.Intent;
import android.content.res.Resources;
import android.net.Uri;
import android.os.AsyncTask;
+import android.provider.CallLog;
import android.provider.CallLog.Calls;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.support.annotation.NonNull;
@@ -31,7 +32,10 @@ import android.support.v7.widget.RecyclerView;
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
import android.telephony.PhoneNumberUtils;
+import android.text.BidiFormatter;
+import android.text.TextDirectionHeuristics;
import android.text.TextUtils;
+import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewStub;
@@ -41,7 +45,7 @@ import android.widget.QuickContactBadge;
import android.widget.TextView;
import com.android.contacts.common.ClipboardUtils;
import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
+import com.android.contacts.common.compat.PhoneNumberUtilsCompat;
import com.android.contacts.common.dialog.CallSubjectDialog;
import com.android.contacts.common.util.UriUtils;
import com.android.dialer.app.DialtactsActivity;
@@ -53,14 +57,16 @@ import com.android.dialer.blocking.BlockedNumbersMigrator;
import com.android.dialer.blocking.FilteredNumberCompat;
import com.android.dialer.blocking.FilteredNumbersUtil;
import com.android.dialer.callcomposer.CallComposerActivity;
-import com.android.dialer.callcomposer.nano.CallComposerContact;
-import com.android.dialer.calldetails.nano.CallDetailsEntries;
+import com.android.dialer.callcomposer.CallComposerContact;
+import com.android.dialer.calldetails.CallDetailsEntries;
import com.android.dialer.common.LogUtil;
import com.android.dialer.compat.CompatUtils;
import com.android.dialer.lightbringer.Lightbringer;
import com.android.dialer.lightbringer.LightbringerComponent;
+import com.android.dialer.logging.ContactSource;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
+import com.android.dialer.logging.ScreenEvent;
import com.android.dialer.phonenumbercache.CachedNumberLookupService;
import com.android.dialer.phonenumbercache.ContactInfo;
import com.android.dialer.phonenumbercache.PhoneNumberCache;
@@ -76,7 +82,9 @@ import com.android.dialer.util.DialerUtils;
* CallLogAdapter.
*/
public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder
- implements View.OnClickListener, MenuItem.OnMenuItemClickListener {
+ implements View.OnClickListener,
+ MenuItem.OnMenuItemClickListener,
+ View.OnCreateContextMenuListener {
/** The root view of the call log list item */
public final View rootView;
/** The quick contact badge for the contact. */
@@ -98,7 +106,6 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder
private final CachedNumberLookupService mCachedNumberLookupService;
private final VoicemailPlaybackPresenter mVoicemailPlaybackPresenter;
private final OnClickListener mBlockReportListener;
- private final int mPhotoSize;
/** Whether the data fields are populated by the worker thread, ready to be shown. */
public boolean isLoaded;
/** The view containing call log item actions. Null until the ViewStub is inflated. */
@@ -237,7 +244,6 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder
this.primaryActionButtonView = primaryActionButtonView;
this.workIconView = (ImageView) rootView.findViewById(R.id.work_profile_icon);
this.checkBoxView = (ImageView) rootView.findViewById(R.id.quick_contact_checkbox);
- mPhotoSize = mContext.getResources().getDimensionPixelSize(R.dimen.contact_photo_size);
// Set text height to false on the TextViews so they don't have extra padding.
phoneCallDetailsViews.nameView.setElegantTextHeight(false);
@@ -249,7 +255,11 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder
}
primaryActionButtonView.setOnClickListener(this);
primaryActionView.setOnClickListener(mExpandCollapseListener);
- primaryActionView.setOnLongClickListener(longPressListener);
+ if (mVoicemailPlaybackPresenter != null) {
+ primaryActionView.setOnLongClickListener(longPressListener);
+ } else {
+ primaryActionView.setOnCreateContextMenuListener(this);
+ }
}
public static CallLogListItemViewHolder create(
@@ -689,36 +699,23 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder
return;
}
- final String lookupKey =
- info.lookupUri != null ? UriUtils.getLookupKeyFromUri(info.lookupUri) : null;
final String displayName = TextUtils.isEmpty(info.name) ? displayNumber : info.name;
- final DefaultImageRequest request =
- new DefaultImageRequest(displayName, lookupKey, getContactType(), true /* isCircular */);
-
- if (info.photoId == 0 && info.photoUri != null) {
- ContactPhotoManager.getInstance(mContext)
- .loadPhoto(
- quickContactView,
- info.photoUri,
- mPhotoSize,
- false /* darkTheme */,
- true /* isCircular */,
- request);
- } else {
- ContactPhotoManager.getInstance(mContext)
- .loadThumbnail(
- quickContactView,
- info.photoId,
- false /* darkTheme */,
- true /* isCircular */,
- request);
- }
+ ContactPhotoManager.getInstance(mContext)
+ .loadDialerThumbnailOrPhoto(
+ quickContactView,
+ info.lookupUri,
+ info.photoId,
+ info.photoUri,
+ displayName,
+ getContactType());
}
private int getContactType() {
int contactType = ContactPhotoManager.TYPE_DEFAULT;
if (mCallLogCache.isVoicemailNumber(accountHandle, number)) {
contactType = ContactPhotoManager.TYPE_VOICEMAIL;
+ } else if (isSpam) {
+ contactType = ContactPhotoManager.TYPE_SPAM;
} else if (mCachedNumberLookupService != null
&& mCachedNumberLookupService.isBusiness(info.sourceType)) {
contactType = ContactPhotoManager.TYPE_BUSINESS;
@@ -742,6 +739,7 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder
CallSubjectDialog.start(
(Activity) mContext,
info.photoId,
+ info.photoUri,
info.lookupUri,
(String) nameOrNumber /* top line of contact view in call subject dialog */,
number,
@@ -802,18 +800,24 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder
}
private CallComposerContact buildContact() {
- CallComposerContact contact = new CallComposerContact();
- contact.photoId = info.photoId;
- contact.photoUri = info.photoUri == null ? null : info.photoUri.toString();
- contact.contactUri = info.lookupUri == null ? null : info.lookupUri.toString();
- contact.nameOrNumber = (String) nameOrNumber;
- contact.contactType = getContactType();
- contact.number = number;
+ CallComposerContact.Builder contact = CallComposerContact.newBuilder();
+ contact.setPhotoId(info.photoId);
+ if (info.photoUri != null) {
+ contact.setPhotoUri(info.photoUri.toString());
+ }
+ if (info.lookupUri != null) {
+ contact.setContactUri(info.lookupUri.toString());
+ }
+ contact.setNameOrNumber((String) nameOrNumber);
+ contact.setContactType(getContactType());
+ contact.setNumber(number);
/* second line of contact view. */
- contact.displayNumber = TextUtils.isEmpty(info.name) ? null : displayNumber;
+ if (!TextUtils.isEmpty(info.name)) {
+ contact.setDisplayNumber(displayNumber);
+ }
/* phone number type (e.g. mobile) in second line of contact view */
- contact.numberLabel = numberType;
- return contact;
+ contact.setNumberLabel(numberType);
+ return contact.build();
}
private void logCallLogAction(int id) {
@@ -876,6 +880,104 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder
return LightbringerComponent.get(mContext).getLightbringer();
}
+ @Override
+ public void onCreateContextMenu(
+ final ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
+ if (TextUtils.isEmpty(number)) {
+ return;
+ }
+
+ if (callType == CallLog.Calls.VOICEMAIL_TYPE) {
+ menu.setHeaderTitle(mContext.getResources().getText(R.string.voicemail));
+ } else {
+ menu.setHeaderTitle(
+ PhoneNumberUtilsCompat.createTtsSpannable(
+ BidiFormatter.getInstance().unicodeWrap(number, TextDirectionHeuristics.LTR)));
+ }
+
+ menu.add(
+ ContextMenu.NONE,
+ R.id.context_menu_copy_to_clipboard,
+ ContextMenu.NONE,
+ R.string.action_copy_number_text)
+ .setOnMenuItemClickListener(this);
+
+ // The edit number before call does not show up if any of the conditions apply:
+ // 1) Number cannot be called
+ // 2) Number is the voicemail number
+ // 3) Number is a SIP address
+
+ if (PhoneNumberHelper.canPlaceCallsTo(number, numberPresentation)
+ && !mCallLogCache.isVoicemailNumber(accountHandle, number)
+ && !PhoneNumberHelper.isSipNumber(number)) {
+ menu.add(
+ ContextMenu.NONE,
+ R.id.context_menu_edit_before_call,
+ ContextMenu.NONE,
+ R.string.action_edit_number_before_call)
+ .setOnMenuItemClickListener(this);
+ }
+
+ if (callType == CallLog.Calls.VOICEMAIL_TYPE
+ && phoneCallDetailsViews.voicemailTranscriptionView.length() > 0) {
+ menu.add(
+ ContextMenu.NONE,
+ R.id.context_menu_copy_transcript_to_clipboard,
+ ContextMenu.NONE,
+ R.string.copy_transcript_text)
+ .setOnMenuItemClickListener(this);
+ }
+
+ String e164Number = PhoneNumberUtils.formatNumberToE164(number, countryIso);
+ boolean isVoicemailNumber = mCallLogCache.isVoicemailNumber(accountHandle, number);
+ if (!isVoicemailNumber
+ && FilteredNumbersUtil.canBlockNumber(mContext, e164Number, number)
+ && FilteredNumberCompat.canAttemptBlockOperations(mContext)) {
+ boolean isBlocked = blockId != null;
+ if (isBlocked) {
+ menu.add(
+ ContextMenu.NONE,
+ R.id.context_menu_unblock,
+ ContextMenu.NONE,
+ R.string.call_log_action_unblock_number)
+ .setOnMenuItemClickListener(this);
+ } else {
+ if (isSpamFeatureEnabled) {
+ if (isSpam) {
+ menu.add(
+ ContextMenu.NONE,
+ R.id.context_menu_report_not_spam,
+ ContextMenu.NONE,
+ R.string.call_log_action_remove_spam)
+ .setOnMenuItemClickListener(this);
+ menu.add(
+ ContextMenu.NONE,
+ R.id.context_menu_block,
+ ContextMenu.NONE,
+ R.string.call_log_action_block_number)
+ .setOnMenuItemClickListener(this);
+ } else {
+ menu.add(
+ ContextMenu.NONE,
+ R.id.context_menu_block_report_spam,
+ ContextMenu.NONE,
+ R.string.call_log_action_block_report_number)
+ .setOnMenuItemClickListener(this);
+ }
+ } else {
+ menu.add(
+ ContextMenu.NONE,
+ R.id.context_menu_block,
+ ContextMenu.NONE,
+ R.string.call_log_action_block_number)
+ .setOnMenuItemClickListener(this);
+ }
+ }
+ }
+
+ Logger.get(mContext).logScreenView(ScreenEvent.Type.CALL_LOG_CONTEXT_MENU, (Activity) mContext);
+ }
+
public interface OnClickListener {
void onBlockReportSpam(
@@ -883,21 +985,21 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder
String number,
String countryIso,
int callType,
- int contactSourceType);
+ ContactSource.Type contactSourceType);
void onBlock(
String displayNumber,
String number,
String countryIso,
int callType,
- int contactSourceType);
+ ContactSource.Type contactSourceType);
void onUnblock(
String displayNumber,
String number,
String countryIso,
int callType,
- int contactSourceType,
+ ContactSource.Type contactSourceType,
boolean isSpam,
Integer blockId);
@@ -906,6 +1008,6 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder
String number,
String countryIso,
int callType,
- int contactSourceType);
+ ContactSource.Type contactSourceType);
}
}
diff --git a/java/com/android/dialer/app/calllog/DefaultVoicemailNotifier.java b/java/com/android/dialer/app/calllog/DefaultVoicemailNotifier.java
index dfe5776d8..0007d1863 100644
--- a/java/com/android/dialer/app/calllog/DefaultVoicemailNotifier.java
+++ b/java/com/android/dialer/app/calllog/DefaultVoicemailNotifier.java
@@ -16,6 +16,7 @@
package com.android.dialer.app.calllog;
+import android.annotation.TargetApi;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
@@ -26,11 +27,17 @@ import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
+import android.os.PersistableBundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.VisibleForTesting;
+import android.support.v4.os.BuildCompat;
import android.support.v4.util.Pair;
+import android.telecom.PhoneAccount;
import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
+import android.telephony.CarrierConfigManager;
+import android.telephony.PhoneNumberUtils;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.ArrayMap;
@@ -42,9 +49,11 @@ import com.android.dialer.app.calllog.CallLogNotificationsQueryHelper.NewCall;
import com.android.dialer.app.contactinfo.ContactPhotoLoader;
import com.android.dialer.app.list.DialtactsPagerAdapter;
import com.android.dialer.blocking.FilteredNumbersUtil;
+import com.android.dialer.calllogutils.PhoneAccountUtils;
+import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
import com.android.dialer.notification.NotificationChannelManager;
import com.android.dialer.notification.NotificationChannelManager.Channel;
import com.android.dialer.phonenumbercache.ContactInfo;
@@ -58,9 +67,12 @@ public class DefaultVoicemailNotifier {
public static final String TAG = "VoicemailNotifier";
/** The tag used to identify notifications from this class. */
- static final String NOTIFICATION_TAG = "DefaultVoicemailNotifier";
+ static final String VISUAL_VOICEMAIL_NOTIFICATION_TAG = "DefaultVoicemailNotifier";
/** The identifier of the notification of new voicemails. */
- private static final int NOTIFICATION_ID = R.id.notification_voicemail;
+ private static final int VISUAL_VOICEMAIL_NOTIFICATION_ID = R.id.notification_visual_voicemail;
+
+ private static final int LEGACY_VOICEMAIL_NOTIFICATION_ID = R.id.notification_legacy_voicemail;
+ private static final String LEGACY_VOICEMAIL_NOTIFICATION_TAG = "legacy_voicemail";
private final Context context;
private final CallLogNotificationsQueryHelper queryHelper;
@@ -159,19 +171,103 @@ public class DefaultVoicemailNotifier {
Channel.VOICEMAIL,
PhoneAccountHandles.getAccount(context, newCalls.get(0)));
- LogUtil.i(TAG, "Creating voicemail notification");
- getNotificationManager().notify(NOTIFICATION_TAG, NOTIFICATION_ID, groupSummary.build());
+ LogUtil.i(TAG, "Creating visual voicemail notification");
+ getNotificationManager()
+ .notify(
+ VISUAL_VOICEMAIL_NOTIFICATION_TAG,
+ VISUAL_VOICEMAIL_NOTIFICATION_ID,
+ groupSummary.build());
for (NewCall voicemail : newCalls) {
getNotificationManager()
.notify(
voicemail.callsUri.toString(),
- NOTIFICATION_ID,
+ VISUAL_VOICEMAIL_NOTIFICATION_ID,
createNotificationForVoicemail(voicemail, contactInfos));
}
}
/**
+ * Replicates how packages/services/Telephony/NotificationMgr.java handles legacy voicemail
+ * notification. The notification will not be stackable because no information is available for
+ * individual voicemails.
+ */
+ @TargetApi(VERSION_CODES.O)
+ public void notifyLegacyVoicemail(
+ @NonNull PhoneAccountHandle phoneAccountHandle,
+ int count,
+ String voicemailNumber,
+ PendingIntent callVoicemailIntent,
+ PendingIntent voicemailSettingIntent) {
+ Assert.isNotNull(phoneAccountHandle);
+ Assert.checkArgument(BuildCompat.isAtLeastO());
+ TelephonyManager telephonyManager =
+ context
+ .getSystemService(TelephonyManager.class)
+ .createForPhoneAccountHandle(phoneAccountHandle);
+ Assert.isNotNull(telephonyManager);
+ LogUtil.i(TAG, "Creating legacy voicemail notification");
+
+ PersistableBundle carrierConfig = telephonyManager.getCarrierConfig();
+
+ String notificationTitle =
+ context
+ .getResources()
+ .getQuantityString(R.plurals.notification_voicemail_title, count, count);
+
+ TelecomManager telecomManager = context.getSystemService(TelecomManager.class);
+ PhoneAccount phoneAccount = telecomManager.getPhoneAccount(phoneAccountHandle);
+
+ String notificationText;
+ PendingIntent pendingIntent;
+
+ if (voicemailSettingIntent != null) {
+ // If the voicemail number if unknown, instead of calling voicemail, take the user
+ // to the voicemail settings.
+ notificationText = context.getString(R.string.notification_voicemail_no_vm_number);
+ pendingIntent = voicemailSettingIntent;
+ } else {
+ if (PhoneAccountUtils.getSubscriptionPhoneAccounts(context).size() > 1) {
+ notificationText = phoneAccount.getShortDescription().toString();
+ } else {
+ notificationText =
+ String.format(
+ context.getString(R.string.notification_voicemail_text_format),
+ PhoneNumberUtils.formatNumber(voicemailNumber));
+ }
+ pendingIntent = callVoicemailIntent;
+ }
+ Notification.Builder builder = new Notification.Builder(context);
+ builder
+ .setSmallIcon(android.R.drawable.stat_notify_voicemail)
+ .setColor(context.getColor(R.color.dialer_theme_color))
+ .setWhen(System.currentTimeMillis())
+ .setContentTitle(notificationTitle)
+ .setContentText(notificationText)
+ .setContentIntent(pendingIntent)
+ .setSound(telephonyManager.getVoicemailRingtoneUri(phoneAccountHandle))
+ .setOngoing(
+ carrierConfig.getBoolean(
+ CarrierConfigManager.KEY_VOICEMAIL_NOTIFICATION_PERSISTENT_BOOL));
+
+ if (telephonyManager.isVoicemailVibrationEnabled(phoneAccountHandle)) {
+ builder.setDefaults(Notification.DEFAULT_VIBRATE);
+ }
+
+ NotificationChannelManager.applyChannel(
+ builder, context, Channel.VOICEMAIL, phoneAccountHandle);
+ Notification notification = builder.build();
+ getNotificationManager()
+ .notify(LEGACY_VOICEMAIL_NOTIFICATION_TAG, LEGACY_VOICEMAIL_NOTIFICATION_ID, notification);
+ }
+
+ public void cancelLegacyNotification() {
+ LogUtil.i(TAG, "Clearing legacy voicemail notification");
+ getNotificationManager()
+ .cancel(LEGACY_VOICEMAIL_NOTIFICATION_TAG, LEGACY_VOICEMAIL_NOTIFICATION_ID);
+ }
+
+ /**
* Determines which ringtone Uri and Notification defaults to use when updating the notification
* for the given call.
*/
@@ -268,7 +364,7 @@ public class DefaultVoicemailNotifier {
return new Notification.Builder(context)
.setSmallIcon(android.R.drawable.stat_notify_voicemail)
.setColor(context.getColor(R.color.dialer_theme_color))
- .setGroup(NOTIFICATION_TAG)
+ .setGroup(VISUAL_VOICEMAIL_NOTIFICATION_TAG)
.setOnlyAlertOnce(true)
.setAutoCancel(true);
}
diff --git a/java/com/android/dialer/app/calllog/IntentProvider.java b/java/com/android/dialer/app/calllog/IntentProvider.java
index 8b77c3f51..a94c6781e 100644
--- a/java/com/android/dialer/app/calllog/IntentProvider.java
+++ b/java/com/android/dialer/app/calllog/IntentProvider.java
@@ -24,11 +24,11 @@ import android.provider.ContactsContract;
import android.telecom.PhoneAccountHandle;
import com.android.contacts.common.model.Contact;
import com.android.contacts.common.model.ContactLoader;
-import com.android.dialer.callcomposer.nano.CallComposerContact;
+import com.android.dialer.callcomposer.CallComposerContact;
import com.android.dialer.calldetails.CallDetailsActivity;
-import com.android.dialer.calldetails.nano.CallDetailsEntries;
+import com.android.dialer.calldetails.CallDetailsEntries;
+import com.android.dialer.callintent.CallInitiationType;
import com.android.dialer.callintent.CallIntentBuilder;
-import com.android.dialer.callintent.nano.CallInitiationType;
import com.android.dialer.lightbringer.LightbringerComponent;
import com.android.dialer.util.CallUtil;
import com.android.dialer.util.IntentUtil;
diff --git a/java/com/android/dialer/app/calllog/MissedCallNotifier.java b/java/com/android/dialer/app/calllog/MissedCallNotifier.java
index aa04d81eb..de07bb437 100644
--- a/java/com/android/dialer/app/calllog/MissedCallNotifier.java
+++ b/java/com/android/dialer/app/calllog/MissedCallNotifier.java
@@ -41,8 +41,8 @@ import com.android.dialer.app.R;
import com.android.dialer.app.calllog.CallLogNotificationsQueryHelper.NewCall;
import com.android.dialer.app.contactinfo.ContactPhotoLoader;
import com.android.dialer.app.list.DialtactsPagerAdapter;
+import com.android.dialer.callintent.CallInitiationType;
import com.android.dialer.callintent.CallIntentBuilder;
-import com.android.dialer.callintent.nano.CallInitiationType;
import com.android.dialer.common.LogUtil;
import com.android.dialer.notification.NotificationChannelManager;
import com.android.dialer.notification.NotificationChannelManager.Channel;
diff --git a/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java b/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java
index bc78eda02..0c720775a 100644
--- a/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java
+++ b/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java
@@ -25,13 +25,14 @@ import android.support.v4.content.ContextCompat;
import android.telecom.PhoneAccount;
import android.text.TextUtils;
import android.text.format.DateUtils;
+import android.text.util.Linkify;
import android.view.View;
import android.widget.TextView;
import com.android.dialer.app.R;
import com.android.dialer.app.calllog.calllogcache.CallLogCache;
import com.android.dialer.calllogutils.PhoneCallDetails;
+import com.android.dialer.logging.ContactSource;
import com.android.dialer.oem.MotorolaUtils;
-import com.android.dialer.phonenumbercache.CachedNumberLookupService.CachedContactInfo;
import com.android.dialer.phonenumberutil.PhoneNumberHelper;
import com.android.dialer.util.DialerUtils;
import java.util.ArrayList;
@@ -142,6 +143,8 @@ public class PhoneCallDetailsHelper {
views.nameView.setText(nameText);
if (isVoicemail) {
+ int relevantLinkTypes = Linkify.EMAIL_ADDRESSES | Linkify.PHONE_NUMBERS | Linkify.WEB_URLS;
+ views.voicemailTranscriptionView.setAutoLinkMask(relevantLinkTypes);
views.voicemailTranscriptionView.setText(
TextUtils.isEmpty(details.transcription) ? null : details.transcription);
}
@@ -230,7 +233,7 @@ public class PhoneCallDetailsHelper {
return false;
}
// For caller ID provided by Cequint we want to show the geo location.
- if (details.sourceType == CachedContactInfo.SOURCE_TYPE_CEQUINT_CALLER_ID) {
+ if (details.sourceType == ContactSource.Type.SOURCE_TYPE_CEQUINT_CALLER_ID) {
return true;
}
// Don't bother showing geo location for contacts.
diff --git a/java/com/android/dialer/app/calllog/VisualVoicemailCallLogFragment.java b/java/com/android/dialer/app/calllog/VisualVoicemailCallLogFragment.java
index 5e820a750..7c25e7d39 100644
--- a/java/com/android/dialer/app/calllog/VisualVoicemailCallLogFragment.java
+++ b/java/com/android/dialer/app/calllog/VisualVoicemailCallLogFragment.java
@@ -31,15 +31,15 @@ import com.android.dialer.app.voicemail.VoicemailAudioManager;
import com.android.dialer.app.voicemail.VoicemailErrorManager;
import com.android.dialer.app.voicemail.VoicemailPlaybackPresenter;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
public class VisualVoicemailCallLogFragment extends CallLogFragment {
private final ContentObserver mVoicemailStatusObserver = new CustomContentObserver();
private VoicemailPlaybackPresenter mVoicemailPlaybackPresenter;
- private VoicemailErrorManager mVoicemailAlertManager;
+ private VoicemailErrorManager mVoicemailErrorManager;
public VisualVoicemailCallLogFragment() {
super(CallLog.Calls.VOICEMAIL_TYPE);
@@ -63,14 +63,14 @@ public class VisualVoicemailCallLogFragment extends CallLogFragment {
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
- mVoicemailAlertManager =
+ mVoicemailErrorManager =
new VoicemailErrorManager(getContext(), getAdapter().getAlertManager(), mModalAlertManager);
getActivity()
.getContentResolver()
.registerContentObserver(
VoicemailContract.Status.CONTENT_URI,
true,
- mVoicemailAlertManager.getContentObserver());
+ mVoicemailErrorManager.getContentObserver());
}
@Override
@@ -84,13 +84,13 @@ public class VisualVoicemailCallLogFragment extends CallLogFragment {
public void onResume() {
super.onResume();
mVoicemailPlaybackPresenter.onResume();
- mVoicemailAlertManager.onResume();
+ mVoicemailErrorManager.onResume();
}
@Override
public void onPause() {
mVoicemailPlaybackPresenter.onPause();
- mVoicemailAlertManager.onPause();
+ mVoicemailErrorManager.onPause();
super.onPause();
}
@@ -98,8 +98,9 @@ public class VisualVoicemailCallLogFragment extends CallLogFragment {
public void onDestroy() {
getActivity()
.getContentResolver()
- .unregisterContentObserver(mVoicemailAlertManager.getContentObserver());
+ .unregisterContentObserver(mVoicemailErrorManager.getContentObserver());
mVoicemailPlaybackPresenter.onDestroy();
+ mVoicemailErrorManager.onDestroy();
getActivity().getContentResolver().unregisterContentObserver(mVoicemailStatusObserver);
super.onDestroy();
}
@@ -131,6 +132,9 @@ public class VisualVoicemailCallLogFragment extends CallLogFragment {
public void onNotVisible() {
LogUtil.enterBlock("VisualVoicemailCallLogFragment.onPageUnselected");
super.onNotVisible();
+ if (getAdapter() != null && getAdapter().mActionMode != null) {
+ getAdapter().mActionMode.finish();
+ }
if (getActivity() != null) {
getActivity().setVolumeControlStream(AudioManager.USE_DEFAULT_STREAM_TYPE);
}
diff --git a/java/com/android/dialer/app/calllog/VoicemailQueryHandler.java b/java/com/android/dialer/app/calllog/VoicemailQueryHandler.java
index 2aa3fb282..024394728 100644
--- a/java/com/android/dialer/app/calllog/VoicemailQueryHandler.java
+++ b/java/com/android/dialer/app/calllog/VoicemailQueryHandler.java
@@ -76,8 +76,8 @@ public class VoicemailQueryHandler extends AsyncQueryHandler {
GroupedNotificationUtil.removeNotification(
mContext.getSystemService(NotificationManager.class),
voicemailUri != null ? voicemailUri.toString() : null,
- R.id.notification_voicemail,
- DefaultVoicemailNotifier.NOTIFICATION_TAG);
+ R.id.notification_visual_voicemail,
+ DefaultVoicemailNotifier.VISUAL_VOICEMAIL_NOTIFICATION_TAG);
}
@Override
diff --git a/java/com/android/dialer/app/contactinfo/ContactInfoCache.java b/java/com/android/dialer/app/contactinfo/ContactInfoCache.java
index 85a9c3ef1..7a5db19f2 100644
--- a/java/com/android/dialer/app/contactinfo/ContactInfoCache.java
+++ b/java/com/android/dialer/app/contactinfo/ContactInfoCache.java
@@ -23,6 +23,7 @@ import android.support.annotation.NonNull;
import android.support.annotation.VisibleForTesting;
import android.text.TextUtils;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.ContactSource.Type;
import com.android.dialer.phonenumbercache.ContactInfo;
import com.android.dialer.phonenumbercache.ContactInfoHelper;
import com.android.dialer.util.ExpirableCache;
@@ -183,7 +184,7 @@ public class ContactInfoCache {
new NumberWithCountryIso(request.number, request.countryIso);
ContactInfo existingInfo = mCache.getPossiblyExpired(numberCountryIso);
- final boolean isRemoteSource = info.sourceType != 0;
+ final boolean isRemoteSource = info.sourceType != Type.UNKNOWN_SOURCE_TYPE;
// Don't force redraw if existing info in the cache is equal to {@link ContactInfo#EMPTY}
// to avoid updating the data set for every new row that is scrolled into view.
@@ -346,7 +347,7 @@ public class ContactInfoCache {
shouldRedraw |= queryContactInfo(request);
if (shouldRedraw
&& (mUpdateRequests.isEmpty()
- || request.isLocalRequest() && !mUpdateRequests.peek().isLocalRequest())) {
+ || (request.isLocalRequest() && !mUpdateRequests.peek().isLocalRequest()))) {
shouldRedraw = false;
mHandler.sendEmptyMessage(REDRAW);
}
diff --git a/java/com/android/dialer/app/dialpad/DialpadFragment.java b/java/com/android/dialer/app/dialpad/DialpadFragment.java
index 80be8fe05..271f62199 100644
--- a/java/com/android/dialer/app/dialpad/DialpadFragment.java
+++ b/java/com/android/dialer/app/dialpad/DialpadFragment.java
@@ -78,8 +78,8 @@ import com.android.dialer.app.DialtactsActivity;
import com.android.dialer.app.R;
import com.android.dialer.app.SpecialCharSequenceMgr;
import com.android.dialer.app.calllog.CallLogAsync;
+import com.android.dialer.callintent.CallInitiationType;
import com.android.dialer.callintent.CallIntentBuilder;
-import com.android.dialer.callintent.nano.CallInitiationType;
import com.android.dialer.calllogutils.PhoneAccountUtils;
import com.android.dialer.common.LogUtil;
import com.android.dialer.dialpadview.DialpadKeyButton;
diff --git a/java/com/android/dialer/app/filterednumber/BlockedNumbersAdapter.java b/java/com/android/dialer/app/filterednumber/BlockedNumbersAdapter.java
index b9381331c..ac4903c31 100644
--- a/java/com/android/dialer/app/filterednumber/BlockedNumbersAdapter.java
+++ b/java/com/android/dialer/app/filterednumber/BlockedNumbersAdapter.java
@@ -25,8 +25,8 @@ import com.android.contacts.common.GeoUtil;
import com.android.dialer.app.R;
import com.android.dialer.blocking.BlockNumberDialogFragment;
import com.android.dialer.database.FilteredNumberContract.FilteredNumberColumns;
+import com.android.dialer.logging.InteractionEvent;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.InteractionEvent;
import com.android.dialer.phonenumbercache.ContactInfoHelper;
public class BlockedNumbersAdapter extends NumbersAdapter {
@@ -55,8 +55,6 @@ public class BlockedNumbersAdapter extends NumbersAdapter {
final String countryIso =
cursor.getString(cursor.getColumnIndex(FilteredNumberColumns.COUNTRY_ISO));
final String number = cursor.getString(cursor.getColumnIndex(FilteredNumberColumns.NUMBER));
- final String normalizedNumber =
- cursor.getString(cursor.getColumnIndex(FilteredNumberColumns.NORMALIZED_NUMBER));
final View deleteButton = view.findViewById(R.id.delete_button);
deleteButton.setOnClickListener(
diff --git a/java/com/android/dialer/app/filterednumber/BlockedNumbersSettingsActivity.java b/java/com/android/dialer/app/filterednumber/BlockedNumbersSettingsActivity.java
index 9ec6042c0..9310fcb22 100644
--- a/java/com/android/dialer/app/filterednumber/BlockedNumbersSettingsActivity.java
+++ b/java/com/android/dialer/app/filterednumber/BlockedNumbersSettingsActivity.java
@@ -22,7 +22,7 @@ import com.android.dialer.app.R;
import com.android.dialer.app.list.BlockedListSearchFragment;
import com.android.dialer.app.list.SearchFragment;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.ScreenEvent;
+import com.android.dialer.logging.ScreenEvent;
public class BlockedNumbersSettingsActivity extends AppCompatActivity
implements SearchFragment.HostInterface {
diff --git a/java/com/android/dialer/app/list/BlockedListSearchFragment.java b/java/com/android/dialer/app/list/BlockedListSearchFragment.java
index 2129981c0..0f96e2d6e 100644
--- a/java/com/android/dialer/app/list/BlockedListSearchFragment.java
+++ b/java/com/android/dialer/app/list/BlockedListSearchFragment.java
@@ -23,7 +23,6 @@ import android.telephony.PhoneNumberUtils;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
-import android.util.Log;
import android.util.TypedValue;
import android.view.View;
import android.widget.AdapterView;
@@ -37,14 +36,13 @@ import com.android.dialer.app.widget.SearchEditTextLayout;
import com.android.dialer.blocking.BlockNumberDialogFragment;
import com.android.dialer.blocking.FilteredNumberAsyncQueryHandler;
import com.android.dialer.blocking.FilteredNumberAsyncQueryHandler.OnCheckBlockedListener;
+import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.InteractionEvent;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.InteractionEvent;
public class BlockedListSearchFragment extends RegularSearchFragment
implements BlockNumberDialogFragment.Callback {
- private static final String TAG = BlockedListSearchFragment.class.getSimpleName();
-
private final TextWatcher mPhoneSearchQueryTextListener =
new TextWatcher() {
@Override
@@ -152,7 +150,9 @@ public class BlockedListSearchFragment extends RegularSearchFragment
blockNumber(number);
break;
default:
- Log.w(TAG, "Ignoring unsupported shortcut type: " + shortcutType);
+ LogUtil.w(
+ "BlockedListSearchFragment.onItemClick",
+ "ignoring unsupported shortcut type: " + shortcutType);
break;
}
}
@@ -205,7 +205,9 @@ public class BlockedListSearchFragment extends RegularSearchFragment
@Override
public void onUnfilterNumberSuccess() {
- Log.wtf(TAG, "Unblocked a number from the BlockedListSearchFragment");
+ LogUtil.e(
+ "BlockedListSearchFragment.onUnfilterNumberSuccess",
+ "unblocked a number from the BlockedListSearchFragment");
goBack();
}
diff --git a/java/com/android/dialer/app/list/DialtactsPagerAdapter.java b/java/com/android/dialer/app/list/DialtactsPagerAdapter.java
index 3b700d81b..dba3d3a93 100644
--- a/java/com/android/dialer/app/list/DialtactsPagerAdapter.java
+++ b/java/com/android/dialer/app/list/DialtactsPagerAdapter.java
@@ -24,9 +24,13 @@ import android.support.v13.app.FragmentPagerAdapter;
import android.view.ViewGroup;
import com.android.dialer.app.calllog.CallLogFragment;
import com.android.dialer.app.calllog.VisualVoicemailCallLogFragment;
+import com.android.dialer.calllog.CallLogComponent;
+import com.android.dialer.calllog.CallLogFramework;
+import com.android.dialer.calllog.ui.NewCallLogFragment;
import com.android.dialer.common.Assert;
import com.android.dialer.common.ConfigProviderBindings;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.contactsfragment.ContactsFragment;
import com.android.dialer.database.CallLogQueryHandler;
import com.android.dialer.speeddial.SpeedDialFragment;
import com.android.dialer.util.ViewUtil;
@@ -54,11 +58,14 @@ public class DialtactsPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> fragments = new ArrayList<>();
private final String[] tabTitles;
private final boolean useNewSpeedDialTab;
-
+ private final boolean useNewCallLogTab;
+ private final boolean useNewContactsTab;
private OldSpeedDialFragment oldSpeedDialFragment;
private SpeedDialFragment speedDialFragment;
private CallLogFragment callLogFragment;
- private AllContactsFragment contactsFragment;
+ private NewCallLogFragment newCallLogFragment;
+ private AllContactsFragment oldContactsFragment;
+ private ContactsFragment contactsFragment;
private CallLogFragment voicemailFragment;
public boolean hasActiveVoicemailProvider;
@@ -68,6 +75,10 @@ public class DialtactsPagerAdapter extends FragmentPagerAdapter {
super(fm);
useNewSpeedDialTab =
ConfigProviderBindings.get(context).getBoolean("enable_new_favorites_tab", false);
+ CallLogFramework callLogFramework = CallLogComponent.get(context).callLogFramework();
+ useNewCallLogTab = callLogFramework.isNewCallLogEnabled(context);
+ useNewContactsTab =
+ ConfigProviderBindings.get(context).getBoolean("enable_new_contacts_tab", false);
this.tabTitles = tabTitles;
hasActiveVoicemailProvider = hasVoicemailProvider;
fragments.addAll(Collections.nCopies(TAB_COUNT_WITH_VOICEMAIL, null));
@@ -95,15 +106,29 @@ public class DialtactsPagerAdapter extends FragmentPagerAdapter {
return oldSpeedDialFragment;
}
case TAB_INDEX_HISTORY:
- if (callLogFragment == null) {
- callLogFragment = new CallLogFragment(CallLogQueryHandler.CALL_TYPE_ALL);
+ if (useNewCallLogTab) {
+ if (newCallLogFragment == null) {
+ newCallLogFragment = new NewCallLogFragment();
+ }
+ return newCallLogFragment;
+ } else {
+ if (callLogFragment == null) {
+ callLogFragment = new CallLogFragment(CallLogQueryHandler.CALL_TYPE_ALL);
+ }
+ return callLogFragment;
}
- return callLogFragment;
case TAB_INDEX_ALL_CONTACTS:
- if (contactsFragment == null) {
- contactsFragment = new AllContactsFragment();
+ if (useNewContactsTab) {
+ if (contactsFragment == null) {
+ contactsFragment = new ContactsFragment();
+ }
+ return contactsFragment;
+ } else {
+ if (oldContactsFragment == null) {
+ oldContactsFragment = new AllContactsFragment();
+ }
+ return oldContactsFragment;
}
- return contactsFragment;
case TAB_INDEX_VOICEMAIL:
if (voicemailFragment == null) {
voicemailFragment = new VisualVoicemailCallLogFragment();
@@ -131,8 +156,12 @@ public class DialtactsPagerAdapter extends FragmentPagerAdapter {
speedDialFragment = (SpeedDialFragment) fragment;
} else if (fragment instanceof CallLogFragment && position == TAB_INDEX_HISTORY) {
callLogFragment = (CallLogFragment) fragment;
+ } else if (fragment instanceof NewCallLogFragment) {
+ newCallLogFragment = (NewCallLogFragment) fragment;
+ } else if (fragment instanceof ContactsFragment) {
+ contactsFragment = (ContactsFragment) fragment;
} else if (fragment instanceof AllContactsFragment) {
- contactsFragment = (AllContactsFragment) fragment;
+ oldContactsFragment = (AllContactsFragment) fragment;
} else if (fragment instanceof CallLogFragment && position == TAB_INDEX_VOICEMAIL) {
voicemailFragment = (CallLogFragment) fragment;
LogUtil.v("ViewPagerAdapter.instantiateItem", voicemailFragment.toString());
diff --git a/java/com/android/dialer/app/list/ListsFragment.java b/java/com/android/dialer/app/list/ListsFragment.java
index bf29ef310..02498939c 100644
--- a/java/com/android/dialer/app/list/ListsFragment.java
+++ b/java/com/android/dialer/app/list/ListsFragment.java
@@ -44,9 +44,9 @@ import com.android.dialer.app.voicemail.error.VoicemailStatusCorruptionHandler;
import com.android.dialer.app.voicemail.error.VoicemailStatusCorruptionHandler.Source;
import com.android.dialer.common.LogUtil;
import com.android.dialer.database.CallLogQueryHandler;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
-import com.android.dialer.logging.nano.ScreenEvent;
+import com.android.dialer.logging.ScreenEvent;
import com.android.dialer.speeddial.SpeedDialFragment;
import com.android.dialer.voicemailstatus.VisualVoicemailEnabledChecker;
import com.android.dialer.voicemailstatus.VoicemailStatusHelper;
@@ -76,6 +76,7 @@ public class ListsFragment extends Fragment
private final ArrayList<OnPageChangeListener> mOnPageChangeListeners = new ArrayList<>();
/** The position of the currently selected tab. */
private int mTabIndex = TAB_INDEX_SPEED_DIAL;
+ private boolean mPaused;
private CallLogQueryHandler mCallLogQueryHandler;
@@ -104,6 +105,8 @@ public class ListsFragment extends Fragment
Trace.beginSection(TAG + " onResume");
super.onResume();
+ mPaused = false;
+
if (getUserVisibleHint()) {
sendScreenViewForCurrentPosition();
}
@@ -127,6 +130,8 @@ public class ListsFragment extends Fragment
((CallLogFragment) mCurrentPage).onNotVisible();
}
super.onPause();
+
+ mPaused = true;
}
@Override
@@ -263,7 +268,7 @@ public class ListsFragment extends Fragment
public void onVoicemailStatusFetched(Cursor statusCursor) {
mHasFetchedVoicemailStatus = true;
- if (getActivity() == null || getActivity().isFinishing()) {
+ if (getActivity() == null || mPaused) {
return;
}
@@ -394,7 +399,7 @@ public class ListsFragment extends Fragment
return;
}
- int screenType;
+ ScreenEvent.Type screenType;
switch (getCurrentTabIndex()) {
case TAB_INDEX_SPEED_DIAL:
screenType = ScreenEvent.Type.SPEED_DIAL;
diff --git a/java/com/android/dialer/app/list/OldSpeedDialFragment.java b/java/com/android/dialer/app/list/OldSpeedDialFragment.java
index 4aafd9625..4ae84b6d9 100644
--- a/java/com/android/dialer/app/list/OldSpeedDialFragment.java
+++ b/java/com/android/dialer/app/list/OldSpeedDialFragment.java
@@ -51,8 +51,8 @@ import com.android.contacts.common.list.ContactTileView;
import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
import com.android.dialer.app.R;
import com.android.dialer.app.widget.EmptyContentView;
-import com.android.dialer.callintent.nano.CallInitiationType;
-import com.android.dialer.callintent.nano.CallSpecificAppData;
+import com.android.dialer.callintent.CallInitiationType;
+import com.android.dialer.callintent.CallSpecificAppData;
import com.android.dialer.common.LogUtil;
import com.android.dialer.util.PermissionsUtil;
import com.android.dialer.util.ViewUtil;
@@ -462,8 +462,10 @@ public class OldSpeedDialFragment extends Fragment
@Override
public void onContactSelected(Uri contactUri, Rect targetRect) {
if (mPhoneNumberPickerActionListener != null) {
- CallSpecificAppData callSpecificAppData = new CallSpecificAppData();
- callSpecificAppData.callInitiationType = CallInitiationType.Type.SPEED_DIAL;
+ CallSpecificAppData callSpecificAppData =
+ CallSpecificAppData.newBuilder()
+ .setCallInitiationType(CallInitiationType.Type.SPEED_DIAL)
+ .build();
mPhoneNumberPickerActionListener.onPickDataUri(
contactUri, false /* isVideoCall */, callSpecificAppData);
}
@@ -472,8 +474,10 @@ public class OldSpeedDialFragment extends Fragment
@Override
public void onCallNumberDirectly(String phoneNumber) {
if (mPhoneNumberPickerActionListener != null) {
- CallSpecificAppData callSpecificAppData = new CallSpecificAppData();
- callSpecificAppData.callInitiationType = CallInitiationType.Type.SPEED_DIAL;
+ CallSpecificAppData callSpecificAppData =
+ CallSpecificAppData.newBuilder()
+ .setCallInitiationType(CallInitiationType.Type.SPEED_DIAL)
+ .build();
mPhoneNumberPickerActionListener.onPickPhoneNumber(
phoneNumber, false /* isVideoCall */, callSpecificAppData);
}
diff --git a/java/com/android/dialer/app/list/RegularSearchFragment.java b/java/com/android/dialer/app/list/RegularSearchFragment.java
index 26959539b..02896793b 100644
--- a/java/com/android/dialer/app/list/RegularSearchFragment.java
+++ b/java/com/android/dialer/app/list/RegularSearchFragment.java
@@ -27,7 +27,7 @@ import com.android.contacts.common.list.PinnedHeaderListView;
import com.android.dialer.app.R;
import com.android.dialer.app.widget.EmptyContentView;
import com.android.dialer.app.widget.EmptyContentView.OnEmptyViewActionButtonClickedListener;
-import com.android.dialer.callintent.nano.CallInitiationType;
+import com.android.dialer.callintent.CallInitiationType;
import com.android.dialer.phonenumbercache.CachedNumberLookupService;
import com.android.dialer.phonenumbercache.PhoneNumberCache;
import com.android.dialer.util.PermissionsUtil;
@@ -133,7 +133,7 @@ public class RegularSearchFragment extends SearchFragment
}
@Override
- protected int getCallInitiationType(boolean isRemoteDirectory) {
+ protected CallInitiationType.Type getCallInitiationType(boolean isRemoteDirectory) {
return isRemoteDirectory
? CallInitiationType.Type.REMOTE_DIRECTORY
: CallInitiationType.Type.REGULAR_SEARCH;
diff --git a/java/com/android/dialer/app/list/SearchFragment.java b/java/com/android/dialer/app/list/SearchFragment.java
index 4128300df..264bdf81b 100644
--- a/java/com/android/dialer/app/list/SearchFragment.java
+++ b/java/com/android/dialer/app/list/SearchFragment.java
@@ -42,7 +42,7 @@ import com.android.dialer.app.R;
import com.android.dialer.app.dialpad.DialpadFragment.ErrorDialogFragment;
import com.android.dialer.app.widget.DialpadSearchEmptyContentView;
import com.android.dialer.app.widget.EmptyContentView;
-import com.android.dialer.callintent.nano.CallSpecificAppData;
+import com.android.dialer.callintent.CallSpecificAppData;
import com.android.dialer.common.LogUtil;
import com.android.dialer.util.DialerUtils;
import com.android.dialer.util.IntentUtil;
@@ -238,12 +238,13 @@ public class SearchFragment extends PhoneNumberPickerFragment {
number = adapter.getQueryString();
listener = getOnPhoneNumberPickerListener();
if (listener != null && !checkForProhibitedPhoneNumber(number)) {
- CallSpecificAppData callSpecificAppData = new CallSpecificAppData();
- callSpecificAppData.callInitiationType =
- getCallInitiationType(false /* isRemoteDirectory */);
- callSpecificAppData.positionOfSelectedSearchResult = position;
- callSpecificAppData.charactersInSearchString =
- getQueryString() == null ? 0 : getQueryString().length();
+ CallSpecificAppData callSpecificAppData =
+ CallSpecificAppData.newBuilder()
+ .setCallInitiationType(getCallInitiationType(false /* isRemoteDirectory */))
+ .setPositionOfSelectedSearchResult(position)
+ .setCharactersInSearchString(
+ getQueryString() == null ? 0 : getQueryString().length())
+ .build();
listener.onPickPhoneNumber(number, false /* isVideoCall */, callSpecificAppData);
}
break;
@@ -274,12 +275,13 @@ public class SearchFragment extends PhoneNumberPickerFragment {
TextUtils.isEmpty(mAddToContactNumber) ? adapter.getQueryString() : mAddToContactNumber;
listener = getOnPhoneNumberPickerListener();
if (listener != null && !checkForProhibitedPhoneNumber(number)) {
- CallSpecificAppData callSpecificAppData = new CallSpecificAppData();
- callSpecificAppData.callInitiationType =
- getCallInitiationType(false /* isRemoteDirectory */);
- callSpecificAppData.positionOfSelectedSearchResult = position;
- callSpecificAppData.charactersInSearchString =
- getQueryString() == null ? 0 : getQueryString().length();
+ CallSpecificAppData callSpecificAppData =
+ CallSpecificAppData.newBuilder()
+ .setCallInitiationType(getCallInitiationType(false /* isRemoteDirectory */))
+ .setPositionOfSelectedSearchResult(position)
+ .setCharactersInSearchString(
+ getQueryString() == null ? 0 : getQueryString().length())
+ .build();
listener.onPickPhoneNumber(number, true /* isVideoCall */, callSpecificAppData);
}
break;
diff --git a/java/com/android/dialer/app/list/SmartDialSearchFragment.java b/java/com/android/dialer/app/list/SmartDialSearchFragment.java
index c783d3ac3..5d72ee615 100644
--- a/java/com/android/dialer/app/list/SmartDialSearchFragment.java
+++ b/java/com/android/dialer/app/list/SmartDialSearchFragment.java
@@ -26,7 +26,7 @@ import com.android.contacts.common.list.ContactEntryListAdapter;
import com.android.dialer.app.R;
import com.android.dialer.app.dialpad.SmartDialCursorLoader;
import com.android.dialer.app.widget.EmptyContentView;
-import com.android.dialer.callintent.nano.CallInitiationType;
+import com.android.dialer.callintent.CallInitiationType;
import com.android.dialer.util.PermissionsUtil;
/** Implements a fragment to load and display SmartDial search results. */
@@ -102,7 +102,7 @@ public class SmartDialSearchFragment extends SearchFragment
}
@Override
- protected int getCallInitiationType(boolean isRemoteDirectory) {
+ protected CallInitiationType.Type getCallInitiationType(boolean isRemoteDirectory) {
return CallInitiationType.Type.SMART_DIAL;
}
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/empty_call_log.png b/java/com/android/dialer/app/res/drawable-hdpi/empty_call_log.png
new file mode 100644
index 000000000..d6f6daaab
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/empty_call_log.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/empty_contacts.png b/java/com/android/dialer/app/res/drawable-hdpi/empty_contacts.png
new file mode 100644
index 000000000..d3c0378f5
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/empty_contacts.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/empty_speed_dial.png b/java/com/android/dialer/app/res/drawable-hdpi/empty_speed_dial.png
new file mode 100644
index 000000000..3e9232fc9
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/empty_speed_dial.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_archive_white_24dp.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_archive_white_24dp.png
new file mode 100644
index 000000000..bb72e890f
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_archive_white_24dp.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_content_copy_24dp.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_content_copy_24dp.png
new file mode 100644
index 000000000..70eb07378
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_content_copy_24dp.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_delete_24dp.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_delete_24dp.png
new file mode 100644
index 000000000..9fb43b066
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_delete_24dp.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_dialer_fork_add_call.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_dialer_fork_add_call.png
new file mode 100644
index 000000000..4e0d5649e
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_dialer_fork_add_call.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_dialer_fork_current_call.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_dialer_fork_current_call.png
new file mode 100644
index 000000000..2cf41d598
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_dialer_fork_current_call.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_dialer_fork_tt_keypad.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_dialer_fork_tt_keypad.png
new file mode 100644
index 000000000..043685fd9
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_dialer_fork_tt_keypad.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_grade_24dp.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_grade_24dp.png
new file mode 100644
index 000000000..86eecdd4a
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_grade_24dp.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_handle.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_handle.png
new file mode 100644
index 000000000..34310aa49
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_handle.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_menu_history_lt.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_menu_history_lt.png
new file mode 100644
index 000000000..a36323ca9
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_menu_history_lt.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_mic_grey600.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_mic_grey600.png
new file mode 100644
index 000000000..4b67cf71a
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_mic_grey600.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_more_vert_24dp.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_more_vert_24dp.png
new file mode 100644
index 000000000..67f07e473
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_more_vert_24dp.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_not_interested_googblue_24dp.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_not_interested_googblue_24dp.png
new file mode 100644
index 000000000..26a26f911
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_not_interested_googblue_24dp.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_not_spam.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_not_spam.png
new file mode 100644
index 000000000..bf413f912
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_not_spam.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_pause_24dp.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_pause_24dp.png
new file mode 100644
index 000000000..4d2ea05c4
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_pause_24dp.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_people_24dp.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_people_24dp.png
new file mode 100644
index 000000000..ff698afc0
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_people_24dp.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_phone_24dp.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_phone_24dp.png
new file mode 100644
index 000000000..b27dfba06
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_phone_24dp.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_play_arrow_24dp.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_play_arrow_24dp.png
new file mode 100644
index 000000000..57c9fa546
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_play_arrow_24dp.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_remove.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_remove.png
new file mode 100644
index 000000000..1ee6adf8d
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_remove.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_results_phone.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_results_phone.png
new file mode 100644
index 000000000..3a1a7a790
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_results_phone.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_schedule_24dp.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_schedule_24dp.png
new file mode 100644
index 000000000..f3581d104
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_schedule_24dp.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_share_white_24dp.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_share_white_24dp.png
new file mode 100644
index 000000000..b09a6926d
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_share_white_24dp.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_star.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_star.png
new file mode 100644
index 000000000..62e1f8a6d
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_star.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_unblock.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_unblock.png
new file mode 100644
index 000000000..03643b20d
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_unblock.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_vm_sound_off_dis.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_vm_sound_off_dis.png
new file mode 100644
index 000000000..47e32492c
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_vm_sound_off_dis.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_vm_sound_off_dk.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_vm_sound_off_dk.png
new file mode 100644
index 000000000..2bfe0c0cf
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_vm_sound_off_dk.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_vm_sound_on_dis.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_vm_sound_on_dis.png
new file mode 100644
index 000000000..90b5238f3
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_vm_sound_on_dis.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_vm_sound_on_dk.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_vm_sound_on_dk.png
new file mode 100644
index 000000000..7556637fc
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_vm_sound_on_dk.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_voicemail_24dp.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_voicemail_24dp.png
new file mode 100644
index 000000000..03a62e15f
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_voicemail_24dp.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_volume_down_24dp.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_volume_down_24dp.png
new file mode 100644
index 000000000..e22e92c85
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_volume_down_24dp.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_volume_up_24dp.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_volume_up_24dp.png
new file mode 100644
index 000000000..57d787163
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/ic_volume_up_24dp.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/search_shadow.9.png b/java/com/android/dialer/app/res/drawable-hdpi/search_shadow.9.png
new file mode 100644
index 000000000..3dc1c17f6
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/search_shadow.9.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/shadow_contact_photo.png b/java/com/android/dialer/app/res/drawable-hdpi/shadow_contact_photo.png
new file mode 100644
index 000000000..44b06f261
--- /dev/null
+++ b/java/com/android/dialer/app/res/drawable-hdpi/shadow_contact_photo.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/layout/all_contacts_fragment.xml b/java/com/android/dialer/app/res/layout/all_contacts_fragment.xml
index f59847825..17a45208d 100644
--- a/java/com/android/dialer/app/res/layout/all_contacts_fragment.xml
+++ b/java/com/android/dialer/app/res/layout/all_contacts_fragment.xml
@@ -41,7 +41,9 @@
android:paddingTop="18dp"
android:fadingEdge="none"
android:fastScrollEnabled="true"
- android:nestedScrollingEnabled="true"/>
+ android:nestedScrollingEnabled="true"
+ android:cropToPadding="false"
+ android:clipToPadding="false"/>
<com.android.dialer.app.widget.EmptyContentView
android:id="@+id/empty_list_view"
diff --git a/java/com/android/dialer/app/res/menu/actionbar_delete.xml b/java/com/android/dialer/app/res/menu/actionbar_delete.xml
index 10e534941..b8aa3813b 100644
--- a/java/com/android/dialer/app/res/menu/actionbar_delete.xml
+++ b/java/com/android/dialer/app/res/menu/actionbar_delete.xml
@@ -18,7 +18,7 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
- android:id="@+id/call_detail_delete_menu_item"
+ android:id="@+id/action_bar_delete_menu_item"
android:icon="@drawable/quantum_ic_delete_white_24"
android:title="@string/delete"
app:showAsAction="always"/>
diff --git a/java/com/android/dialer/app/res/mipmap-hdpi/ic_launcher_phone.png b/java/com/android/dialer/app/res/mipmap-hdpi/ic_launcher_phone.png
new file mode 100644
index 000000000..15c41423b
--- /dev/null
+++ b/java/com/android/dialer/app/res/mipmap-hdpi/ic_launcher_phone.png
Binary files differ
diff --git a/java/com/android/dialer/app/res/values-af/strings.xml b/java/com/android/dialer/app/res/values-af/strings.xml
index 6188a5983..0245a2d1d 100644
--- a/java/com/android/dialer/app/res/values-af/strings.xml
+++ b/java/com/android/dialer/app/res/values-af/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Bel terug"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Boodskap"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Bel <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Stemboodskapnommer onbekend"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> Stemboodskappe </item>
<item quantity="one">Stemboodskap</item>
@@ -97,6 +99,11 @@
<string name="voicemail" msgid="8899540969000957954">"Stemboodskap"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> sek."</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"stemboodskap"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"stemboodskappe"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Ja"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Nee"</string>
+ <string name="voicemailMultiSelectDialogTitle" msgid="150612124416146690">"Vee geselekteerde <xliff:g id="VOICEMAILORVOICEMAILS">%1$s</xliff:g> uit?"</string>
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> om <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-am/strings.xml b/java/com/android/dialer/app/res/values-am/strings.xml
index 228fe94c6..befa4c45c 100644
--- a/java/com/android/dialer/app/res/values-am/strings.xml
+++ b/java/com/android/dialer/app/res/values-am/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"መልሰህ ደውል"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"መልእክት"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>:<xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> ይደውሉ"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"የማይታወቅ የድምፅ መልዕክት ቁጥር"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one"> <xliff:g id="COUNT">%1$d</xliff:g> የድምፅ መልዕክቶች </item>
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> የድምፅ መልዕክቶች </item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"የድምፅ መልዕክት"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> ሰከንድ"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> ደቂቃ <xliff:g id="SECONDS">%s</xliff:g> ሴከ"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"የድምፅ መልዕክት"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"የድምፅ መልዕክቶች"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"አዎ"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"አይ"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="TIME">%2$s</xliff:g> ላይ"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-ar/strings.xml b/java/com/android/dialer/app/res/values-ar/strings.xml
index 2d9c7e8e0..961e4833e 100644
--- a/java/com/android/dialer/app/res/values-ar/strings.xml
+++ b/java/com/android/dialer/app/res/values-ar/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"معاودة الاتصال"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"رسالة"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"طلب <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"رقم البريد الصوتي غير معروف"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="zero">لا تتوفر رسائل بريد صوتي (<xliff:g id="COUNT">%1$d</xliff:g>) </item>
<item quantity="two">رسالتا بريد صوتي (<xliff:g id="COUNT">%1$d</xliff:g>) </item>
@@ -101,6 +103,11 @@
<string name="voicemail" msgid="8899540969000957954">"البريد الصوتي"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> ثانية"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> دقيقة <xliff:g id="SECONDS">%s</xliff:g> ثانية"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"البريد الصوتي"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"رسائل البريد الصوتي"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"نعم"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"لا"</string>
+ <string name="voicemailMultiSelectDialogTitle" msgid="150612124416146690">"حذف رسائل <xliff:g id="VOICEMAILORVOICEMAILS">%1$s</xliff:g> المحددة؟"</string>
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> في <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-az/strings.xml b/java/com/android/dialer/app/res/values-az/strings.xml
index e2e9bea50..78440fd24 100644
--- a/java/com/android/dialer/app/res/values-az/strings.xml
+++ b/java/com/android/dialer/app/res/values-az/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Geriyə zəng"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Mesaj"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> nömrəsini yığın"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Səsli e-poçt nömrəsi naməlumdur"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> Səsli poçt </item>
<item quantity="one">Səsli poçt</item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"Səsli poçt"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> san"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> dəq <xliff:g id="SECONDS">%s</xliff:g> san"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"səsli e-məktub"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"səsli e-məktublar"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Bəli"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Xeyr"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> tarixində <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/app/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..ddb311266
--- /dev/null
+++ b/java/com/android/dialer/app/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,234 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2012 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="2202739481132958990">"Telefon"</string>
+ <string name="launcherDialpadActivityLabel" msgid="4170587663888307424">"Telefonska tastatura"</string>
+ <string name="dialerIconLabel" msgid="3422916015542176907">"Telefon"</string>
+ <string name="callHistoryIconLabel" msgid="7493268743411968630">"Istorija poziva"</string>
+ <string name="action_report_number" msgid="7231442711369737797">"Prijavi netačan broj"</string>
+ <string name="action_copy_number_text" msgid="832682558551502319">"Kopiraj broj"</string>
+ <string name="copy_transcript_text" msgid="937904189017310829">"Kopiraj transkripciju"</string>
+ <string name="action_block_number" msgid="3669819840999705278">"Blokiraj broj"</string>
+ <string name="action_unblock_number" msgid="6583611581996402004">"Deblokiraj broj"</string>
+ <string name="action_edit_number_before_call" msgid="8017492815878473837">"Izmeni broj pre poziva"</string>
+ <string name="call_log_delete_all" msgid="7852970926906523784">"Obriši istoriju poziva"</string>
+ <string name="call_log_trash_voicemail" msgid="6118493534178533972">"Izbriši govornu poruku"</string>
+ <string name="snackbar_voicemail_deleted" msgid="7463166543725496307">"Gov. pošta je izbrisana"</string>
+ <string name="snackbar_voicemail_deleted_undo" msgid="6959743982796409941">"OPOZOVI"</string>
+ <string name="clearCallLogConfirmation_title" msgid="7051888019546472245">"Želite da obrišete istoriju poziva?"</string>
+ <string name="clearCallLogConfirmation" msgid="6844949465815109166">"Ovo će izbrisati sve pozive iz istorije"</string>
+ <string name="clearCallLogProgress_title" msgid="995004835687361977">"Briše se istorija poziva…"</string>
+ <string name="userCallActivityLabel" product="default" msgid="9198964841862577505">"Telefon"</string>
+ <string name="notification_missedCallTitle" msgid="8283366068539898486">"Propušten poziv"</string>
+ <string name="notification_missedWorkCallTitle" msgid="8831332957103679183">"Propušten poziv za Work"</string>
+ <string name="notification_missedCallsTitle" msgid="3697442015345089802">"Propušteni pozivi"</string>
+ <string name="notification_missedCallsMsg" msgid="8176217633929018706">"Broj propuštenih poziva: <xliff:g id="NUM_MISSED_CALLS">%d</xliff:g>"</string>
+ <string name="notification_missedCall_call_back" msgid="3875698110051973965">"Uzvrati poziv"</string>
+ <string name="notification_missedCall_message" msgid="5086910028988305964">"Pošalji SMS"</string>
+ <string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Pozovi <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Nepoznat broj govorne pošte"</string>
+ <plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
+ <item quantity="one"> <xliff:g id="COUNT">%1$d</xliff:g> govorna poruka </item>
+ <item quantity="few"> <xliff:g id="COUNT">%1$d</xliff:g> govorne poruke </item>
+ <item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> govornih poruka </item>
+ </plurals>
+ <string name="notification_action_voicemail_play" msgid="5156500902796354071">"Pusti"</string>
+ <string name="notification_voicemail_callers_list" msgid="7543659703018479564">"<xliff:g id="NEWER_CALLERS">%1$s</xliff:g>, <xliff:g id="OLDER_CALLER">%2$s</xliff:g>"</string>
+ <string name="notification_new_voicemail_ticker" msgid="6547711461667072303">"Nova govorna poruka od <xliff:g id="CALLER">%1$s</xliff:g>"</string>
+ <string name="voicemail_playback_error" msgid="4384373852257757295">"Puštanje govorne pošte nije uspelo"</string>
+ <string name="voicemail_fetching_content" msgid="572320120918636014">"Govorna pošta se učitava…"</string>
+ <string name="voicemail_archiving_content" msgid="2415183864104922185">"Govorna pošta se arhivira…"</string>
+ <string name="voicemail_fetching_timout" msgid="2128873915839949783">"Učitavanje govorne pošte nije uspelo"</string>
+ <string name="call_log_voicemail_header" msgid="5799424860394542726">"Samo pozivi sa govornom poštom"</string>
+ <string name="call_log_incoming_header" msgid="1158753168119845168">"Samo dolazni pozivi"</string>
+ <string name="call_log_outgoing_header" msgid="149333910997122683">"Samo odlazni pozivi"</string>
+ <string name="call_log_missed_header" msgid="6491707499211289630">"Samo propušteni pozivi"</string>
+ <string name="call_log_item_count_and_date" msgid="723848797957319181">"(<xliff:g id="COUNT">%1$d</xliff:g>) <xliff:g id="DATE">%2$s</xliff:g>"</string>
+ <string name="description_search_button" msgid="4515570469584782176">"pretraži"</string>
+ <string name="description_dial_button" msgid="699794433224646027">"biranje"</string>
+ <string name="description_digits_edittext" msgid="8908702618098485186">"broj za biranje"</string>
+ <string name="description_playback_start_stop" msgid="5320452461700750120">"Pokretanje ili zaustavljanje reprodukcije"</string>
+ <string name="description_playback_speakerphone" msgid="4852027754869750227">"Uključivanje ili isključivanje spikerfona"</string>
+ <string name="description_playback_seek" msgid="1340910573254132520">"Traženje pozicije u reprodukciji"</string>
+ <string name="description_rate_decrease" msgid="5053221110217704199">"Smanjivanje brzine reprodukcije"</string>
+ <string name="description_rate_increase" msgid="4372206363557406700">"Povećavanje brzine reprodukcije"</string>
+ <string name="action_menu_call_history_description" msgid="8829135306925008546">"Istorija poziva"</string>
+ <string name="action_menu_overflow_description" msgid="7648679686746517341">"Još opcija"</string>
+ <string name="action_menu_dialpad_button" msgid="1970631633457493180">"tastatura"</string>
+ <string name="menu_show_outgoing_only" msgid="6941420328999801171">"Prikaži samo odlazne"</string>
+ <string name="menu_show_incoming_only" msgid="6018600870504685564">"Prikaži samo dolazne"</string>
+ <string name="menu_show_missed_only" msgid="2266983597575047192">"Prikaži samo propuštene"</string>
+ <string name="menu_show_voicemails_only" msgid="1114917855179284592">"Prikaži samo govorne poruke"</string>
+ <string name="menu_show_all_calls" msgid="220054502052344488">"Prikaži sve pozive"</string>
+ <string name="add_2sec_pause" msgid="3417815038173424525">"Dodaj pauzu od 2 sekunde"</string>
+ <string name="add_wait" msgid="1177723010768282578">"Dodaj čekanje"</string>
+ <string name="dialer_settings_label" msgid="4980176284150290175">"Podešavanja"</string>
+ <string name="simulator_submenu_label" msgid="186156287346615267">"Simulator"</string>
+ <string name="menu_allContacts" msgid="8544950176866640863">"Svi kontakti"</string>
+ <string name="dialer_useDtmfDialpad" msgid="3919115408138798484">"Upotrebite brojčanik za tonsko biranje"</string>
+ <string name="dialer_returnToInCallScreen" msgid="3487191628252824117">"Vrati se na poziv koji je u toku"</string>
+ <string name="dialer_addAnotherCall" msgid="3132945651710234674">"Dodaj poziv"</string>
+ <string name="actionIncomingCall" msgid="891346596090030558">"Dolazni pozivi"</string>
+ <string name="description_call_log_play_button" msgid="2349845005022431438">"Puštanje govorne pošte"</string>
+ <string name="description_view_contact" msgid="3940984937384372665">"Prikaži kontakt <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_call" msgid="1532402285334775372">"Pozovi <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="3341280873855253464">"Detalji o kontaktu za <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_spam_contact_details" msgid="5592578752881528368">"Kontakt informacije potencijalnog nepoželjnog pozivaoca <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_num_calls" msgid="6483594535796216044">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> poziva."</string>
+ <string name="description_video_call" msgid="3738199365585751727">"Video poziv."</string>
+ <string name="description_send_text_message" msgid="8450269896765568596">"Slanje SMS-a za <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_call_log_unheard_voicemail" msgid="2258821530650350303">"Nepreslušana govorna pošta"</string>
+ <string name="description_start_voice_search" msgid="8380022725973015261">"Pokretanje glasovne pretrage"</string>
+ <string name="menu_callNumber" msgid="1540773545517152514">"Pozovi <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="voicemail" msgid="8899540969000957954">"Govorna pošta"</string>
+ <string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> sek"</string>
+ <string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sek"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"govornu poruku"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"govorne poruke"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Da"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Ne"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
+ <string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
+ <string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> u <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
+ <string name="voicemailCallLogDateTimeFormatWithDuration" msgid="7224408726047155205">"<xliff:g id="DATEANDTIME">%1$s</xliff:g> • <xliff:g id="DURATION">%2$s</xliff:g>"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6317935773274628316">"Nije moguće pozvati ovaj broj"</string>
+ <string name="dialog_voicemail_not_ready_message" msgid="6437173108290752604">"Da biste podesili govornu poštu, idite u Meni &gt; Podešavanja."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="1044988101597862159">"Da biste pozvali govornu poštu, prvo isključite režim rada u avionu."</string>
+ <string name="contact_list_loading" msgid="7919825236309749352">"Učitava se…"</string>
+ <string name="imei" msgid="5214505934662768308">"IMEI"</string>
+ <string name="meid" msgid="3333779521535224028">"MEID"</string>
+ <string name="simContacts_emptyLoading" msgid="6205424276735652071">"Učitava se sa SIM kartice…"</string>
+ <string name="simContacts_title" msgid="7961069730386378887">"Kontakti na SIM kartici"</string>
+ <string name="add_contact_not_available" msgid="7065884447935173347">"Nema dostupne aplikacije za kontakte"</string>
+ <string name="voice_search_not_available" msgid="6546240433719732905">"Glasovna pretraga nije dostupna"</string>
+ <string name="call_not_available" msgid="7850148370757361155">"Nije moguće uputiti telefonski poziv jer je aplikacija Telefon onemogućena."</string>
+ <string name="dialer_hint_find_contact" msgid="2023214799381149808">"Pretraži kontakte"</string>
+ <string name="block_number_search_hint" msgid="5377706079015099416">"Dodajte broj ili pretražite kontakte"</string>
+ <string name="call_log_all_empty" msgid="3955572868518162004">"Istorija poziva je prazna"</string>
+ <string name="call_log_all_empty_action" msgid="852218280136243014">"Pozovi"</string>
+ <string name="call_log_missed_empty" msgid="7094936030845062214">"Nemate nijedan propušten poziv."</string>
+ <string name="call_log_voicemail_empty" msgid="273623903423275178">"Prijemno sanduče govorne pošte je prazno."</string>
+ <string name="show_favorites_only" msgid="8089163582448737837">"Prikaži samo omiljene"</string>
+ <string name="call_log_activity_title" msgid="1275242727244945527">"Istorija poziva"</string>
+ <string name="call_log_all_title" msgid="6042262422192020327">"Svi"</string>
+ <string name="call_log_missed_title" msgid="17254005889268015">"Propušteni"</string>
+ <string name="call_log_voicemail_title" msgid="6504826963256437971">"Govorna pošta"</string>
+ <string name="tab_speed_dial" msgid="6616404752227561075">"Brzo biranje"</string>
+ <string name="tab_history" msgid="7420269368689503596">"Istorija poziva"</string>
+ <string name="tab_all_contacts" msgid="5531733977693943015">"Kontakti"</string>
+ <string name="tab_voicemail" msgid="2458548090088316246">"Govorna pošta"</string>
+ <string name="favorite_hidden" msgid="1077010324849831399">"Uklonjeno je iz omiljenih"</string>
+ <string name="favorite_hidden_undo" msgid="5660280521854875320">"Opozovi"</string>
+ <string name="search_shortcut_call_number" msgid="8847918845036880688">"Pozovi <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_create_new_contact" msgid="2076374262874775425">"Napravi novi kontakt"</string>
+ <string name="search_shortcut_add_to_contact" msgid="701957016267810766">"Dodaj u kontakt"</string>
+ <string name="search_shortcut_send_sms_message" msgid="1065069206532610854">"Pošalji SMS"</string>
+ <string name="search_shortcut_make_video_call" msgid="3746207985295802095">"Uputi video poziv"</string>
+ <string name="search_shortcut_block_number" msgid="4587283230665805776">"Blokiraj broj"</string>
+ <string name="num_missed_calls" msgid="5171791753696317082">"Novih propuštenih poziva: <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="speed_dial_empty" msgid="3346406399966039505">"Nemate nijedan kontakt na brzom biranju"</string>
+ <string name="speed_dial_empty_add_favorite_action" msgid="3470360584638103033">"Dodaj omiljen kontakt"</string>
+ <string name="all_contacts_empty" msgid="243071567853617177">"Još uvek nemate nijedan kontakt"</string>
+ <string name="all_contacts_empty_add_contact_action" msgid="2907328217206743952">"Dodaj kontakt"</string>
+ <string name="contact_tooltip" msgid="8871614660967439999">"Dodirnite sliku da biste videli sve brojeve ili dodirnite i zadržite da biste im promenili raspored"</string>
+ <string name="remove_contact" msgid="2353580570488923668">"Ukloni"</string>
+ <string name="call_log_action_video_call" msgid="7565549950343850819">"Video poziv"</string>
+ <string name="call_log_action_send_message" msgid="6948727362660115554">"Pošalji poruku"</string>
+ <string name="call_log_action_details" msgid="2091370737371449501">"Detalji poziva"</string>
+ <string name="call_log_action_share_voicemail" msgid="8888250682433873454">"Pošalji u…"</string>
+ <string name="call_log_action_call" msgid="682724094251540583">"Pozovi <xliff:g id="NAMEORNUMBER">^1</xliff:g>"</string>
+ <string name="description_incoming_missed_call" msgid="8292535799379230029">"Propušteni poziv: <xliff:g id="NAMEORNUMBER">^1</xliff:g>, <xliff:g id="TYPEORLOCATION">^2</xliff:g>, <xliff:g id="TIMEOFCALL">^3</xliff:g>, <xliff:g id="PHONEACCOUNT">^4</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="3920182963103160610">"Primljeni poziv: <xliff:g id="NAMEORNUMBER">^1</xliff:g>, <xliff:g id="TYPEORLOCATION">^2</xliff:g>, <xliff:g id="TIMEOFCALL">^3</xliff:g>, <xliff:g id="PHONEACCOUNT">^4</xliff:g>."</string>
+ <string name="description_unread_voicemail" msgid="145170985013419170">"Nepročitana govorna poruka od <xliff:g id="NAMEORNUMBER">^1</xliff:g>, <xliff:g id="TYPEORLOCATION">^2</xliff:g>, <xliff:g id="TIMEOFCALL">^3</xliff:g>, <xliff:g id="PHONEACCOUNT">^4</xliff:g>."</string>
+ <string name="description_read_voicemail" msgid="5585559881573227732">"Govorna poruka od <xliff:g id="NAMEORNUMBER">^1</xliff:g>, <xliff:g id="TYPEORLOCATION">^2</xliff:g>, <xliff:g id="TIMEOFCALL">^3</xliff:g>, <xliff:g id="PHONEACCOUNT">^4</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="543952487882919924">"Pozvali ste: <xliff:g id="NAMEORNUMBER">^1</xliff:g>, <xliff:g id="TYPEORLOCATION">^2</xliff:g>, <xliff:g id="TIMEOFCALL">^3</xliff:g>, <xliff:g id="PHONEACCOUNT">^4</xliff:g>."</string>
+ <string name="call_log_via_number" msgid="1340307109806397650">"preko <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
+ <string name="call_log_via_number_phone_account" msgid="7698459003033083416">"<xliff:g id="PHONEACCOUNT">%1$s</xliff:g> preko <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="description_call_action" msgid="4042796498169106545">"Pozovi <xliff:g id="NAMEORNUMBER">^1</xliff:g>"</string>
+ <string name="description_video_call_action" msgid="1237090968588659650">"Uputite video poziv kontaktu <xliff:g id="NAMEORNUMBER">^1</xliff:g>."</string>
+ <string name="description_voicemail_action" msgid="3290143432403538524">"Pusti govornu poštu od <xliff:g id="NAMEORNUMBER">^1</xliff:g>"</string>
+ <string name="description_voicemail_play" msgid="737337291418966183">"Reprodukuj govornu poštu kontakta <xliff:g id="NAMEORNUMBER">^1</xliff:g>"</string>
+ <string name="description_voicemail_pause" msgid="2400610579956333661">"Pauziraj govornu poštu kontakta <xliff:g id="NAMEORNUMBER">^1</xliff:g>"</string>
+ <string name="description_voicemail_delete" msgid="5305509366448404410">"Izbriši govornu poštu kontakta <xliff:g id="NAMEORNUMBER">^1</xliff:g>"</string>
+ <plurals name="description_voicemail_unread" formatted="false" msgid="7562208210097630839">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> nova poruka govorne pošte</item>
+ <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> nove poruke govorne pošte</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> novih poruka govorne pošte</item>
+ </plurals>
+ <string name="description_create_new_contact_action" msgid="1928282350281564130">"Napravite kontakt za <xliff:g id="NAMEORNUMBER">^1</xliff:g>"</string>
+ <string name="description_add_to_existing_contact_action" msgid="5485618682525057684">"Dodajte <xliff:g id="NAMEORNUMBER">^1</xliff:g> postojećem kontaktu"</string>
+ <string name="description_details_action" msgid="2061866409737706174">"Detalji poziva za <xliff:g id="NAMEORNUMBER">^1</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="6821678859297454838">"Izbrisano iz istorije poziva"</string>
+ <string name="call_log_header_today" msgid="1576119097475845293">"Danas"</string>
+ <string name="call_log_header_yesterday" msgid="5616077776205329563">"Juče"</string>
+ <string name="call_log_header_other" msgid="4940676886254217644">"Stariji"</string>
+ <string name="call_detail_list_header" msgid="1174040565810083473">"Lista poziva"</string>
+ <string name="voicemail_speaker_on" msgid="3151333608926996668">"Uključite zvučnik."</string>
+ <string name="voicemail_speaker_off" msgid="2530064206962034201">"Isključite zvučnik."</string>
+ <string name="voicemail_play_faster" msgid="2742012169751409677">"Brža reprodukcija."</string>
+ <string name="voicemail_play_slower" msgid="868588128301087884">"Sporija reprodukcija."</string>
+ <string name="voicemail_play_start_pause" msgid="3874823480278334664">"Započnite ili pauzirajte reprodukciju."</string>
+ <string name="display_options_title" msgid="3880091801055797975">"Opcije prikaza"</string>
+ <string name="sounds_and_vibration_title" msgid="3075050000721181384">"Zvuci i vibracija"</string>
+ <string name="accessibility_settings_title" msgid="3329027650429831820">"Pristupačnost"</string>
+ <string name="ringtone_title" msgid="8377174189894648486">"Zvuk zvona telefona"</string>
+ <string name="vibrate_on_ring_title" msgid="631441314790960485">"Vibriraj i za pozive"</string>
+ <string name="dtmf_tone_enable_title" msgid="3273762431523939277">"Tonovi tastature"</string>
+ <string name="dtmf_tone_length_title" msgid="534096029202438539">"Dužina trajanja tona tastature"</string>
+ <string-array name="dtmf_tone_length_entries">
+ <item msgid="3136353015227162823">"Normalno"</item>
+ <item msgid="5376841175538523822">"Dugačak"</item>
+ </string-array>
+ <string name="respond_via_sms_setting_title" msgid="8008181606657693452">"Brzi odgovori"</string>
+ <string name="call_settings_label" msgid="7824611757200960807">"Pozivi"</string>
+ <string name="manage_blocked_numbers_label" msgid="16823761991832273">"Blokiranje poziva"</string>
+ <string name="voicemail_settings_label" msgid="4594299554519920570">"Govorna pošta"</string>
+ <string name="blocked_numbers_disabled_emergency_header_label" msgid="6936696532562923971">"Blokiranje poziva je privremeno isključeno"</string>
+ <string name="blocked_numbers_disabled_emergency_desc" msgid="5484785225285297040">"Blokiranje poziva je onemogućeno zato što ste kontaktirali službe za pomoć u hitnim slučajevima sa ovog telefona u poslednjih 48 sati. Automatski će biti ponovo omogućeno kada istekne period od 48 sati."</string>
+ <string name="import_send_to_voicemail_numbers_label" msgid="7821890095264297681">"Uvezi brojeve"</string>
+ <string name="blocked_call_settings_import_description" msgid="1819412052545228965">"Ranije ste označili neke pozivaoce koje automatski treba preusmeriti na govornu poštu preko drugih aplikacija."</string>
+ <string name="blocked_call_settings_view_numbers_button" msgid="3332727948554356704">"Prikaži brojeve"</string>
+ <string name="blocked_call_settings_import_button" msgid="7319111700387470727">"Uvezi"</string>
+ <string name="description_blocked_number_list_delete" msgid="2139644216858370740">"Deblokiraj broj"</string>
+ <string name="addBlockedNumber" msgid="3053473735238295551">"Dodaj broj"</string>
+ <string name="block_number_footer_message_vvm" msgid="7955326304033982368">"Pozivi sa ovih brojeva će biti blokirani i poruke govorne pošte će se automatski brisati."</string>
+ <string name="block_number_footer_message_no_vvm" msgid="1152684139070471665">"Pozivi sa ovih brojeva će biti blokirani, ali pozivaoci sa ovih brojeva će i dalje moći da vam ostavljaju poruke govorne pošte."</string>
+ <string name="block_list" msgid="4701585783411870782">"Blokirani brojevi"</string>
+ <string name="alreadyBlocked" msgid="5483253180532475653">"<xliff:g id="NUMBER">%1$s</xliff:g> je već blokiran."</string>
+ <string name="phone_account_settings_label" msgid="8372485478006965920">"Nalozi za pozivanje"</string>
+ <string name="permission_single_turn_on" msgid="8014796118294187894">"Uključi"</string>
+ <string name="permission_multiple_turn_on" msgid="5679888820253829400">"Podesi dozvole"</string>
+ <string name="permission_no_speeddial" msgid="8487215628510596753">"Da biste omogućili brzo biranje, uključite dozvolu za Kontakte."</string>
+ <string name="permission_no_calllog" msgid="4053705651238775784">"Da biste videli evidenciju poziva, uključite dozvolu za Telefon."</string>
+ <string name="permission_no_contacts" msgid="8995025765862026771">"Da biste videli kontakte, uključite dozvolu za Kontakte."</string>
+ <string name="permission_no_voicemail" msgid="1908142679289209291">"Da biste pristupili govornoj pošti, uključite dozvolu za Telefon."</string>
+ <string name="permission_no_search" msgid="2424710404207193826">"Da biste pretražili kontakte, uključite dozvole za Kontakte."</string>
+ <string name="permission_place_call" msgid="8686908130349369423">"Da biste uputili poziv, uključite dozvolu za Telefon."</string>
+ <string name="toast_cannot_write_system_settings" msgid="1108307781918782515">"Aplikacija Telefon nema dozvolu za upisivanje u sistemska podešavanja."</string>
+ <string name="blocked_number_call_log_label" msgid="4212282846299997693">"Blokirano"</string>
+ <string name="call_log_action_block_report_number" msgid="7302636538668696729">"Blokiraj/prijavi kao nepoželjan"</string>
+ <string name="call_log_action_block_number" msgid="5048188386501998865">"Blokiraj broj"</string>
+ <string name="call_log_action_remove_spam" msgid="2045319806318398403">"Nije nepoželjan"</string>
+ <string name="call_log_action_unblock_number" msgid="6100117033288448758">"Deblokiraj broj"</string>
+ <string name="spam_number_call_log_label" msgid="2678431398326811131">"Nepoželjan"</string>
+ <string name="call_composer_connection_failed" msgid="6776461585447831242">"<xliff:g id="NAME">%1$s</xliff:g> je oflajn i ne možete da ga/je kontaktirate"</string>
+</resources>
diff --git a/java/com/android/dialer/app/res/values-be/strings.xml b/java/com/android/dialer/app/res/values-be/strings.xml
index 337a62617..54d7d8384 100644
--- a/java/com/android/dialer/app/res/values-be/strings.xml
+++ b/java/com/android/dialer/app/res/values-be/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Адказаць"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Паведамленне"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Набраць <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Невядомы нумар галасавой пошты"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one"> <xliff:g id="COUNT">%1$d</xliff:g> Паведамленне галасавой пошты </item>
<item quantity="few"> <xliff:g id="COUNT">%1$d</xliff:g> Паведамленні галасавой пошты </item>
@@ -99,6 +101,12 @@
<string name="voicemail" msgid="8899540969000957954">"Галасавая пошта"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> с"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> хв <xliff:g id="SECONDS">%s</xliff:g> с"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"галасавая пошта"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"галасавая пошта"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Так"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Не"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> у <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-bg/strings.xml b/java/com/android/dialer/app/res/values-bg/strings.xml
index 510b4a2d0..0fb06c165 100644
--- a/java/com/android/dialer/app/res/values-bg/strings.xml
+++ b/java/com/android/dialer/app/res/values-bg/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Обратно обаждане"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Съобщение"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Набиране на <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Неизвестен номер за гласова поща"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> гласови съобщения </item>
<item quantity="one">Гласово съобщение</item>
@@ -97,6 +99,11 @@
<string name="voicemail" msgid="8899540969000957954">"Гласова поща"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> сек"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> мин <xliff:g id="SECONDS">%s</xliff:g> сек"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"гласово съобщение"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"гласови съобщения"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Да"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Не"</string>
+ <string name="voicemailMultiSelectDialogTitle" msgid="150612124416146690">"Избрахте <xliff:g id="VOICEMAILORVOICEMAILS">%1$s</xliff:g> – да се изтрие ли избраното?"</string>
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> в <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-bn/strings.xml b/java/com/android/dialer/app/res/values-bn/strings.xml
index ece833ce7..45787cc0f 100644
--- a/java/com/android/dialer/app/res/values-bn/strings.xml
+++ b/java/com/android/dialer/app/res/values-bn/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"কল ব্যাক করুন"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"বার্তা"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> এ ডায়াল করুন"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"ভয়েসমেল নম্বর অজানা"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one"> <xliff:g id="COUNT">%1$d</xliff:g>টি ভয়েসমেল </item>
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g>টি ভয়েসমেল </item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"ভয়েসমেল"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> সেকেন্ড"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> মিনিট <xliff:g id="SECONDS">%s</xliff:g> সেকেন্ড"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"ভয়েসমেল"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"ভয়েসমেলগুলি"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"হ্যাঁ"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"না"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> তারিখে <xliff:g id="TIME">%2$s</xliff:g>\'টায়"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-bs/strings.xml b/java/com/android/dialer/app/res/values-bs/strings.xml
index 98506dc45..8c19cb719 100644
--- a/java/com/android/dialer/app/res/values-bs/strings.xml
+++ b/java/com/android/dialer/app/res/values-bs/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Povr. poziv"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Poruka"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Pozovi <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Nepoznat broj govorne pošte"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one"> <xliff:g id="COUNT">%1$d</xliff:g> Poruka govorne pošte </item>
<item quantity="few"> <xliff:g id="COUNT">%1$d</xliff:g> Poruke govorne pošte </item>
@@ -98,6 +100,12 @@
<string name="voicemail" msgid="8899540969000957954">"Govorna pošta"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> sek."</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"poruka govorne pošte"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"poruke govorne pošte"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Da"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Ne"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> u <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-ca/strings.xml b/java/com/android/dialer/app/res/values-ca/strings.xml
index 781c6064e..a333e5389 100644
--- a/java/com/android/dialer/app/res/values-ca/strings.xml
+++ b/java/com/android/dialer/app/res/values-ca/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Torna la trucada"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Missatge"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Marca el número <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Número de la bústia de veu desconegut"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> bústies de veu </item>
<item quantity="one">Bústia de veu</item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"Bústia de veu"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"missatge de veu"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"missatges de veu"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Sí"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"No"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> a les <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-cs/strings.xml b/java/com/android/dialer/app/res/values-cs/strings.xml
index 4f35d9cff..cc71441da 100644
--- a/java/com/android/dialer/app/res/values-cs/strings.xml
+++ b/java/com/android/dialer/app/res/values-cs/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Zavolat zpět"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Zpráva"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Volat hlasovou schránku <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Číslo hlasové schránky není známé"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="few"> <xliff:g id="COUNT">%1$d</xliff:g> hlasové zprávy </item>
<item quantity="many"> <xliff:g id="COUNT">%1$d</xliff:g> hlasové zprávy </item>
@@ -99,6 +101,12 @@
<string name="voicemail" msgid="8899540969000957954">"Hlasová schránka"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"vybranou hlasovou zprávu"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"vybrané hlasové zprávy"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Ano"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Ne"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> v <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-da/strings.xml b/java/com/android/dialer/app/res/values-da/strings.xml
index c3d44c01f..5315bee5e 100644
--- a/java/com/android/dialer/app/res/values-da/strings.xml
+++ b/java/com/android/dialer/app/res/values-da/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Ring tilbage"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Besked"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Ring til <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Nummeret for talebeskeden er ukendt"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one"><xliff:g id="COUNT">%1$d</xliff:g> talebeskeder </item>
<item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> talebeskeder </item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"Telefonsvarer"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> sek."</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"talebesked"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"talebeskeder"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Ja"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Nej"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> kl. <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-de/strings.xml b/java/com/android/dialer/app/res/values-de/strings.xml
index 25bc8a6df..a50a8cd93 100644
--- a/java/com/android/dialer/app/res/values-de/strings.xml
+++ b/java/com/android/dialer/app/res/values-de/strings.xml
@@ -42,6 +42,10 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Zurückrufen"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Nachricht"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <!-- no translation found for notification_voicemail_text_format (1895667520930252897) -->
+ <skip />
+ <!-- no translation found for notification_voicemail_no_vm_number (8942821987929495842) -->
+ <skip />
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> Mailboxnachrichten </item>
<item quantity="one">Mailboxnachricht</item>
@@ -97,6 +101,12 @@
<string name="voicemail" msgid="8899540969000957954">"Mailbox"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"Mailboxnachricht"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"Mailboxnachrichten"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Ja"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Nein"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> um <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-el/strings.xml b/java/com/android/dialer/app/res/values-el/strings.xml
index 620ae1130..9978eac96 100644
--- a/java/com/android/dialer/app/res/values-el/strings.xml
+++ b/java/com/android/dialer/app/res/values-el/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Επανάκληση"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Μήνυμα"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Κλήση <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Ο αριθμός αυτόματου τηλεφωνητή είναι άγνωστος"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> Μηνύματα αυτόμ. τηλεφωνητή </item>
<item quantity="one">Μήνυμα αυτόματου τηλεφωνητή</item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"Αυτόματος τηλεφωνητής"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> δευτερόλεπτα"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> λεπτά <xliff:g id="SECONDS">%s</xliff:g> δευτερόλεπτα"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"φωνητικού μηνύματος αυτόματου τηλεφωνητή"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"φωνητικών μηνυμάτων αυτόματου τηλεφωνητή"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Ναι"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Όχι"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> στις <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-en-rAU/strings.xml b/java/com/android/dialer/app/res/values-en-rAU/strings.xml
index 36d25346d..6525bb672 100644
--- a/java/com/android/dialer/app/res/values-en-rAU/strings.xml
+++ b/java/com/android/dialer/app/res/values-en-rAU/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Call back"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Message"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Dial <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Voicemail number unknown"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> Voicemails </item>
<item quantity="one">Voicemail</item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"Voicemail"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> sec"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sec"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"voicemail"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"voicemails"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Yes"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"No"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> at <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-en-rGB/strings.xml b/java/com/android/dialer/app/res/values-en-rGB/strings.xml
index 36d25346d..6525bb672 100644
--- a/java/com/android/dialer/app/res/values-en-rGB/strings.xml
+++ b/java/com/android/dialer/app/res/values-en-rGB/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Call back"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Message"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Dial <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Voicemail number unknown"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> Voicemails </item>
<item quantity="one">Voicemail</item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"Voicemail"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> sec"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sec"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"voicemail"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"voicemails"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Yes"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"No"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> at <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-en-rIN/strings.xml b/java/com/android/dialer/app/res/values-en-rIN/strings.xml
index 36d25346d..6525bb672 100644
--- a/java/com/android/dialer/app/res/values-en-rIN/strings.xml
+++ b/java/com/android/dialer/app/res/values-en-rIN/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Call back"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Message"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Dial <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Voicemail number unknown"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> Voicemails </item>
<item quantity="one">Voicemail</item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"Voicemail"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> sec"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sec"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"voicemail"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"voicemails"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Yes"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"No"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> at <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-es-rUS/strings.xml b/java/com/android/dialer/app/res/values-es-rUS/strings.xml
index 798742fb1..d86c50b46 100644
--- a/java/com/android/dialer/app/res/values-es-rUS/strings.xml
+++ b/java/com/android/dialer/app/res/values-es-rUS/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Llamar"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Mensaje"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Marcar <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Número de correo de voz desconocido"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> mensajes de voz </item>
<item quantity="one">mensaje de voz</item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"Correo de voz"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"el mensaje de voz"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"los mensajes de voz"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Sí"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"No"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"El <xliff:g id="DATE">%1$s</xliff:g> a la hora <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-es/strings.xml b/java/com/android/dialer/app/res/values-es/strings.xml
index 26ea210c7..3c68a3b99 100644
--- a/java/com/android/dialer/app/res/values-es/strings.xml
+++ b/java/com/android/dialer/app/res/values-es/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Llamar"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Mensaje"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Marcar <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Número de buzón de voz desconocido"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> mensajes de voz </item>
<item quantity="one"> mensaje de voz</item>
@@ -97,6 +99,11 @@
<string name="voicemail" msgid="8899540969000957954">"Buzón de voz"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min y <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"mensaje de voz"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"mensajes de voz"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Sí"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"No"</string>
+ <string name="voicemailMultiSelectDialogTitle" msgid="150612124416146690">"¿Eliminar la selección de <xliff:g id="VOICEMAILORVOICEMAILS">%1$s</xliff:g>?"</string>
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> a las <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-et/strings.xml b/java/com/android/dialer/app/res/values-et/strings.xml
index de64ecbb2..071f4eab4 100644
--- a/java/com/android/dialer/app/res/values-et/strings.xml
+++ b/java/com/android/dialer/app/res/values-et/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Helista tagasi"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Saada sõnum"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Valige <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Kõneposti number on teadmata"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> kõneposti teadet </item>
<item quantity="one">Kõneposti teade</item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"Kõnepost"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"kõnepostisõnum"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"kõnepostisõnumid"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Jah"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Ei"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> kell <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-eu/strings.xml b/java/com/android/dialer/app/res/values-eu/strings.xml
index 688de91dc..236850ab3 100644
--- a/java/com/android/dialer/app/res/values-eu/strings.xml
+++ b/java/com/android/dialer/app/res/values-eu/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Erantzun deiari"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Mezua"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Markatu <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Erantzungailuaren zenbakia ezezaguna da"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> Erantzungailuko <xliff:g id="COUNT">%1$d</xliff:g> mezu </item>
<item quantity="one">Erantzungailuko mezua</item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"Erantzungailua"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"ahots-mezua"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"ahots-mezuak"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Bai"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Ez"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> (<xliff:g id="TIME">%2$s</xliff:g>)"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-fa/strings.xml b/java/com/android/dialer/app/res/values-fa/strings.xml
index 63461664f..d76253f79 100644
--- a/java/com/android/dialer/app/res/values-fa/strings.xml
+++ b/java/com/android/dialer/app/res/values-fa/strings.xml
@@ -42,6 +42,10 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"پاسخ تماس"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"پیام"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <!-- no translation found for notification_voicemail_text_format (1895667520930252897) -->
+ <skip />
+ <!-- no translation found for notification_voicemail_no_vm_number (8942821987929495842) -->
+ <skip />
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one"> <xliff:g id="COUNT">%1$d</xliff:g> پست صوتی </item>
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> پست صوتی </item>
@@ -97,6 +101,12 @@
<string name="voicemail" msgid="8899540969000957954">"پست صوتی"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> ثانیه"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> دقیقه <xliff:g id="SECONDS">%s</xliff:g> ثانیه"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"پست صوتی"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"پست‌های صوتی"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"بله"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"نه"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> ساعت <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-fi/strings.xml b/java/com/android/dialer/app/res/values-fi/strings.xml
index da70c087c..e247e4845 100644
--- a/java/com/android/dialer/app/res/values-fi/strings.xml
+++ b/java/com/android/dialer/app/res/values-fi/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Soita"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Viesti"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Soita numeroon <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Puhelinvastaajan numero tuntematon"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> vastaajaviestiä </item>
<item quantity="one">Vastaajaviesti</item>
@@ -97,6 +99,11 @@
<string name="voicemail" msgid="8899540969000957954">"Vastaaja"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"vastaajaviesti"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"vastaajaviestit"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Kyllä"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Ei"</string>
+ <string name="voicemailMultiSelectDialogTitle" msgid="150612124416146690">"Poistetaanko <xliff:g id="VOICEMAILORVOICEMAILS">%1$s</xliff:g>?"</string>
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> klo <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>.<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-fr-rCA/strings.xml b/java/com/android/dialer/app/res/values-fr-rCA/strings.xml
index 84dcbc89d..33eae2b43 100644
--- a/java/com/android/dialer/app/res/values-fr-rCA/strings.xml
+++ b/java/com/android/dialer/app/res/values-fr-rCA/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Rappeler"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Message"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g> : <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Composer le <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Numéro de messagerie vocale inconnu"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one"><xliff:g id="COUNT">%1$d</xliff:g> message vocal </item>
<item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> messages vocaux </item>
@@ -97,6 +99,11 @@
<string name="voicemail" msgid="8899540969000957954">"Messagerie vocale"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min et <xliff:g id="SECONDS">%s</xliff:g> sec"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"message vocal"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"messages vocaux"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Oui"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Non"</string>
+ <string name="voicemailMultiSelectDialogTitle" msgid="150612124416146690">"Supprimer la sélection (<xliff:g id="VOICEMAILORVOICEMAILS">%1$s</xliff:g>)?"</string>
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> à <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-fr/strings.xml b/java/com/android/dialer/app/res/values-fr/strings.xml
index 6f03106c4..e9bb8dd78 100644
--- a/java/com/android/dialer/app/res/values-fr/strings.xml
+++ b/java/com/android/dialer/app/res/values-fr/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Rappeler"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Envoyer un SMS"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g> : <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Composer le <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Numéro de messagerie vocale inconnu"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one"> <xliff:g id="COUNT">%1$d</xliff:g> message vocal </item>
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> messages vocaux </item>
@@ -97,6 +99,11 @@
<string name="voicemail" msgid="8899540969000957954">"Messagerie vocale"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> secondes"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min et <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"message vocal"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"messages vocaux"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Oui"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Non"</string>
+ <string name="voicemailMultiSelectDialogTitle" msgid="150612124416146690">"Supprimer les messages vocaux sélectionnés (<xliff:g id="VOICEMAILORVOICEMAILS">%1$s</xliff:g>) ?"</string>
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> à <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-gl/strings.xml b/java/com/android/dialer/app/res/values-gl/strings.xml
index 4d4e69377..41eacac16 100644
--- a/java/com/android/dialer/app/res/values-gl/strings.xml
+++ b/java/com/android/dialer/app/res/values-gl/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Devolver chamada"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Mensaxe"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Marca o <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Número de correo de voz descoñecido"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> correos de voz </item>
<item quantity="one">Correo de voz</item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"Correo de voz"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"correo de voz"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"correos de voz"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Si"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Non"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> ás <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-gu/strings.xml b/java/com/android/dialer/app/res/values-gu/strings.xml
index 726d473a1..1b7b28a11 100644
--- a/java/com/android/dialer/app/res/values-gu/strings.xml
+++ b/java/com/android/dialer/app/res/values-gu/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"કૉલ બેક"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"સંદેશ"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> ડાયલ કરો"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"વૉઇસમેઇલ નંબર અજાણ"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one"> <xliff:g id="COUNT">%1$d</xliff:g> વૉઇસમેઇલ્સ </item>
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> વૉઇસમેઇલ્સ </item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"વૉઇસમેઇલ"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> સેકંડ"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> મિ <xliff:g id="SECONDS">%s</xliff:g> સે"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"વૉઇસમેઇલ"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"વૉઇસમેઇલ"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"હા"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"નહીં"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> નાં રોજ <xliff:g id="TIME">%2$s</xliff:g> વાગ્યે"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-hi/strings.xml b/java/com/android/dialer/app/res/values-hi/strings.xml
index f44d45bcb..cc8b287dc 100644
--- a/java/com/android/dialer/app/res/values-hi/strings.xml
+++ b/java/com/android/dialer/app/res/values-hi/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"वापस कॉल करें"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"संदेश"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> डायल करें"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"वॉइसमेल नंबर अज्ञात"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one"> <xliff:g id="COUNT">%1$d</xliff:g> वॉइसमेल </item>
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> वॉइसमेल </item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"वॉयस मेल"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> सेकंड"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> मि. <xliff:g id="SECONDS">%s</xliff:g> से."</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"वॉयसमेल"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"वॉयसमेल"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"हां"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"नहीं"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> को <xliff:g id="TIME">%2$s</xliff:g> बजे"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-hr/strings.xml b/java/com/android/dialer/app/res/values-hr/strings.xml
index 0e5d0d0ec..4b12e83d7 100644
--- a/java/com/android/dialer/app/res/values-hr/strings.xml
+++ b/java/com/android/dialer/app/res/values-hr/strings.xml
@@ -42,6 +42,10 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Povratni poziv"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Poruka"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <!-- no translation found for notification_voicemail_text_format (1895667520930252897) -->
+ <skip />
+ <!-- no translation found for notification_voicemail_no_vm_number (8942821987929495842) -->
+ <skip />
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one"> <xliff:g id="COUNT">%1$d</xliff:g> poruka govorne pošte </item>
<item quantity="few"> <xliff:g id="COUNT">%1$d</xliff:g> poruke govorne pošte </item>
@@ -98,6 +102,12 @@
<string name="voicemail" msgid="8899540969000957954">"Govorna pošta"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"poruka govorne pošte"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"poruke govorne pošte"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Da"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Ne"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> u <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>.<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-hu/strings.xml b/java/com/android/dialer/app/res/values-hu/strings.xml
index fcc4454e2..7b529c205 100644
--- a/java/com/android/dialer/app/res/values-hu/strings.xml
+++ b/java/com/android/dialer/app/res/values-hu/strings.xml
@@ -42,6 +42,10 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Visszahívás"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Üzenet"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <!-- no translation found for notification_voicemail_text_format (1895667520930252897) -->
+ <skip />
+ <!-- no translation found for notification_voicemail_no_vm_number (8942821987929495842) -->
+ <skip />
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> hangpostaüzenet </item>
<item quantity="one">Hangpostaüzenet</item>
@@ -97,6 +101,12 @@
<string name="voicemail" msgid="8899540969000957954">"Hangposta"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> másodperc"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> perc <xliff:g id="SECONDS">%s</xliff:g> másodperc"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"hangpostaüzenetet"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"hangpostaüzeneteket"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Igen"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Nem"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-hy/strings.xml b/java/com/android/dialer/app/res/values-hy/strings.xml
index 008d34f17..b7b9cd34f 100644
--- a/java/com/android/dialer/app/res/values-hy/strings.xml
+++ b/java/com/android/dialer/app/res/values-hy/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Հետ զանգել"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Հաղորդագրություն"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>՝ <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Զանգել <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> համարին"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Ձայնային փոստի համարն անհայտ է"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one"> <xliff:g id="COUNT">%1$d</xliff:g> ձայնային փոստ </item>
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> ձայնային փոստ </item>
@@ -97,6 +99,11 @@
<string name="voicemail" msgid="8899540969000957954">"Ձայնային փոստ"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> վրկ"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> րոպե <xliff:g id="SECONDS">%s</xliff:g> վայրկյան"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"ձայնային հաղորդագրություն"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"ձայնային հաղորդագրություններ"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Այո"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Ոչ"</string>
+ <string name="voicemailMultiSelectDialogTitle" msgid="150612124416146690">"Ջնջե՞լ նշված <xliff:g id="VOICEMAILORVOICEMAILS">%1$s</xliff:g>ը"</string>
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g>-ին, ժամը <xliff:g id="TIME">%2$s</xliff:g>-ին"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-in/strings.xml b/java/com/android/dialer/app/res/values-in/strings.xml
index a133a6542..75b1edbe2 100644
--- a/java/com/android/dialer/app/res/values-in/strings.xml
+++ b/java/com/android/dialer/app/res/values-in/strings.xml
@@ -42,6 +42,10 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Telepon"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Pesan"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <!-- no translation found for notification_voicemail_text_format (1895667520930252897) -->
+ <skip />
+ <!-- no translation found for notification_voicemail_no_vm_number (8942821987929495842) -->
+ <skip />
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> Pesan suara </item>
<item quantity="one">Pesan suara</item>
@@ -97,6 +101,12 @@
<string name="voicemail" msgid="8899540969000957954">"Kotak Pesan"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> dtk"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> mnt <xliff:g id="SECONDS">%s</xliff:g> dtk"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"pesan suara"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"pesan suara"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Ya"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Tidak"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> pukul <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>.<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
@@ -131,7 +141,7 @@
<string name="favorite_hidden_undo" msgid="5660280521854875320">"Batalkan"</string>
<string name="search_shortcut_call_number" msgid="8847918845036880688">"Telepon <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="search_shortcut_create_new_contact" msgid="2076374262874775425">"Buat kontak baru"</string>
- <string name="search_shortcut_add_to_contact" msgid="701957016267810766">"Tambah ke kontak"</string>
+ <string name="search_shortcut_add_to_contact" msgid="701957016267810766">"Tambahkan ke kontak"</string>
<string name="search_shortcut_send_sms_message" msgid="1065069206532610854">"Kirim SMS"</string>
<string name="search_shortcut_make_video_call" msgid="3746207985295802095">"Lakukan video call"</string>
<string name="search_shortcut_block_number" msgid="4587283230665805776">"Blokir nomor"</string>
diff --git a/java/com/android/dialer/app/res/values-is/strings.xml b/java/com/android/dialer/app/res/values-is/strings.xml
index c9dc4f371..b905ba886 100644
--- a/java/com/android/dialer/app/res/values-is/strings.xml
+++ b/java/com/android/dialer/app/res/values-is/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Hringja til baka"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Skilaboð"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Hringja í <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Talhólfsnúmer ekki þekkt"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one"> <xliff:g id="COUNT">%1$d</xliff:g> talhólfsskilaboð </item>
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> talhólfsskilaboð </item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"Talhólf"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> sek."</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> mín. og <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"talhólfsskilaboð"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"talhólfsskilaboð"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Já"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Nei"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> kl. <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-it/strings.xml b/java/com/android/dialer/app/res/values-it/strings.xml
index 1465c91e1..322386fb9 100644
--- a/java/com/android/dialer/app/res/values-it/strings.xml
+++ b/java/com/android/dialer/app/res/values-it/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Richiama"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Messaggio"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Componi <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Numero segreteria sconosciuto"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> messaggi in segreteria </item>
<item quantity="one">Messaggio in segreteria</item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"Segreteria"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> secondi"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"messaggio vocale"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"messaggi vocali"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Sì"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"No"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> alle ore <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-iw/strings.xml b/java/com/android/dialer/app/res/values-iw/strings.xml
index efb655322..d3966b446 100644
--- a/java/com/android/dialer/app/res/values-iw/strings.xml
+++ b/java/com/android/dialer/app/res/values-iw/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"התקשר חזרה"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"הודעה"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"‏חיוג אל ‎<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>‎"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"המספר של תא הדואר הקולי אינו ידוע"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="two"> <xliff:g id="COUNT">%1$d</xliff:g> הודעות דואר קולי </item>
<item quantity="many"> <xliff:g id="COUNT">%1$d</xliff:g> הודעות דואר קולי </item>
@@ -99,6 +101,11 @@
<string name="voicemail" msgid="8899540969000957954">"דואר קולי"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> שניות"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> דק\' <xliff:g id="SECONDS">%s</xliff:g> שנ\'"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"ההודעה הקולית"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"ההודעות הקוליות"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"כן"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"לא"</string>
+ <string name="voicemailMultiSelectDialogTitle" msgid="150612124416146690">"האם למחוק את <xliff:g id="VOICEMAILORVOICEMAILS">%1$s</xliff:g> שבחרת?"</string>
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> ב-<xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-ja/strings.xml b/java/com/android/dialer/app/res/values-ja/strings.xml
index ccdf01759..147f572f7 100644
--- a/java/com/android/dialer/app/res/values-ja/strings.xml
+++ b/java/com/android/dialer/app/res/values-ja/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"コールバック"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"メッセージ"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g> さん: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> 宛に発信"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"ボイスメールの番号が不明です"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g>件のボイスメール</item>
<item quantity="one">1件のボイスメール</item>
@@ -97,6 +99,11 @@
<string name="voicemail" msgid="8899540969000957954">"ボイスメール"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g>秒"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g>分<xliff:g id="SECONDS">%s</xliff:g>秒"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"ボイスメール"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"ボイスメール"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"はい"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"いいえ"</string>
+ <string name="voicemailMultiSelectDialogTitle" msgid="150612124416146690">"選択した<xliff:g id="VOICEMAILORVOICEMAILS">%1$s</xliff:g>を削除しますか?"</string>
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g>、<xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g> 分 <xliff:g id="SECONDS">%2$02d</xliff:g> 秒"</string>
diff --git a/java/com/android/dialer/app/res/values-ka/strings.xml b/java/com/android/dialer/app/res/values-ka/strings.xml
index bebf1c542..4d573831e 100644
--- a/java/com/android/dialer/app/res/values-ka/strings.xml
+++ b/java/com/android/dialer/app/res/values-ka/strings.xml
@@ -42,6 +42,10 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"გადარეკვა"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"შეტყობინება"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <!-- no translation found for notification_voicemail_text_format (1895667520930252897) -->
+ <skip />
+ <!-- no translation found for notification_voicemail_no_vm_number (8942821987929495842) -->
+ <skip />
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> ხმოვანი ფოსტა </item>
<item quantity="one">ხმოვანი ფოსტა</item>
@@ -97,6 +101,12 @@
<string name="voicemail" msgid="8899540969000957954">"ხმოვანი ფოსტა"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> წმ"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> მინ <xliff:g id="SECONDS">%s</xliff:g> წამ"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"ხმოვანი ფოსტა"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"ხმოვანი ფოსტა"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"დიახ"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"არა"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-kk/strings.xml b/java/com/android/dialer/app/res/values-kk/strings.xml
index 7fa5d33ec..62397bbb9 100644
--- a/java/com/android/dialer/app/res/values-kk/strings.xml
+++ b/java/com/android/dialer/app/res/values-kk/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Қоңырау шалу"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Хабар"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> нөмірін теру"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Дауыстық пошта нөмірі белгісіз"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> дауыстық хабар </item>
<item quantity="one">Дауыстық хабар</item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"Дауыстық пошта"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> сек."</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> мин <xliff:g id="SECONDS">%s</xliff:g> сек"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"дауыстық хабар"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"дауыстық хабарлар"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Иә"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Жоқ"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-km/strings.xml b/java/com/android/dialer/app/res/values-km/strings.xml
index 3b6fe9e71..27dbf97c9 100644
--- a/java/com/android/dialer/app/res/values-km/strings.xml
+++ b/java/com/android/dialer/app/res/values-km/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"ហៅ​ទៅ​វិញ"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"សារ"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"ហៅ​ទូរសព្ទ​ទៅកាន់ <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"មិន​ស្គាល់​លេខ​សារ​ជា​សំឡេង​ទេ"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other">សារជាសម្លេង <xliff:g id="COUNT">%1$d</xliff:g> </item>
<item quantity="one">សារជាសម្លេង</item>
@@ -97,6 +99,11 @@
<string name="voicemail" msgid="8899540969000957954">"សារ​ជា​សំឡេង"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> វិនាទី"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> នាទី <xliff:g id="SECONDS">%s</xliff:g> វិនាទី"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"សារ​ជា​សំឡេង"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"សារ​ជា​សំឡេង"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"បាទ/ចាស"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"ទេ"</string>
+ <string name="voicemailMultiSelectDialogTitle" msgid="150612124416146690">"លុប <xliff:g id="VOICEMAILORVOICEMAILS">%1$s</xliff:g> ដែល​បាន​ជ្រើសរើស?"</string>
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> នៅម៉ោង <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-kn/strings.xml b/java/com/android/dialer/app/res/values-kn/strings.xml
index 68280f1f3..19e11e90f 100644
--- a/java/com/android/dialer/app/res/values-kn/strings.xml
+++ b/java/com/android/dialer/app/res/values-kn/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"ಮರಳಿ ಕರೆ ಮಾಡಿ"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"ಸಂದೇಶ"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> ಗೆ ಡಯಲ್‌‌ ಮಾಡಿ"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"ಅಪರಿಚಿತ ಧ್ವನಿಮೇಲ್‌ ಸಂಖ್ಯೆ"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one"> <xliff:g id="COUNT">%1$d</xliff:g> ಧ್ವನಿಮೇಲ್‌ಗಳು </item>
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> ಧ್ವನಿಮೇಲ್‌ಗಳು </item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"ಧ್ವನಿಮೇಲ್"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> ಸೆಕೆಂ"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> ನಿಮಿ <xliff:g id="SECONDS">%s</xliff:g> ಸೆಕೆಂ"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"ಧ್ವನಿಮೇಲ್"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"ಧ್ವನಿಮೇಲ್‌ಗಳು"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"ಹೌದು"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"ಇಲ್ಲ"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> ರಂದು <xliff:g id="TIME">%2$s</xliff:g> ಗಂಟೆಗೆ"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-ko/strings.xml b/java/com/android/dialer/app/res/values-ko/strings.xml
index f72a69139..d28760c6f 100644
--- a/java/com/android/dialer/app/res/values-ko/strings.xml
+++ b/java/com/android/dialer/app/res/values-ko/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"통화하기"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"메시지"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>(으)로 전화걸기"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"알 수 없는 음성사서함 번호"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other">음성메일 <xliff:g id="COUNT">%1$d</xliff:g>개</item>
<item quantity="one">음성메일</item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"음성사서함"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g>초"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g>분 <xliff:g id="SECONDS">%s</xliff:g>초"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"음성사서함"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"음성사서함"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"예"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"아니요"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>분 <xliff:g id="SECONDS">%2$02d</xliff:g>초"</string>
diff --git a/java/com/android/dialer/app/res/values-ky/strings.xml b/java/com/android/dialer/app/res/values-ky/strings.xml
index 34d87da09..85789978d 100644
--- a/java/com/android/dialer/app/res/values-ky/strings.xml
+++ b/java/com/android/dialer/app/res/values-ky/strings.xml
@@ -42,6 +42,10 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Кайра чалуу"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Билдирүү"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <!-- no translation found for notification_voicemail_text_format (1895667520930252897) -->
+ <skip />
+ <!-- no translation found for notification_voicemail_no_vm_number (8942821987929495842) -->
+ <skip />
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> Үн каты </item>
<item quantity="one">Үн каты</item>
@@ -97,6 +101,12 @@
<string name="voicemail" msgid="8899540969000957954">"Үн почтасы"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> сек."</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> мүн. <xliff:g id="SECONDS">%s</xliff:g> сек."</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"үн почтасы"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"үн почталары"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Ооба"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Жок"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> саат <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-lo/strings.xml b/java/com/android/dialer/app/res/values-lo/strings.xml
index 4bdb11338..a433847f9 100644
--- a/java/com/android/dialer/app/res/values-lo/strings.xml
+++ b/java/com/android/dialer/app/res/values-lo/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"ໂທກັບ"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"ຂໍ້ຄວາມ"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"ໂທຫາ <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"ບໍ່ຮູ້ຈັກເບີຂໍ້ຄວາມສຽງ"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> ຂໍ້ຄວາມສຽງ </item>
<item quantity="one">ຂໍ້ຄວາມສຽງ</item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"ຂໍ້ຄວາມສຽງ"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> ວິນາທີ"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> ນ​ທ <xliff:g id="SECONDS">%s</xliff:g> ວິ"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"ຂໍ້ຄວາມສຽງ"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"ຂໍ້ຄວາມສຽງ"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"ແມ່ນແລ້ວ"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"ບໍ່"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> ເວລາ <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-lt/strings.xml b/java/com/android/dialer/app/res/values-lt/strings.xml
index 5266dd1b8..c4feacf32 100644
--- a/java/com/android/dialer/app/res/values-lt/strings.xml
+++ b/java/com/android/dialer/app/res/values-lt/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Perskambinti"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Siųsti pranešimą"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: „<xliff:g id="MESSAGE">%2$s</xliff:g>“"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Rinkti <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Nežinomas balso pašto numeris"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one"> <xliff:g id="COUNT">%1$d</xliff:g> balso pašto pranešimas </item>
<item quantity="few"> <xliff:g id="COUNT">%1$d</xliff:g> balso pašto pranešimai </item>
@@ -99,6 +101,12 @@
<string name="voicemail" msgid="8899540969000957954">"Balso paštas"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> sek."</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"balso pašto praneš."</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"balso pašto praneš."</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Taip"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Ne"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-lv/strings.xml b/java/com/android/dialer/app/res/values-lv/strings.xml
index e36a47eae..440e2d4d1 100644
--- a/java/com/android/dialer/app/res/values-lv/strings.xml
+++ b/java/com/android/dialer/app/res/values-lv/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Atzvanīt"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Sūtīt ziņojumu"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Sastādiet šādu numuru: <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Balss pasta numurs nav zināms."</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="zero"><xliff:g id="COUNT">%1$d</xliff:g> balss pasta ziņojumi </item>
<item quantity="one"><xliff:g id="COUNT">%1$d</xliff:g> balss pasta ziņojums </item>
@@ -98,6 +100,12 @@
<string name="voicemail" msgid="8899540969000957954">"Balss pasts"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"balss pasta ziņojums"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"balss pasta ziņojumi"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Jā"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Nē"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> plkst. <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-mk/strings.xml b/java/com/android/dialer/app/res/values-mk/strings.xml
index 742250d03..c179bb631 100644
--- a/java/com/android/dialer/app/res/values-mk/strings.xml
+++ b/java/com/android/dialer/app/res/values-mk/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Повикува назад"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Порака"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Бирајте <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Бројот на говорната пошта е непознат"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one"> <xliff:g id="COUNT">%1$d</xliff:g> говорна порака </item>
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> говорни пораки </item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"Говорна пошта"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> сек."</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> мин. <xliff:g id="SECONDS">%s</xliff:g> сек."</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"говорна пошта"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"говорни пораки"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Да"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Не"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> во <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-ml/strings.xml b/java/com/android/dialer/app/res/values-ml/strings.xml
index 857973aaa..a642334b5 100644
--- a/java/com/android/dialer/app/res/values-ml/strings.xml
+++ b/java/com/android/dialer/app/res/values-ml/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"കോൾബാക്ക്"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"സന്ദേശം"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> ഡയൽ ചെയ്യുക"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"വോയ്‌സ്‌മെയിൽ നമ്പർ അജ്ഞാതമാണ്"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> വോയ്‌സ്‌മെയിലുകൾ </item>
<item quantity="one">വോയ്‌സ്‌മെയിൽ</item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"വോയ്‌സ്‌മെയിൽ"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> സെക്കൻഡ്"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> മി. <xliff:g id="SECONDS">%s</xliff:g> സെ."</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"വോയ്‌സ്‌മെയിൽ"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"വോയ്‌സ്മെയിലുകൾ"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"അതെ"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"ഇല്ല"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>-ന്"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-mn/strings.xml b/java/com/android/dialer/app/res/values-mn/strings.xml
index decd08116..12f0d41cc 100644
--- a/java/com/android/dialer/app/res/values-mn/strings.xml
+++ b/java/com/android/dialer/app/res/values-mn/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Буцааж залгах"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Зурвас"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> руу залгах"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Дуут шуудангийн дугаар тодорхойгүй"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> Дуут шуудан </item>
<item quantity="one">Дуут шуудан</item>
@@ -97,6 +99,11 @@
<string name="voicemail" msgid="8899540969000957954">"Дуут шуудан"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> сек"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> минут <xliff:g id="SECONDS">%s</xliff:g> секунд"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"дуут шуудан"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"дуут шуудан"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Тийм"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Үгүй"</string>
+ <string name="voicemailMultiSelectDialogTitle" msgid="150612124416146690">"Сонгосон <xliff:g id="VOICEMAILORVOICEMAILS">%1$s</xliff:g>-г устгах уу?"</string>
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="TIME">%2$s</xliff:g>-д"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-mr/strings.xml b/java/com/android/dialer/app/res/values-mr/strings.xml
index 71233ac0e..feda81603 100644
--- a/java/com/android/dialer/app/res/values-mr/strings.xml
+++ b/java/com/android/dialer/app/res/values-mr/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"पुन्हा कॉल करा"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"संदेश"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> डायल करा"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"व्हॉइसमेल नंबर अज्ञात"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one"> <xliff:g id="COUNT">%1$d</xliff:g> व्हॉइसमेल </item>
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> व्हॉइसमेल </item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"व्हॉइसमेल"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> सेकंद"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> मिनिट <xliff:g id="SECONDS">%s</xliff:g> सेकंद"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"व्हॉइसमेल"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"व्हॉइसमेल"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"होय"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"नाही"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> रोजी <xliff:g id="TIME">%2$s</xliff:g> वाजता"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-ms/strings.xml b/java/com/android/dialer/app/res/values-ms/strings.xml
index 4373c7ca6..f4c9ac29f 100644
--- a/java/com/android/dialer/app/res/values-ms/strings.xml
+++ b/java/com/android/dialer/app/res/values-ms/strings.xml
@@ -42,6 +42,10 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Panggil balik"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Mesej"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <!-- no translation found for notification_voicemail_text_format (1895667520930252897) -->
+ <skip />
+ <!-- no translation found for notification_voicemail_no_vm_number (8942821987929495842) -->
+ <skip />
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> Mel suara </item>
<item quantity="one">Mel suara</item>
@@ -97,6 +101,12 @@
<string name="voicemail" msgid="8899540969000957954">"Mel suara"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> saat"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> saat"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"mel suara"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"mel suara"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Ya"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Tidak"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> pada <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-my/strings.xml b/java/com/android/dialer/app/res/values-my/strings.xml
index fa317bce4..16b286fd4 100644
--- a/java/com/android/dialer/app/res/values-my/strings.xml
+++ b/java/com/android/dialer/app/res/values-my/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"ပြန်ခေါ်ပါ"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"မက်ဆေ့ဂျ်"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g> - <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> ကို ခေါ်ပါ"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"အသံမေးလ်နံပါတ် မသိပါ"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> အသံမေးလ်များ </item>
<item quantity="one"> အသံမေးလ်</item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"အသံစာပို့စနစ်"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> စက္ကန့်"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> မိနစ် <xliff:g id="SECONDS">%s</xliff:g> စက္ကန့်"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"အသံမေးလ်"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"အသံမေးလ်များ"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Yes"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"No"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="TIME">%2$s</xliff:g> ၌"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-nb/strings.xml b/java/com/android/dialer/app/res/values-nb/strings.xml
index 488864f3e..4d97dc23a 100644
--- a/java/com/android/dialer/app/res/values-nb/strings.xml
+++ b/java/com/android/dialer/app/res/values-nb/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Ring tilbake"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Melding"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Ring <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Mangler nummer til talepostkasse"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> talemeldinger </item>
<item quantity="one">talemelding</item>
@@ -97,6 +99,11 @@
<string name="voicemail" msgid="8899540969000957954">"Telefonsvarer"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> sek"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sek"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"talepost"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"talepost"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Ja"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Nei"</string>
+ <string name="voicemailMultiSelectDialogTitle" msgid="150612124416146690">"Slett markert <xliff:g id="VOICEMAILORVOICEMAILS">%1$s</xliff:g>?"</string>
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> kl. <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-ne/strings.xml b/java/com/android/dialer/app/res/values-ne/strings.xml
index 33989648e..169c0111a 100644
--- a/java/com/android/dialer/app/res/values-ne/strings.xml
+++ b/java/com/android/dialer/app/res/values-ne/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"फेरि कल गर्नुहोस्"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"सन्देश"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>मा डायल गर्नुहोस्"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"भ्वाइस मेल नम्बर अज्ञात"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> भ्वाइसमेलहरू </item>
<item quantity="one">भ्वाइसमेल</item>
@@ -97,6 +99,11 @@
<string name="voicemail" msgid="8899540969000957954">"भ्वाइसमेल"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> सेकेन्ड"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> मिनेट <xliff:g id="SECONDS">%s</xliff:g> सकेन्ड"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"भ्वाइस मेल"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"भ्वाइस मेलहरू"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"हो"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"होइन"</string>
+ <string name="voicemailMultiSelectDialogTitle" msgid="150612124416146690">"चयन गरिएका <xliff:g id="VOICEMAILORVOICEMAILS">%1$s</xliff:g> लाई मेटाउने हो?"</string>
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> मा <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-nl/strings.xml b/java/com/android/dialer/app/res/values-nl/strings.xml
index 986236e4f..3eddbb7e2 100644
--- a/java/com/android/dialer/app/res/values-nl/strings.xml
+++ b/java/com/android/dialer/app/res/values-nl/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Terugbellen"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Bericht"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> bellen"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Voicemailnummer onbekend"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> voicemails </item>
<item quantity="one">Voicemail</item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"Voicemail"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> sec."</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sec."</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"voicemail"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"voicemails"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Ja"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Nee"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> om <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-no/strings.xml b/java/com/android/dialer/app/res/values-no/strings.xml
index 488864f3e..4d97dc23a 100644
--- a/java/com/android/dialer/app/res/values-no/strings.xml
+++ b/java/com/android/dialer/app/res/values-no/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Ring tilbake"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Melding"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Ring <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Mangler nummer til talepostkasse"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> talemeldinger </item>
<item quantity="one">talemelding</item>
@@ -97,6 +99,11 @@
<string name="voicemail" msgid="8899540969000957954">"Telefonsvarer"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> sek"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sek"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"talepost"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"talepost"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Ja"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Nei"</string>
+ <string name="voicemailMultiSelectDialogTitle" msgid="150612124416146690">"Slett markert <xliff:g id="VOICEMAILORVOICEMAILS">%1$s</xliff:g>?"</string>
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> kl. <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-pa/strings.xml b/java/com/android/dialer/app/res/values-pa/strings.xml
index 6e9cc03a9..c8a39f6ae 100644
--- a/java/com/android/dialer/app/res/values-pa/strings.xml
+++ b/java/com/android/dialer/app/res/values-pa/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"ਕਾਲ ਬੈਕ ਕਰੋ"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"ਸੁਨੇਹਾ"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> ਡਾਇਲ ਕਰੋ"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"ਵੌਇਸਮੇਲ ਨੰਬਰ ਅਗਿਆਤ"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one"> <xliff:g id="COUNT">%1$d</xliff:g> ਵੌਇਸਮੇਲਾਂ </item>
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> ਵੌਇਸਮੇਲਾਂ </item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"ਵੌਇਸਮੇਲ"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> ਸਕਿੰਟ"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> ਮਿੰਟ <xliff:g id="SECONDS">%s</xliff:g> ਸਕਿੰਟ"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"ਵੌਇਸਮੇਲ"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"ਵੌਇਸਮੇਲਾਂ"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"ਹਾਂ"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"ਨਹੀਂ"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> ਨੂੰ <xliff:g id="TIME">%2$s</xliff:g> ਵਜੇ"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-pl/strings.xml b/java/com/android/dialer/app/res/values-pl/strings.xml
index 0c8f43ff6..452854064 100644
--- a/java/com/android/dialer/app/res/values-pl/strings.xml
+++ b/java/com/android/dialer/app/res/values-pl/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Oddzwoń"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Wyślij SMS-a"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Zadzwoń pod numer <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Numer poczty głosowej jest nieznany"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="few"> <xliff:g id="COUNT">%1$d</xliff:g> wiadomości głosowe </item>
<item quantity="many"> <xliff:g id="COUNT">%1$d</xliff:g> wiadomości głosowych </item>
@@ -99,6 +101,12 @@
<string name="voicemail" msgid="8899540969000957954">"Poczta głosowa"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"wiadomości głosowe"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"wiadomości głosowe"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Tak"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Nie"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> o <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-pt-rBR/strings.xml b/java/com/android/dialer/app/res/values-pt-rBR/strings.xml
index 4f090df6e..845442a71 100644
--- a/java/com/android/dialer/app/res/values-pt-rBR/strings.xml
+++ b/java/com/android/dialer/app/res/values-pt-rBR/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Retornar chamada"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Mensagem"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Discar <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Número do correio de voz desconhecido"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one"> <xliff:g id="COUNT">%1$d</xliff:g> Correios de voz </item>
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> Correios de voz </item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"Correio de voz"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> seg"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> m <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"correio de voz"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"correios de voz"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Sim"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Não"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> às <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-pt-rPT/strings.xml b/java/com/android/dialer/app/res/values-pt-rPT/strings.xml
index 9cabdc4a5..95451bc9d 100644
--- a/java/com/android/dialer/app/res/values-pt-rPT/strings.xml
+++ b/java/com/android/dialer/app/res/values-pt-rPT/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Ligar de volta"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Mensagem"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Marcar <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Número do correio de voz desconhecido"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> mensagens de correio de voz </item>
<item quantity="one">Mensagem de correio de voz</item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"Correio de voz"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> seg"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> seg."</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"mensagem de correio de voz"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"mensagens de correio de voz"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Sim"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Não"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> às <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-pt/strings.xml b/java/com/android/dialer/app/res/values-pt/strings.xml
index 4f090df6e..845442a71 100644
--- a/java/com/android/dialer/app/res/values-pt/strings.xml
+++ b/java/com/android/dialer/app/res/values-pt/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Retornar chamada"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Mensagem"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Discar <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Número do correio de voz desconhecido"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one"> <xliff:g id="COUNT">%1$d</xliff:g> Correios de voz </item>
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> Correios de voz </item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"Correio de voz"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> seg"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> m <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"correio de voz"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"correios de voz"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Sim"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Não"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> às <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-ro/strings.xml b/java/com/android/dialer/app/res/values-ro/strings.xml
index 3a083ae74..36987fe3e 100644
--- a/java/com/android/dialer/app/res/values-ro/strings.xml
+++ b/java/com/android/dialer/app/res/values-ro/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Sunați"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Trimiteți mesaj"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Apelați <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Numărul mesageriei vocale necunoscut"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="few"> <xliff:g id="COUNT">%1$d</xliff:g> mesaje vocale </item>
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> de mesaje vocale </item>
@@ -98,6 +100,12 @@
<string name="voicemail" msgid="8899540969000957954">"Mesagerie vocală"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> secunde"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sec."</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"mesagerie vocală"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"mesaje vocale"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Da"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Nu"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> la <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-ru/strings.xml b/java/com/android/dialer/app/res/values-ru/strings.xml
index 925d684a5..69031b14f 100644
--- a/java/com/android/dialer/app/res/values-ru/strings.xml
+++ b/java/com/android/dialer/app/res/values-ru/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Позвонить"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Написать SMS"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Позвонить: <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Номер голосовой почты неизвестен"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one"> <xliff:g id="COUNT">%1$d</xliff:g> голосовое сообщение </item>
<item quantity="few"> <xliff:g id="COUNT">%1$d</xliff:g> голосовых сообщения </item>
@@ -99,6 +101,12 @@
<string name="voicemail" msgid="8899540969000957954">"Голосовая почта"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> сек."</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> мин. <xliff:g id="SECONDS">%s</xliff:g> сек."</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"голосовое сообщение"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"голосовые сообщения"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Да"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Нет"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> в <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-si/strings.xml b/java/com/android/dialer/app/res/values-si/strings.xml
index 55ce37b81..45ee7d961 100644
--- a/java/com/android/dialer/app/res/values-si/strings.xml
+++ b/java/com/android/dialer/app/res/values-si/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"නැවත අමතන්න"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"පණිවිඩය"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> ඩයල් කරන්න"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"හඬ තැපැල් අංකය නොදනී"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one">හඬ තැපැල් <xliff:g id="COUNT">%1$d</xliff:g> </item>
<item quantity="other">හඬ තැපැල් <xliff:g id="COUNT">%1$d</xliff:g> </item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"හඬ තැපෑල"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"තත් <xliff:g id="SECONDS">%s</xliff:g>"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"මිනි <xliff:g id="MINUTES">%s</xliff:g> තත් <xliff:g id="SECONDS">%s</xliff:g>"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"හඬ තැපෑල"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"හඬ තැපැල්"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"ඔව්"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"නැත"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> දින <xliff:g id="TIME">%2$s</xliff:g>ට"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-sk/strings.xml b/java/com/android/dialer/app/res/values-sk/strings.xml
index 59f3d10f1..9774a4180 100644
--- a/java/com/android/dialer/app/res/values-sk/strings.xml
+++ b/java/com/android/dialer/app/res/values-sk/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Zavolať"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Správa"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Vytočiť číslo <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Číslo hlasovej schránky je neznáme"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="few"> <xliff:g id="COUNT">%1$d</xliff:g> odkazy v hlasovej schránke </item>
<item quantity="many"> <xliff:g id="COUNT">%1$d</xliff:g> odkazu v hlasovej schránke </item>
@@ -99,6 +101,12 @@
<string name="voicemail" msgid="8899540969000957954">"Hlasová schránka"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"hlasová správa"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"hlasové správy"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Áno"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Nie"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> o <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-sl/strings.xml b/java/com/android/dialer/app/res/values-sl/strings.xml
index 28f4ce021..80898e58d 100644
--- a/java/com/android/dialer/app/res/values-sl/strings.xml
+++ b/java/com/android/dialer/app/res/values-sl/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Povratni klic"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"SMS"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Kliči <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Neznana številka odzivnika"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one"> <xliff:g id="COUNT">%1$d</xliff:g> sporočilo v odzivniku </item>
<item quantity="two"> <xliff:g id="COUNT">%1$d</xliff:g> sporočili v odzivniku </item>
@@ -99,6 +101,12 @@
<string name="voicemail" msgid="8899540969000957954">"Glasovna pošta"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"sporočilo v odzivniku"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"sporočila v odzivniku"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Da"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Ne"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> ob <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-sq/strings.xml b/java/com/android/dialer/app/res/values-sq/strings.xml
index 48ec8fee8..ea757a873 100644
--- a/java/com/android/dialer/app/res/values-sq/strings.xml
+++ b/java/com/android/dialer/app/res/values-sq/strings.xml
@@ -42,6 +42,10 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Telefono"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Mesazh"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <!-- no translation found for notification_voicemail_text_format (1895667520930252897) -->
+ <skip />
+ <!-- no translation found for notification_voicemail_no_vm_number (8942821987929495842) -->
+ <skip />
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> posta zanore </item>
<item quantity="one"> postë zanore</item>
@@ -97,6 +101,12 @@
<string name="voicemail" msgid="8899540969000957954">"Posta zanore"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> sekonda"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min. e <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"posta zanore"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"postat zanore"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Po"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Jo"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> në <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-sr/strings.xml b/java/com/android/dialer/app/res/values-sr/strings.xml
index fd4e2b9ba..610f230f7 100644
--- a/java/com/android/dialer/app/res/values-sr/strings.xml
+++ b/java/com/android/dialer/app/res/values-sr/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Узврати позив"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Пошаљи SMS"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Позови <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Непознат број говорне поште"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one"> <xliff:g id="COUNT">%1$d</xliff:g> говорна порука </item>
<item quantity="few"> <xliff:g id="COUNT">%1$d</xliff:g> говорне поруке </item>
@@ -98,6 +100,12 @@
<string name="voicemail" msgid="8899540969000957954">"Говорна пошта"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> сек"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> мин <xliff:g id="SECONDS">%s</xliff:g> сек"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"говорну поруку"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"говорне поруке"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Да"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Не"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> у <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-sv/strings.xml b/java/com/android/dialer/app/res/values-sv/strings.xml
index fc8920a38..c29568ba3 100644
--- a/java/com/android/dialer/app/res/values-sv/strings.xml
+++ b/java/com/android/dialer/app/res/values-sv/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Ring upp"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Meddelande"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Ring <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Numret till röstbrevlådan är okänt"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> röstmeddelanden </item>
<item quantity="one">röstmeddelande</item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"Röstbrevlåda"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> sekund"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sek"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"röstbrevlåda"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"röstmeddelanden"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Ja"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Nej"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> kl. <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-sw/strings.xml b/java/com/android/dialer/app/res/values-sw/strings.xml
index 4c469979a..11f5664d0 100644
--- a/java/com/android/dialer/app/res/values-sw/strings.xml
+++ b/java/com/android/dialer/app/res/values-sw/strings.xml
@@ -42,6 +42,10 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Mpigie"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Ujumbe"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <!-- no translation found for notification_voicemail_text_format (1895667520930252897) -->
+ <skip />
+ <!-- no translation found for notification_voicemail_no_vm_number (8942821987929495842) -->
+ <skip />
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other">Ujumbe <xliff:g id="COUNT">%1$d</xliff:g> wa sauti </item>
<item quantity="one">Ujumbe wa sauti</item>
@@ -97,6 +101,12 @@
<string name="voicemail" msgid="8899540969000957954">"Ujumbe wa sauti"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"Sekunde <xliff:g id="SECONDS">%s</xliff:g>"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"Dak <xliff:g id="MINUTES">%s</xliff:g> sek <xliff:g id="SECONDS">%s</xliff:g>"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"ujumbe wa sauti"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"ujumbe wa sauti"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Ndiyo"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Hapana"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> saa <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-ta/strings.xml b/java/com/android/dialer/app/res/values-ta/strings.xml
index 0b5a51d9f..795a4e7cb 100644
--- a/java/com/android/dialer/app/res/values-ta/strings.xml
+++ b/java/com/android/dialer/app/res/values-ta/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"அழை"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"செய்தி அனுப்பு"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> என்ற எண்ணை அழைக்கவும்"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"குரலஞ்சல் எண் அறியப்படவில்லை"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> குரலஞ்சல்கள் </item>
<item quantity="one">குரலஞ்சல்</item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"குரலஞ்சல்"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> வி"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> நிமிடம் <xliff:g id="SECONDS">%s</xliff:g> வினாடி"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"குரலஞ்சல்"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"குரலஞ்சல்கள்"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"ஆம்"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"வேண்டாம்"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> அன்று <xliff:g id="TIME">%2$s</xliff:g> மணிக்கு"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-te/strings.xml b/java/com/android/dialer/app/res/values-te/strings.xml
index 512f7e276..531e20618 100644
--- a/java/com/android/dialer/app/res/values-te/strings.xml
+++ b/java/com/android/dialer/app/res/values-te/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"కాల్ చేయి"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"సందేశం పంపు"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>కు డయల్ చేయండి"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"వాయిస్ మెయిల్ నంబర్ తెలియదు"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> వాయిస్ మెయిల్‌లు </item>
<item quantity="one">వాయిస్ మెయిల్</item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"వాయిస్ మెయిల్"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> సెక"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> నిమి <xliff:g id="SECONDS">%s</xliff:g> సెక"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"వాయిస్ మెయిల్"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"వాయిస్ మెయిల్‌లు"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"అవును"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"వద్దు"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="TIME">%2$s</xliff:g>కి"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-th/strings.xml b/java/com/android/dialer/app/res/values-th/strings.xml
index 6817d51b8..0433a6eb4 100644
--- a/java/com/android/dialer/app/res/values-th/strings.xml
+++ b/java/com/android/dialer/app/res/values-th/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"โทรกลับ"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"ข้อความ"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"หมุนหมายเลข <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"ไม่ทราบหมายเลขข้อความเสียง"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> ข้อความเสียง </item>
<item quantity="one">ข้อความเสียง</item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"ข้อความเสียง"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> วินาที"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> นาที <xliff:g id="SECONDS">%s</xliff:g> วินาที"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"ข้อความเสียง"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"ข้อความเสียง"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"ใช่"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"ไม่"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"วันที่ <xliff:g id="DATE">%1$s</xliff:g> เวลา <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-tl/strings.xml b/java/com/android/dialer/app/res/values-tl/strings.xml
index c98a04633..6eb1723ff 100644
--- a/java/com/android/dialer/app/res/values-tl/strings.xml
+++ b/java/com/android/dialer/app/res/values-tl/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Tawagan"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Mensahe"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"I-dial ang <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Hindi kilala ang numero ng voicemail"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one"> <xliff:g id="COUNT">%1$d</xliff:g> Voicemail </item>
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> na Voicemail </item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"Voicemail"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> sec"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sec"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"voicemail"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"mga voicemail"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Oo"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Hindi"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> ng <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-tr/strings.xml b/java/com/android/dialer/app/res/values-tr/strings.xml
index 73b3cd729..751286b30 100644
--- a/java/com/android/dialer/app/res/values-tr/strings.xml
+++ b/java/com/android/dialer/app/res/values-tr/strings.xml
@@ -42,6 +42,10 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Geri ara"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"İleti"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <!-- no translation found for notification_voicemail_text_format (1895667520930252897) -->
+ <skip />
+ <!-- no translation found for notification_voicemail_no_vm_number (8942821987929495842) -->
+ <skip />
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> Sesli Mesaj </item>
<item quantity="one">Sesli Mesaj</item>
@@ -97,6 +101,12 @@
<string name="voicemail" msgid="8899540969000957954">"Sesli Mesaj"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> sn."</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> dk. <xliff:g id="SECONDS">%s</xliff:g> sn."</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"sesli mesaj"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"sesli mesajlar"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Evet"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Hayır"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-uk/strings.xml b/java/com/android/dialer/app/res/values-uk/strings.xml
index dd7689093..0da2ea9f2 100644
--- a/java/com/android/dialer/app/res/values-uk/strings.xml
+++ b/java/com/android/dialer/app/res/values-uk/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Передзвонити"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Повідомлення"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Набрати <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Невідомий номер голосової пошти"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one"> <xliff:g id="COUNT">%1$d</xliff:g> голосове повідомлення </item>
<item quantity="few"> <xliff:g id="COUNT">%1$d</xliff:g> голосові повідомлення </item>
@@ -99,6 +101,12 @@
<string name="voicemail" msgid="8899540969000957954">"Голосова пошта"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> с"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> хв <xliff:g id="SECONDS">%s</xliff:g> с"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"голосова пошта"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"голосова пошта"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Так"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Ні"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> о <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-ur/strings.xml b/java/com/android/dialer/app/res/values-ur/strings.xml
index 534b915cc..748e2f210 100644
--- a/java/com/android/dialer/app/res/values-ur/strings.xml
+++ b/java/com/android/dialer/app/res/values-ur/strings.xml
@@ -42,6 +42,10 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"واپس کال کریں"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"پیغام"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <!-- no translation found for notification_voicemail_text_format (1895667520930252897) -->
+ <skip />
+ <!-- no translation found for notification_voicemail_no_vm_number (8942821987929495842) -->
+ <skip />
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> صوتی میلز </item>
<item quantity="one">صوتی میل</item>
@@ -97,6 +101,12 @@
<string name="voicemail" msgid="8899540969000957954">"صوتی میل"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> سیکنڈ"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> منٹ <xliff:g id="SECONDS">%s</xliff:g> سیکنڈ"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"صوتی میل"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"صوتی میلز"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"ہاں"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"نہیں"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> بوقت <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-uz/strings.xml b/java/com/android/dialer/app/res/values-uz/strings.xml
index 11befbc51..a13da4389 100644
--- a/java/com/android/dialer/app/res/values-uz/strings.xml
+++ b/java/com/android/dialer/app/res/values-uz/strings.xml
@@ -42,6 +42,10 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Telefon"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"SMS yozish"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <!-- no translation found for notification_voicemail_text_format (1895667520930252897) -->
+ <skip />
+ <!-- no translation found for notification_voicemail_no_vm_number (8942821987929495842) -->
+ <skip />
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> ta ovozli xabar </item>
<item quantity="one">Ovozli xabar</item>
@@ -97,6 +101,12 @@
<string name="voicemail" msgid="8899540969000957954">"Ovozli pochta"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> soniya"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> daq <xliff:g id="SECONDS">%s</xliff:g> son"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"ovozli xabar"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"ovozli xabarlar"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Ha"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Yo‘q"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-vi/strings.xml b/java/com/android/dialer/app/res/values-vi/strings.xml
index 942f06768..a95e0683c 100644
--- a/java/com/android/dialer/app/res/values-vi/strings.xml
+++ b/java/com/android/dialer/app/res/values-vi/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Gọi lại"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Tin nhắn"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Quay số <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Số thư thoại không xác định"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> Thư thoại </item>
<item quantity="one">Thư thoại</item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"Thư thoại"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> giây"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> phút <xliff:g id="SECONDS">%s</xliff:g> giây"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"thư thoại"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"thư thoại"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Có"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Không"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> lúc <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-zh-rCN/strings.xml b/java/com/android/dialer/app/res/values-zh-rCN/strings.xml
index 4b6f55a69..6a12a0711 100644
--- a/java/com/android/dialer/app/res/values-zh-rCN/strings.xml
+++ b/java/com/android/dialer/app/res/values-zh-rCN/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"回拨"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"发短信"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>:<xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"拨打 <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"语音信箱号码未知"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> 封语音邮件</item>
<item quantity="one">1 封语音邮件</item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"语音信箱"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> 分钟 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"语音邮件"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"语音邮件"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"是"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"否"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g><xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-zh-rHK/strings.xml b/java/com/android/dialer/app/res/values-zh-rHK/strings.xml
index 95dd23871..12e50fb09 100644
--- a/java/com/android/dialer/app/res/values-zh-rHK/strings.xml
+++ b/java/com/android/dialer/app/res/values-zh-rHK/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"回撥"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"短訊"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>:<xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"撥號 <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"沒有可用的留言信箱號碼"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> 個留言</item>
<item quantity="one">留言</item>
@@ -97,6 +99,11 @@
<string name="voicemail" msgid="8899540969000957954">"留言"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> 分 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"留言"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"留言"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"是"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"否"</string>
+ <string name="voicemailMultiSelectDialogTitle" msgid="150612124416146690">"要刪除所選的<xliff:g id="VOICEMAILORVOICEMAILS">%1$s</xliff:g>嗎?"</string>
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g><xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-zh-rTW/strings.xml b/java/com/android/dialer/app/res/values-zh-rTW/strings.xml
index 66d986d8c..83d093e55 100644
--- a/java/com/android/dialer/app/res/values-zh-rTW/strings.xml
+++ b/java/com/android/dialer/app/res/values-zh-rTW/strings.xml
@@ -42,6 +42,10 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"回撥"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"傳送簡訊"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>:<xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <!-- no translation found for notification_voicemail_text_format (1895667520930252897) -->
+ <skip />
+ <!-- no translation found for notification_voicemail_no_vm_number (8942821987929495842) -->
+ <skip />
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> 則語音留言</item>
<item quantity="one">語音留言</item>
@@ -97,6 +101,12 @@
<string name="voicemail" msgid="8899540969000957954">"語音留言"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> 分 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"語音留言"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"語音留言"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"是"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"否"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g><xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-zu/strings.xml b/java/com/android/dialer/app/res/values-zu/strings.xml
index 4cee09247..840d16877 100644
--- a/java/com/android/dialer/app/res/values-zu/strings.xml
+++ b/java/com/android/dialer/app/res/values-zu/strings.xml
@@ -42,6 +42,8 @@
<string name="notification_missedCall_call_back" msgid="3875698110051973965">"Phinda ushaye"</string>
<string name="notification_missedCall_message" msgid="5086910028988305964">"Umlayezo"</string>
<string name="post_call_notification_message" msgid="5417476789860590611">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
+ <string name="notification_voicemail_text_format" msgid="1895667520930252897">"Dayela <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+ <string name="notification_voicemail_no_vm_number" msgid="8942821987929495842">"Inombolo yevoyisimeyili ayaziwa"</string>
<plurals name="notification_voicemail_title" formatted="false" msgid="1551847434476438657">
<item quantity="one"> <xliff:g id="COUNT">%1$d</xliff:g> Amavoyisimeyili </item>
<item quantity="other"> <xliff:g id="COUNT">%1$d</xliff:g> Amavoyisimeyili </item>
@@ -97,6 +99,12 @@
<string name="voicemail" msgid="8899540969000957954">"Ivoyisimeyili"</string>
<string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> isekhondi"</string>
<string name="callDetailsDurationFormat" msgid="6826204822350034578">"<xliff:g id="MINUTES">%s</xliff:g> amaminithi <xliff:g id="SECONDS">%s</xliff:g> amasekhondi"</string>
+ <string name="voicemailMultiSelectVoicemail" msgid="7792569522692927527">"ivoyisimeyili"</string>
+ <string name="voicemailMultiSelectVoicemails" msgid="3901723179158415509">"ama-meyli ezwi"</string>
+ <string name="voicemailMultiSelectDeleteConfirm" msgid="5904880853422397390">"Yebo"</string>
+ <string name="voicemailMultiSelectDeleteCancel" msgid="7340110543555172665">"Cha"</string>
+ <!-- no translation found for voicemailMultiSelectDialogTitle (150612124416146690) -->
+ <skip />
<string name="voicemailCallLogToday" msgid="709034597866788854">@string/call_log_header_today</string>
<string name="voicemailCallLogDateTimeFormat" msgid="4998985002074131268">"<xliff:g id="DATE">%1$s</xliff:g> ngo-<xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="voicemailDurationFormat" msgid="5649961568550898382">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values/strings.xml b/java/com/android/dialer/app/res/values/strings.xml
index 9944f9ff2..a4e443dca 100644
--- a/java/com/android/dialer/app/res/values/strings.xml
+++ b/java/com/android/dialer/app/res/values/strings.xml
@@ -105,6 +105,12 @@
<!-- Format for a post call message. (ex. John Doe: Give me a call when you're free.) -->
<string name="post_call_notification_message"><xliff:g id="name">%1$s</xliff:g>: <xliff:g id="message">%2$s</xliff:g></string>
+ <!-- Message displayed in the "Voicemail" notification item, allowing the user
+ to dial the indicated number. -->
+ <string name="notification_voicemail_text_format">Dial <xliff:g id="voicemail_number">%s</xliff:g></string>
+ <!-- Message displayed in the "Voicemail" notification item,
+ indicating that there's no voicemail number available -->
+ <string name="notification_voicemail_no_vm_number">Voicemail number unknown</string>
<!-- Title of the notification of new voicemails. [CHAR LIMIT=30] -->
<plurals name="notification_voicemail_title">
<item quantity="one">Voicemail</item>
@@ -356,6 +362,12 @@
<!-- A nicely formatted call duration displayed when viewing call details. For example "42 min 28 sec" -->
<string name="callDetailsDurationFormat"><xliff:g example="42" id="minutes">%s</xliff:g> min <xliff:g example="28" id="seconds">%s</xliff:g> sec</string>
+ <string name="voicemailMultiSelectVoicemail">voicemail</string>
+ <string name="voicemailMultiSelectVoicemails">voicemails</string>
+ <string name="voicemailMultiSelectDeleteConfirm">Yes</string>
+ <string name="voicemailMultiSelectDeleteCancel">No</string>
+ <string name="voicemailMultiSelectDialogTitle">Delete selected <xliff:g id="voicemailorvoicemails">%1$s</xliff:g>?</string>
+
<!-- The string 'Today'. This value is used in the voicemailCallLogDateTimeFormat rather than an
explicit date string, e.g. Jul 25, 2014, in the event that a voicemail was created on the
current day -->
diff --git a/java/com/android/dialer/app/voicemail/LegacyVoicemailNotificationReceiver.java b/java/com/android/dialer/app/voicemail/LegacyVoicemailNotificationReceiver.java
new file mode 100644
index 000000000..078a40a82
--- /dev/null
+++ b/java/com/android/dialer/app/voicemail/LegacyVoicemailNotificationReceiver.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.dialer.app.voicemail;
+
+import android.annotation.TargetApi;
+import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build.VERSION_CODES;
+import android.support.v4.os.BuildCompat;
+import android.telecom.PhoneAccount;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
+import android.telephony.TelephonyManager;
+import com.android.dialer.app.calllog.DefaultVoicemailNotifier;
+import com.android.dialer.common.Assert;
+import com.android.dialer.common.LogUtil;
+import com.android.voicemail.VoicemailComponent;
+
+/**
+ * Receives {@link TelephonyManager#ACTION_SHOW_VOICEMAIL_NOTIFICATION}, and forwards to {@link
+ * DefaultVoicemailNotifier}. Will ignore the notification if the account has visual voicemail.
+ * Legacy voicemail is the traditional, non-visual, dial-in voicemail.
+ */
+@TargetApi(VERSION_CODES.O)
+public class LegacyVoicemailNotificationReceiver extends BroadcastReceiver {
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ LogUtil.i(
+ "LegacyVoicemailNotificationReceiver.onReceive", "received legacy voicemail notification");
+ Assert.checkArgument(BuildCompat.isAtLeastO());
+
+ PhoneAccountHandle phoneAccountHandle =
+ intent.getParcelableExtra(TelephonyManager.EXTRA_PHONE_ACCOUNT_HANDLE);
+ if (phoneAccountHandle == null) {
+ // TODO: assert instead after API has landed.
+ phoneAccountHandle =
+ context
+ .getSystemService(TelecomManager.class)
+ .getDefaultOutgoingPhoneAccount(PhoneAccount.SCHEME_VOICEMAIL);
+ }
+ if (VoicemailComponent.get(context)
+ .getVoicemailClient()
+ .isActivated(context, phoneAccountHandle)) {
+ LogUtil.i(
+ "LegacyVoicemailNotificationReceiver.onReceive",
+ "visual voicemail is activated, ignoring notification");
+ return;
+ }
+
+ // Missing extra means there are unknown numbers of voicemails.
+ int count = intent.getIntExtra(TelephonyManager.EXTRA_NOTIFICATION_COUNT, 1);
+ if (count == 0) {
+ LogUtil.i("LegacyVoicemailNotificationReceiver.onReceive", "clearing notification");
+ DefaultVoicemailNotifier.getInstance(context).cancelLegacyNotification();
+ return;
+ }
+
+ String voicemailNumber = intent.getStringExtra(TelephonyManager.EXTRA_VOICEMAIL_NUMBER);
+ PendingIntent callVoicemailIntent =
+ intent.getParcelableExtra(TelephonyManager.EXTRA_CALL_VOICEMAIL_INTENT);
+ PendingIntent voicemailSettingIntent =
+ intent.getParcelableExtra(TelephonyManager.EXTRA_LAUNCH_VOICEMAIL_SETTINGS_INTENT);
+
+ LogUtil.i("LegacyVoicemailNotificationReceiver.onReceive", "sending notification");
+ DefaultVoicemailNotifier.getInstance(context)
+ .notifyLegacyVoicemail(
+ phoneAccountHandle,
+ count,
+ voicemailNumber,
+ callVoicemailIntent,
+ voicemailSettingIntent);
+ }
+}
diff --git a/java/com/android/dialer/app/voicemail/VoicemailErrorManager.java b/java/com/android/dialer/app/voicemail/VoicemailErrorManager.java
index 939007adf..a0bae36cc 100644
--- a/java/com/android/dialer/app/voicemail/VoicemailErrorManager.java
+++ b/java/com/android/dialer/app/voicemail/VoicemailErrorManager.java
@@ -20,15 +20,25 @@ import android.content.Context;
import android.database.ContentObserver;
import android.database.Cursor;
import android.os.Handler;
+import android.support.annotation.MainThread;
+import android.telecom.PhoneAccountHandle;
+import android.telephony.PhoneStateListener;
+import android.telephony.ServiceState;
+import android.telephony.TelephonyManager;
+import android.util.ArrayMap;
import com.android.dialer.app.calllog.CallLogAlertManager;
import com.android.dialer.app.calllog.CallLogModalAlertManager;
import com.android.dialer.app.voicemail.error.VoicemailErrorAlert;
import com.android.dialer.app.voicemail.error.VoicemailErrorMessageCreator;
import com.android.dialer.app.voicemail.error.VoicemailStatus;
import com.android.dialer.app.voicemail.error.VoicemailStatusReader;
+import com.android.dialer.common.Assert;
+import com.android.dialer.common.LogUtil;
import com.android.dialer.database.CallLogQueryHandler;
+import com.android.voicemail.VoicemailComponent;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
/**
* Fetches voicemail status and generate {@link VoicemailStatus} for {@link VoicemailErrorAlert} to
@@ -40,12 +50,14 @@ public class VoicemailErrorManager implements CallLogQueryHandler.Listener, Voic
private final CallLogQueryHandler callLogQueryHandler;
private final VoicemailErrorAlert alertItem;
+ private final Map<PhoneAccountHandle, ServiceStateListener> listeners = new ArrayMap<>();
+
private final ContentObserver statusObserver =
new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
- maybeFetchStatus();
+ fetchStatus();
}
};
@@ -61,13 +73,14 @@ public class VoicemailErrorManager implements CallLogQueryHandler.Listener, Voic
new VoicemailErrorAlert(
context, alertManager, modalAlertManager, new VoicemailErrorMessageCreator());
callLogQueryHandler = new CallLogQueryHandler(context, context.getContentResolver(), this);
- maybeFetchStatus();
+ fetchStatus();
}
public ContentObserver getContentObserver() {
return statusObserver;
}
+ @MainThread
@Override
public void onVoicemailStatusFetched(Cursor statusCursor) {
List<VoicemailStatus> statuses = new ArrayList<>();
@@ -75,6 +88,7 @@ public class VoicemailErrorManager implements CallLogQueryHandler.Listener, Voic
VoicemailStatus status = new VoicemailStatus(context, statusCursor);
if (status.isActive()) {
statuses.add(status);
+ addServiceStateListener(status);
}
}
alertItem.updateStatus(statuses, this);
@@ -82,6 +96,37 @@ public class VoicemailErrorManager implements CallLogQueryHandler.Listener, Voic
return;
}
+ @MainThread
+ private void addServiceStateListener(VoicemailStatus status) {
+ Assert.isMainThread();
+ if (!VoicemailComponent.get(context).getVoicemailClient().isVoicemailModuleEnabled()) {
+ LogUtil.i("VoicemailErrorManager.addServiceStateListener", "VVM module not enabled");
+ return;
+ }
+ if (!status.sourcePackage.equals(context.getPackageName())) {
+ LogUtil.i("VoicemailErrorManager.addServiceStateListener", "non-dialer source");
+ return;
+ }
+ TelephonyManager telephonyManager =
+ context
+ .getSystemService(TelephonyManager.class)
+ .createForPhoneAccountHandle(status.getPhoneAccountHandle());
+ if (telephonyManager == null) {
+ LogUtil.e("VoicemailErrorManager.addServiceStateListener", "invalid PhoneAccountHandle");
+ return;
+ }
+ PhoneAccountHandle phoneAccountHandle = status.getPhoneAccountHandle();
+ if (listeners.containsKey(phoneAccountHandle)) {
+ return;
+ }
+ LogUtil.i(
+ "VoicemailErrorManager.addServiceStateListener",
+ "adding listener for " + phoneAccountHandle);
+ ServiceStateListener serviceStateListener = new ServiceStateListener();
+ telephonyManager.listen(serviceStateListener, PhoneStateListener.LISTEN_SERVICE_STATE);
+ listeners.put(phoneAccountHandle, serviceStateListener);
+ }
+
@Override
public void onVoicemailUnreadCountFetched(Cursor cursor) {
// Do nothing
@@ -101,7 +146,7 @@ public class VoicemailErrorManager implements CallLogQueryHandler.Listener, Voic
public void onResume() {
isForeground = true;
if (statusInvalidated) {
- maybeFetchStatus();
+ fetchStatus();
}
}
@@ -110,15 +155,22 @@ public class VoicemailErrorManager implements CallLogQueryHandler.Listener, Voic
statusInvalidated = false;
}
+ public void onDestroy() {
+ TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class);
+ for (ServiceStateListener listener : listeners.values()) {
+ telephonyManager.listen(listener, PhoneStateListener.LISTEN_NONE);
+ }
+ }
+
@Override
public void refresh() {
- maybeFetchStatus();
+ fetchStatus();
}
/**
* Fetch the status when the dialer is in foreground, or queue a fetch when the dialer resumes.
*/
- private void maybeFetchStatus() {
+ private void fetchStatus() {
if (!isForeground) {
// Dialer is in the background, UI should not be updated. Reload the status when it resumes.
statusInvalidated = true;
@@ -126,4 +178,12 @@ public class VoicemailErrorManager implements CallLogQueryHandler.Listener, Voic
}
callLogQueryHandler.fetchVoicemailStatus();
}
+
+ private class ServiceStateListener extends PhoneStateListener {
+
+ @Override
+ public void onServiceStateChanged(ServiceState serviceState) {
+ fetchStatus();
+ }
+ }
}
diff --git a/java/com/android/dialer/app/voicemail/VoicemailPlaybackLayout.java b/java/com/android/dialer/app/voicemail/VoicemailPlaybackLayout.java
index 04fe7f66a..f160e024e 100644
--- a/java/com/android/dialer/app/voicemail/VoicemailPlaybackLayout.java
+++ b/java/com/android/dialer/app/voicemail/VoicemailPlaybackLayout.java
@@ -33,8 +33,8 @@ import android.widget.TextView;
import com.android.dialer.app.R;
import com.android.dialer.app.calllog.CallLogAsyncTaskUtil;
import com.android.dialer.app.calllog.CallLogListItemViewHolder;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
import java.util.Objects;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
diff --git a/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java b/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java
index 5bfa03e90..5ac487b2d 100644
--- a/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java
+++ b/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java
@@ -54,8 +54,8 @@ import com.android.dialer.common.concurrent.AsyncTaskExecutors;
import com.android.dialer.common.concurrent.DialerExecutor;
import com.android.dialer.common.concurrent.DialerExecutors;
import com.android.dialer.constants.Constants;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
import com.android.dialer.phonenumbercache.CallLogQuery;
import com.google.common.io.ByteStreams;
import java.io.File;
diff --git a/java/com/android/dialer/app/voicemail/error/OmtpVoicemailMessageCreator.java b/java/com/android/dialer/app/voicemail/error/OmtpVoicemailMessageCreator.java
index 2b19bd7bb..48602ea33 100644
--- a/java/com/android/dialer/app/voicemail/error/OmtpVoicemailMessageCreator.java
+++ b/java/com/android/dialer/app/voicemail/error/OmtpVoicemailMessageCreator.java
@@ -24,8 +24,8 @@ import android.telecom.PhoneAccountHandle;
import com.android.dialer.app.voicemail.error.VoicemailErrorMessage.Action;
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.PerAccountSharedPreferences;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
import com.android.voicemail.VoicemailClient;
import com.android.voicemail.VoicemailComponent;
import java.util.ArrayList;
@@ -184,8 +184,8 @@ public class OmtpVoicemailMessageCreator {
String title;
CharSequence message;
- int enabledImpression;
- int dismissedImpression;
+ DialerImpression.Type enabledImpression;
+ DialerImpression.Type dismissedImpression;
String dismissedKey;
if (isFull) {
@@ -237,20 +237,25 @@ public class OmtpVoicemailMessageCreator {
PerAccountSharedPreferences sharedPreferenceForAccount,
String title,
CharSequence message,
- int impressionToLogOnEnable,
- int impressionToLogOnDismiss,
+ DialerImpression.Type impressionToLogOnEnable,
+ DialerImpression.Type impressionToLogOnDismiss,
String preferenceKeyToUpdate) {
return new VoicemailErrorMessage(
title,
message,
+ VoicemailErrorMessage.createTurnArchiveOnAction(
+ context,
+ impressionToLogOnEnable,
+ status,
+ statusReader,
+ voicemailClient,
+ phoneAccountHandle),
VoicemailErrorMessage.createDismissTurnArchiveOnAction(
context,
impressionToLogOnDismiss,
statusReader,
sharedPreferenceForAccount,
- preferenceKeyToUpdate),
- VoicemailErrorMessage.createTurnArchiveOnAction(
- context, impressionToLogOnEnable, status, voicemailClient, phoneAccountHandle));
+ preferenceKeyToUpdate));
}
@Nullable
diff --git a/java/com/android/dialer/app/voicemail/error/VoicemailErrorAlert.java b/java/com/android/dialer/app/voicemail/error/VoicemailErrorAlert.java
index 628ef87eb..d045b1bd3 100644
--- a/java/com/android/dialer/app/voicemail/error/VoicemailErrorAlert.java
+++ b/java/com/android/dialer/app/voicemail/error/VoicemailErrorAlert.java
@@ -18,6 +18,7 @@ package com.android.dialer.app.voicemail.error;
import android.content.Context;
import android.support.annotation.VisibleForTesting;
+import android.text.util.Linkify;
import android.view.View;
import android.widget.TextView;
import com.android.dialer.app.alert.AlertManager;
@@ -119,6 +120,7 @@ public class VoicemailErrorAlert {
TextView tosTitle = (TextView) view.findViewById(R.id.tos_message_title);
tosTitle.setText(message.getTitle());
TextView tosDetails = (TextView) view.findViewById(R.id.tos_message_details);
+ tosDetails.setAutoLinkMask(Linkify.WEB_URLS);
tosDetails.setText(message.getDescription());
Assert.checkArgument(message.getActions().size() == 2);
diff --git a/java/com/android/dialer/app/voicemail/error/VoicemailErrorMessage.java b/java/com/android/dialer/app/voicemail/error/VoicemailErrorMessage.java
index 1ef80288b..a0dd30f0b 100644
--- a/java/com/android/dialer/app/voicemail/error/VoicemailErrorMessage.java
+++ b/java/com/android/dialer/app/voicemail/error/VoicemailErrorMessage.java
@@ -27,8 +27,8 @@ import android.view.View;
import android.view.View.OnClickListener;
import com.android.dialer.common.Assert;
import com.android.dialer.common.PerAccountSharedPreferences;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
import com.android.dialer.util.CallUtil;
import com.android.voicemail.VoicemailClient;
import com.android.voicemail.VoicemailComponent;
@@ -191,8 +191,9 @@ public class VoicemailErrorMessage {
@NonNull
public static Action createTurnArchiveOnAction(
final Context context,
- int impressionToLog,
+ DialerImpression.Type impressionToLog,
final VoicemailStatus status,
+ VoicemailStatusReader statusReader,
VoicemailClient voicemailClient,
PhoneAccountHandle phoneAccountHandle) {
return new Action(
@@ -209,6 +210,7 @@ public class VoicemailErrorMessage {
Intent intent = new Intent(VoicemailContract.ACTION_SYNC_VOICEMAIL);
intent.setPackage(status.sourcePackage);
context.sendBroadcast(intent);
+ statusReader.refresh();
}
});
}
@@ -216,7 +218,7 @@ public class VoicemailErrorMessage {
@NonNull
public static Action createDismissTurnArchiveOnAction(
final Context context,
- int impressionToLog,
+ DialerImpression.Type impressionToLog,
VoicemailStatusReader statusReader,
PerAccountSharedPreferences sharedPreferenceForAccount,
String preferenceKeyToUpdate) {
diff --git a/java/com/android/dialer/app/voicemail/error/VoicemailStatus.java b/java/com/android/dialer/app/voicemail/error/VoicemailStatus.java
index c429d6dcc..1cfbe86d0 100644
--- a/java/com/android/dialer/app/voicemail/error/VoicemailStatus.java
+++ b/java/com/android/dialer/app/voicemail/error/VoicemailStatus.java
@@ -26,8 +26,11 @@ import android.provider.Settings;
import android.provider.Settings.Global;
import android.provider.VoicemailContract.Status;
import android.support.annotation.Nullable;
+import android.support.v4.os.BuildCompat;
import android.telecom.PhoneAccountHandle;
+import android.telephony.ServiceState;
import android.telephony.TelephonyManager;
+import com.android.dialer.common.LogUtil;
import com.android.dialer.database.VoicemailStatusQuery;
/** Structured data from {@link android.provider.VoicemailContract.Status} */
@@ -60,6 +63,19 @@ public class VoicemailStatus {
settingsUri = getUri(statusCursor, VoicemailStatusQuery.SETTINGS_URI_INDEX);
voicemailAccessUri = getUri(statusCursor, VoicemailStatusQuery.VOICEMAIL_ACCESS_URI_INDEX);
+ if (VERSION.SDK_INT >= VERSION_CODES.N_MR1) {
+ type =
+ getString(
+ statusCursor, VoicemailStatusQuery.SOURCE_TYPE_INDEX, TelephonyManager.VVM_TYPE_OMTP);
+ phoneAccountComponentName =
+ getString(statusCursor, VoicemailStatusQuery.PHONE_ACCOUNT_COMPONENT_NAME, "");
+ phoneAccountId = getString(statusCursor, VoicemailStatusQuery.PHONE_ACCOUNT_ID, "");
+ } else {
+ type = TelephonyManager.VVM_TYPE_OMTP;
+ phoneAccountComponentName = "";
+ phoneAccountId = "";
+ }
+
configurationState =
getInt(
statusCursor,
@@ -70,12 +86,23 @@ public class VoicemailStatus {
statusCursor,
VoicemailStatusQuery.DATA_CHANNEL_STATE_INDEX,
Status.DATA_CHANNEL_STATE_NO_CONNECTION);
- notificationChannelState =
- getInt(
- statusCursor,
- VoicemailStatusQuery.NOTIFICATION_CHANNEL_STATE_INDEX,
- Status.NOTIFICATION_CHANNEL_STATE_NO_CONNECTION);
+ /* Before O, the NOTIFICATION_CHANNEL_STATE in the voicemail status table for the system
+ * visual voicemail client always correspond to the service state (cellular signal availability)
+ * Tracking the state in the background is redundant because it will not be visible to the
+ * user. It is much simpler to poll the status on the UI side. The result is injected back to
+ * the status query result so the handling will be consistent with other voicemail clients.
+ */
+ if (BuildCompat.isAtLeastO() && sourcePackage.equals(context.getPackageName())) {
+ notificationChannelState =
+ getNotificationChannelStateFormTelephony(context, getPhoneAccountHandle());
+ } else {
+ notificationChannelState =
+ getInt(
+ statusCursor,
+ VoicemailStatusQuery.NOTIFICATION_CHANNEL_STATE_INDEX,
+ Status.NOTIFICATION_CHANNEL_STATE_NO_CONNECTION);
+ }
isAirplaneMode =
Settings.System.getInt(context.getContentResolver(), Global.AIRPLANE_MODE_ON, 0) != 0;
@@ -88,18 +115,24 @@ public class VoicemailStatus {
quotaOccupied = Status.QUOTA_UNAVAILABLE;
quotaTotal = Status.QUOTA_UNAVAILABLE;
}
+ }
- if (VERSION.SDK_INT >= VERSION_CODES.N_MR1) {
- type =
- getString(
- statusCursor, VoicemailStatusQuery.SOURCE_TYPE_INDEX, TelephonyManager.VVM_TYPE_OMTP);
- phoneAccountComponentName =
- getString(statusCursor, VoicemailStatusQuery.PHONE_ACCOUNT_COMPONENT_NAME, "");
- phoneAccountId = getString(statusCursor, VoicemailStatusQuery.PHONE_ACCOUNT_ID, "");
+ private static int getNotificationChannelStateFormTelephony(
+ Context context, PhoneAccountHandle phoneAccountHandle) {
+ TelephonyManager telephonyManager =
+ context
+ .getSystemService(TelephonyManager.class)
+ .createForPhoneAccountHandle(phoneAccountHandle);
+ if (telephonyManager == null) {
+ LogUtil.e("VoicemailStatus.constructor", "invalid PhoneAccountHandle");
+ return Status.NOTIFICATION_CHANNEL_STATE_NO_CONNECTION;
} else {
- type = TelephonyManager.VVM_TYPE_OMTP;
- phoneAccountComponentName = "";
- phoneAccountId = "";
+ int state = telephonyManager.getServiceState().getState();
+ if (state == ServiceState.STATE_IN_SERVICE) {
+ return Status.NOTIFICATION_CHANNEL_STATE_OK;
+ } else {
+ return Status.NOTIFICATION_CHANNEL_STATE_NO_CONNECTION;
+ }
}
}
diff --git a/java/com/android/dialer/app/voicemail/error/VoicemailStatusCorruptionHandler.java b/java/com/android/dialer/app/voicemail/error/VoicemailStatusCorruptionHandler.java
index 6f411217c..2ff182b63 100644
--- a/java/com/android/dialer/app/voicemail/error/VoicemailStatusCorruptionHandler.java
+++ b/java/com/android/dialer/app/voicemail/error/VoicemailStatusCorruptionHandler.java
@@ -28,8 +28,8 @@ import com.android.contacts.common.compat.TelephonyManagerCompat;
import com.android.dialer.common.Assert;
import com.android.dialer.common.ConfigProviderBindings;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
/**
* This class will detect the corruption in the voicemail status and log it so we can track how many
diff --git a/java/com/android/dialer/app/voicemail/error/Vvm3VoicemailMessageCreator.java b/java/com/android/dialer/app/voicemail/error/Vvm3VoicemailMessageCreator.java
index d98ac2cd5..132e8a328 100644
--- a/java/com/android/dialer/app/voicemail/error/Vvm3VoicemailMessageCreator.java
+++ b/java/com/android/dialer/app/voicemail/error/Vvm3VoicemailMessageCreator.java
@@ -37,8 +37,10 @@ import com.android.contacts.common.compat.TelephonyManagerCompat;
import com.android.contacts.common.util.ContactDisplayUtils;
import com.android.dialer.app.voicemail.error.VoicemailErrorMessage.Action;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
+import com.android.voicemail.VoicemailClient;
+import com.android.voicemail.VoicemailComponent;
import java.util.Locale;
/**
@@ -379,7 +381,12 @@ public class Vvm3VoicemailMessageCreator {
@Override
public void onClick(DialogInterface dialog, int which) {
Logger.get(context).logImpression(DialerImpression.Type.VOICEMAIL_VVM3_TOS_DECLINED);
- TelephonyManagerCompat.setVisualVoicemailEnabled(telephonyManager, handle, false);
+ VoicemailClient voicemailClient = VoicemailComponent.get(context).getVoicemailClient();
+ if (voicemailClient.isVoicemailModuleEnabled()) {
+ voicemailClient.setVoicemailEnabled(context, status.getPhoneAccountHandle(), false);
+ } else {
+ TelephonyManagerCompat.setVisualVoicemailEnabled(telephonyManager, handle, false);
+ }
}
});
diff --git a/java/com/android/dialer/app/voicemail/error/res/drawable-hdpi/ic_voicemail_error_24px.png b/java/com/android/dialer/app/voicemail/error/res/drawable-hdpi/ic_voicemail_error_24px.png
new file mode 100644
index 000000000..1a5744bce
--- /dev/null
+++ b/java/com/android/dialer/app/voicemail/error/res/drawable-hdpi/ic_voicemail_error_24px.png
Binary files differ
diff --git a/java/com/android/dialer/app/voicemail/error/res/drawable-mdpi/ic_voicemail_error_24px.png b/java/com/android/dialer/app/voicemail/error/res/drawable-mdpi/ic_voicemail_error_24px.png
new file mode 100644
index 000000000..9936f0be6
--- /dev/null
+++ b/java/com/android/dialer/app/voicemail/error/res/drawable-mdpi/ic_voicemail_error_24px.png
Binary files differ
diff --git a/java/com/android/dialer/app/voicemail/error/res/drawable-xhdpi/ic_voicemail_error_24px.png b/java/com/android/dialer/app/voicemail/error/res/drawable-xhdpi/ic_voicemail_error_24px.png
new file mode 100644
index 000000000..9eff40989
--- /dev/null
+++ b/java/com/android/dialer/app/voicemail/error/res/drawable-xhdpi/ic_voicemail_error_24px.png
Binary files differ
diff --git a/java/com/android/dialer/app/voicemail/error/res/drawable-xxhdpi/ic_voicemail_error_24px.png b/java/com/android/dialer/app/voicemail/error/res/drawable-xxhdpi/ic_voicemail_error_24px.png
new file mode 100644
index 000000000..5b25f7300
--- /dev/null
+++ b/java/com/android/dialer/app/voicemail/error/res/drawable-xxhdpi/ic_voicemail_error_24px.png
Binary files differ
diff --git a/java/com/android/dialer/app/voicemail/error/res/drawable-xxxhdpi/ic_voicemail_error_24px.png b/java/com/android/dialer/app/voicemail/error/res/drawable-xxxhdpi/ic_voicemail_error_24px.png
new file mode 100644
index 000000000..d47ee4cdc
--- /dev/null
+++ b/java/com/android/dialer/app/voicemail/error/res/drawable-xxxhdpi/ic_voicemail_error_24px.png
Binary files differ
diff --git a/java/com/android/dialer/app/voicemail/error/res/layout/voicemail_error_message_fragment.xml b/java/com/android/dialer/app/voicemail/error/res/layout/voicemail_error_message_fragment.xml
index 4a40857a0..4bea8b152 100644
--- a/java/com/android/dialer/app/voicemail/error/res/layout/voicemail_error_message_fragment.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/layout/voicemail_error_message_fragment.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
+<!-- Copyright (C) 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,99 +14,98 @@
limitations under the License.
-->
<android.support.v7.widget.CardView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/error_card"
- style="@style/CallLogCardStyle"
- android:gravity="center_vertical"
- android:orientation="vertical">
-
- <LinearLayout
- android:id="@+id/error_card_content"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/error_card"
+ style="@style/CallLogCardStyle"
+ android:gravity="center_vertical"
android:orientation="vertical">
- <LinearLayout
+ <LinearLayout
+ android:id="@+id/error_card_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/alert_main_padding"
- android:layout_marginStart="@dimen/alert_main_padding"
- android:layout_marginEnd="@dimen/alert_main_padding"
- android:gravity="center_vertical"
android:orientation="vertical">
- <TextView
- android:id="@+id/error_card_header"
- android:textStyle="bold"
- android:layout_width="wrap_content"
+ <LinearLayout
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="@dimen/alert_title_padding"
- android:layout_gravity="center_vertical"
- android:singleLine="false"
- android:textColor="@color/primary_text_color"
- android:textSize="@dimen/call_log_primary_text_size"/>
+ android:paddingTop="@dimen/alert_main_padding"
+ android:paddingBottom="@dimen/alert_main_padding"
+ android:paddingStart="@dimen/alert_main_padding"
+ android:paddingEnd="@dimen/alert_main_padding"
+ android:gravity="top"
+ android:orientation="horizontal">
- <TextView
- android:id="@+id/error_card_details"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:lineSpacingExtra="@dimen/alert_line_spacing"
- android:singleLine="false"
- android:textColor="@color/secondary_text_color"
- android:textSize="@dimen/call_log_detail_text_size"/>
+ <ImageView
+ android:id="@+id/voicemail_promo_card_icon"
+ android:layout_width="@dimen/voicemail_promo_card_icon_size"
+ android:layout_height="@dimen/voicemail_promo_card_icon_size"
+ android:layout_gravity="top"
+ android:src="@drawable/ic_voicemail_error_24px"/>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/voicemail_promo_card_main_padding"
+ android:gravity="center_vertical"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/error_card_header"
+ android:textStyle="bold"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="@dimen/voicemail_promo_card_title_padding"
+ android:layout_gravity="center_vertical"
+ android:singleLine="false"
+ android:textSize="@dimen/voicemail_promo_card_title_text_size"/>
+
+ <TextView
+ android:id="@+id/error_card_details"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:lineSpacingExtra="@dimen/voicemail_promo_card_line_spacing"
+ android:singleLine="false"
+ android:textSize="@dimen/voicemail_promo_card_message_size"/>
+ </LinearLayout>
</LinearLayout>
<LinearLayout
- android:id="@+id/error_actions"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="20dp"
- android:paddingTop="@dimen/alert_action_vertical_padding"
- android:paddingBottom="@dimen/alert_action_vertical_padding"
- android:paddingStart="@dimen/alert_action_horizontal_padding"
- android:paddingEnd="@dimen/alert_action_horizontal_padding"
- android:gravity="start"
- android:orientation="horizontal">
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="@dimen/voicemail_promo_card_action_vertical_padding"
+ android:paddingBottom="@dimen/voicemail_promo_card_action_vertical_padding"
+ android:paddingEnd="@dimen/voicemail_promo_card_action_end_padding"
+ android:gravity="end"
+ android:orientation="horizontal">
<TextView
- android:id="@+id/primary_action_raised"
- style="@style/RaisedErrorActionStyle"
- android:nextFocusLeft="@+id/promo_card"
- android:nextFocusRight="@+id/primary_action"
- android:clickable="true"
- />
+ android:id="@+id/secondary_action_raised"
+ style="@style/RaisedErrorActionStyle"
+ android:paddingEnd="@dimen/alert_action_between_padding"
+ android:layout_marginEnd="8dp"
+ android:nextFocusForward="@+id/secondary_action"
+ android:clickable="true"/>
<TextView
- android:id="@+id/primary_action"
- style="@style/ErrorActionStyle"
- android:background="?android:attr/selectableItemBackground"
- android:nextFocusLeft="@+id/promo_card"
- android:nextFocusRight="@+id/secondary_action"
- android:clickable="true"
- />
+ android:id="@+id/secondary_action"
+ style="@style/ErrorActionStyle"
+ android:paddingEnd="@dimen/voicemail_promo_card_action_between_padding"
+ android:background="?android:attr/selectableItemBackground"
+ android:nextFocusForward="@+id/primary_action"/>
<TextView
- android:id="@+id/secondary_action"
- style="@style/ErrorActionStyle"
- android:paddingEnd="@dimen/alert_action_between_padding"
- android:background="?android:attr/selectableItemBackground"
- android:nextFocusLeft="@+id/primary_action"
- android:nextFocusRight="@+id/promo_card"
- android:clickable="true"/>
-
- <android.support.v4.widget.Space
- android:layout_width="0dp"
- android:layout_height="match_parent"
- android:layout_weight="1"/>
+ android:id="@+id/primary_action"
+ style="@style/ErrorActionStyle"
+ android:background="?android:attr/selectableItemBackground"
+ android:nextFocusForward="@+id/primary_action_raised"/>
<TextView
- android:id="@+id/secondary_action_raised"
- style="@style/RaisedErrorActionStyle"
- android:paddingEnd="@dimen/alert_action_between_padding"
- android:layout_marginEnd="8dp"
- android:nextFocusLeft="@+id/primary_action"
- android:nextFocusRight="@+id/promo_card"
- android:clickable="true"/>
+ android:id="@+id/primary_action_raised"
+ style="@style/RaisedErrorActionStyle"
+ android:nextFocusForward="@+id/promo_card"
+ android:clickable="true"
+ />
</LinearLayout>
</LinearLayout>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-af/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-af/strings.xml
index 77f132136..9c64735af 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-af/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-af/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Jy sal nie nuwe stemboodskappe kan ontvang as jou inkassie vol is nie."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Kan nie nuwe stemboodskappe ontvang nie"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Jou inkassie is vol. Probeer \'n paar boodskappe uitvee om nuwe stemboodskappe te ontvang."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Eksperimenteel] Skakel ekstra berging en rugsteun aan"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Jou posbus is vol. Maak spasie beskikbaar deur ekstra berging aan te skakel sodat Google jou stemboodskappe kan bestuur en rugsteun. "<b><i>"Hierdie kenmerk word tans getoets "</i></b>"en kan potensieel stemboodskappe van jou stemboodskapbediener af uitvee. Ons belowe ook nie om hierdie kenmerk in die toekoms te steun nie. Ons sal egter graag jou terugvoer wil kry."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Eksperimenteel] Skakel ekstra berging en rugsteun aan"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Jou posbus is amper vol. Maak spasie beskikbaar deur ekstra berging aan te skakel sodat Google jou stemboodskappe kan bestuur en rugsteun. "<b><i>"Hierdie kenmerk word tans getoets "</i></b>"en kan potensieel stemboodskappe van jou stemboodskapbediener af uitvee. Ons belowe ook nie om hierdie kenmerk in die toekoms te steun nie. Ons sal egter graag jou terugvoer wil kry."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Skakel ekstra berging en rugsteun aan"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Jou posbus is vol. Om spasie beskikbaar te maak, skakel ekstra berging aan sodat Google jou stemboodskappe kan bestuur en rugsteun."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Skakel ekstra berging en rugsteun aan"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Jou posbus is amper vol. Om spasie beskikbaar te maak, skakel ekstra berging aan sodat Google jou stemboodskappe kan bestuur en rugsteun."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Stel jou stemboodskap-PIN"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Jy sal \'n stemboodskap-PIN nodig hê wanneer jy ook al na jou stemboodskapdiens toe bel."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Onbekende fout"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-am/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-am/strings.xml
index 60851a655..502b87304 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-am/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-am/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"የገቢ መልዕክት ሳጥንዎ ሙሉ ከሆነ አዲስ የድምጽ መልዕክት መቀበል አይችሉም።"</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"አዲስ የድምጽ መልዕክት መቀበል አይቻልም"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"የመልዕክት ሳጥንዎ ሙሉ ነው። አዲስ የድምጽ መልዕክት ለመቀበል የተወሰኑ መልዕክቶችን ለመሰረዝ ይሞክሩ።"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[የሙከራ] ተጨማሪ ማከማቻ እና ምትኬን ያብሩ"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"የመልዕክት ሳጥንዎ ሙሉ ነው። ቦታ ነጻ ለማድረግ፣ ተጨማሪ ማከማቻ ያብሩ እና Google የእርስዎን የድምፅ መልዕክት ማስተዳደር እና ምትኬ ማድረግ ይችላል። "<b><i>"ይህ ባህሪይ በአሁኑ ጊዜ እየተሞከሩ ነው "</i></b>"እናም ምናልባት ከድምፅ መልዕክት አገልጋይዎ የድምፅ መልዕክቶችን ሊሰርዝ ይችላል፣ እንዲሁም ለወደፊቱ ይህን ባህሪ ለመደገፍ ቃል አንገባም። ነገር ግን ግብረመልስዎን ብናገኝ እንወዳለን።"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[የሙከራ] ተጨማሪ ማከማቻ እና ምትኬን ያብሩ"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"የመልዕክት ሳጥንዎ ከሞላ ጎደል ሙሉ ነው። ቦታ ነጻ ለማድረግ፣ ተጨማሪ ማከማቻ ያብሩ እና Google የእርስዎን የድምፅ መልዕክት ማስተዳደር እና ምትኬ ማድረግ ይችላል። "<b><i>"ይህ ባህሪይ በአሁኑ ጊዜ እየተሞከሩ ነው "</i></b>"እናም ምናልባት ከድምፅ መልዕክት አገልጋይዎ የድምፅ መልዕክቶችን ሊሰርዝ ይችላል፣ እንዲሁም ለወደፊቱ ይህን ባህሪ ለመደገፍ ቃል አንገባም። ነገር ግን ግብረመልስዎን ብናገኝ እንወዳለን።"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"ትርፍ ማከማቻ እና ምትኬን ያብሩ"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"የእርስዎ የመልእክት ሳጥን ሙሉ ነው። ባዶ ቦታ ነጻ ለማድረግ፣ Google የእርስዎን የድምፅ መልእክቶች ማስተዳደር እና በምትኬ ማስቀመጥ እንዲችል ትርፍ ማከማቻን ያብሩ።"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"ትርፍ ማከማቻ እና ምትኬን ያብሩ"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"የእርስዎ የመልእክት ሳጥን ሙሉ ነው። ባዶ ቦታ ነጻ ለማድረግ፣ Google የእርስዎን የድምፅ መልእክቶች ማስተዳደር እና በምትኬ ማስቀመጥ እንዲችል ትርፍ ማከማቻን ያብሩ።"</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"የድምፅ መልዕክት ፒንዎን ያስገቡ"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"በማንኛውም ጊዜ የድምፅ መልዕክትዎ ላይ ለመድረስ ሲደውሉ የድምፅ መልዕክት ፒን ያስፈልግዎታል።"</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"ያልታወቀ ስህተት"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-ar/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-ar/strings.xml
index d2c0fe697..6d462ef41 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-ar/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-ar/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"لن تتمكن من تلقي بريد صوتي جديد إذا امتلأ بريدك الوارد."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"يتعذر تلقي رسائل بريد صوتي جديدة"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"بريدك الوارد ممتلئ. حاول حذف بعض الرسائل لتلقي رسائل بريد صوتي جديدة."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[ميزة تجريبية] تشغيل سعة التخزين الإضافية والنسخ الاحتياطي"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"‏صندوق بريدك ممتلئ. للحصول على بعض المساحة، يمكنك تشغيل سعة التخزين الإضافية حتى يمكن لحساب Google إدارة رسائل البريد الصوتي ونسخها احتياطيًا. "<b><i>"هذه الميزة قيد الاختبار حاليًا "</i></b>" وقد تؤدي إلى حذف رسائل البريد الصوتي من خادم البريد الصوتي، ونحن لا نعد بدعم هذه الميزة في المستقبل. إلا أننا نود الحصول على تعليقات منك."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[ميزة تجريبية] تشغيل سعة التخزين الإضافية والنسخ الاحتياطي"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"‏صندوق بريدك ممتلئ تقريبًا. للحصول على بعض المساحة، يمكنك تشغيل سعة التخزين الإضافية حتى يمكن لحساب Google إدارة رسائل البريد الصوتي ونسخها احتياطيًا. "<b><i>"هذه الميزة قيد الاختبار حاليًا "</i></b>"وقد تؤدي إلى حذف رسائل البريد الصوتي من خادم البريد الصوتي، ونحن لا نعد بدعم هذه الميزة في المستقبل. إلا أننا نود الحصول على تعليقات منك."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"تشغيل سعة التخزين الإضافية والنسخ الاحتياطي"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"‏صندوق بريدك ممتلئ. للحصول على بعض المساحة، ينبغي تشغيل سعة التخزين الإضافية حتى يتمكن Google من إدارة رسائل البريد الصوتي ونسخها احتياطيًا."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"تشغيل سعة التخزين الإضافية والنسخ الاحتياطي"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"‏صندوق بريدك ممتلئ. للحصول على بعض المساحة، ينبغي تشغيل سعة التخزين الإضافية حتى يتمكن Google من إدارة رسائل البريد الصوتي ونسخها احتياطيًا."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"إعداد رقم التعريف الشخصي للبريد الصوتي"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"ستحتاج رقم تعريف شخصي للبريد الصوتي في كل مرة تتصل فيها للوصول إلى بريدك الصوتي."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"حدث خطأ غير معروف"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-az/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-az/strings.xml
index aea92bf97..33ddafa0a 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-az/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-az/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Gələnlər qutusu dolu olduqda, yeni səsli mesaj almaq olmayacaq."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Yeni səsli mesaj almaq olmur"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Gələnlər qutusu doludur. Yeni səsli mesaj əldə etmək üçün bəzi mesajları silin."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Eksperimental] Əlavə yaddaş və yedəkləməni aktiv edin"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"E-poçt qutusu doludur. Boş yer yaratmaq üçün əlavə yaddaşı aktiv edin, beləliklə Google səsli e-məktub mesajlarını idarə edə və yedəkləyə bilər. "<b><i>"Bu funksiya hazırda yoxlanılır "</i></b>"və səsli e-poçt serverindən səsli e-məktubları potensial olaraq siləcək, gələcəkdə bu funksiyanı dəstəkləməyə söz vermirik. Lakin əks əlaqənizi istərdik."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Eksperimental] Əlavə yaddaş və yedəkləməni aktiv edin"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"E-poçt qutusu demək olar ki, doludur. Boş yer yaratmaq üçün əlavə yaddaşı aktiv edin, beləliklə Google səsli e-məktub mesajlarını idarə edə və yedəkləyə bilər. "<b><i>"Bu funksiya hazırda yoxlanılır "</i></b>"və səsli e-poçt serverindən səsli e-məktubları potensial olaraq siləcək, gələcəkdə bu funksiyanı dəstəkləməyə söz vermirik. Lakin əks əlaqənizi istərdik."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Əlavə yaddaş və yedəkləməni aktiv edin"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"E-poçt qutusu doludur. Boş yer yaratmaq üçün əlavə yaddaşı aktiv edin, beləliklə Google səsli e-məktub mesajlarını idarə edə və yedəkləyə bilər."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Əlavə yaddaş və yedəkləməni aktiv edin"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"E-poçt qutusu artıq doludur. Boş yer yaratmaq üçün əlavə yaddaşı aktiv edin, beləliklə Google səsli e-məktub mesajlarını idarə edə və yedəkləyə bilər."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Səsli mesaj PIN kodunu ayarlayın"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Zəng etdiyiniz zaman səsli mesaja daxil olmaq üçün PIN koda ehtiyacınız olacaq."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Naməlum xəta"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..98dc0619d
--- /dev/null
+++ b/java/com/android/dialer/app/voicemail/error/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2016 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="voicemail_error_turn_off_airplane_mode_title" msgid="335011175933917603">"Isključite režim rada u avionu"</string>
+ <string name="voicemail_error_activating_title" msgid="2428457130578359186">"Aktivira se vizuelna govorna pošta"</string>
+ <string name="voicemail_error_activating_message" msgid="7157030596259443393">"Možda nećete dobijati obaveštenja o govornoj pošti dok potpuno ne aktivirate vizuelnu govornu poštu. Pozovite govornu poštu da biste preuzeli nove poruke dok govorna pošta ne bude potpuno aktivirana."</string>
+ <string name="voicemail_error_not_activate_no_signal_title" msgid="742273366199085615">"Aktiviranje vizuelne govorne pošte nije uspelo"</string>
+ <string name="voicemail_error_not_activate_no_signal_message" msgid="4511975927252363280">"Proverite da li telefon ima mobilnu vezu i pokušajte ponovo."</string>
+ <string name="voicemail_error_not_activate_no_signal_airplane_mode_message" msgid="2005255281543281215">"Isključite režim rada u avionu i pokušajte ponovo."</string>
+ <string name="voicemail_error_no_signal_title" msgid="341954685733680219">"Veza nije uspostavljena"</string>
+ <string name="voicemail_error_no_signal_message" msgid="8557509373166292640">"Nećete dobijati obaveštenja o novim govornim porukama. Ako ste na Wi-Fi mreži, sinhronizujte da biste proverili govornu poštu."</string>
+ <string name="voicemail_error_no_signal_airplane_mode_message" msgid="8553646558282754276">"Nećete dobijati obaveštenja o novim govornim porukama. Isključite režim rada u avionu da biste sinhronizovali govornu poštu."</string>
+ <string name="voicemail_error_no_signal_cellular_required_message" msgid="8461294934887808098">"Telefonu treba mobilna veza za prenos podataka da biste proverili govornu poštu."</string>
+ <string name="voicemail_error_activation_failed_title" msgid="3823477898681399391">"Aktiviranje vizuelne govorne pošte nije uspelo"</string>
+ <string name="voicemail_error_activation_failed_message" msgid="2188301459207765442">"I dalje možete da pozovete govornu poštu da biste je proverili."</string>
+ <string name="voicemail_error_no_data_title" msgid="8127858252892092732">"Ažuriranje vizuelne govorne pošte nije uspelo"</string>
+ <string name="voicemail_error_no_data_message" msgid="3723828868450752165">"Probajte ponovo kad budete imali bolju Wi-Fi ili mobilnu vezu. I dalje možete da pozovete govornu poštu da biste je proverili."</string>
+ <string name="voicemail_error_no_data_cellular_required_message" msgid="2952045163270555699">"Probajte ponovo kad budete imali bolju mobilnu vezu za prenos podataka. I dalje možete da pozovete govornu poštu da biste je proverili."</string>
+ <string name="voicemail_error_bad_config_title" msgid="527594487104462966">"Ažuriranje vizuelne govorne pošte nije uspelo"</string>
+ <string name="voicemail_error_bad_config_message" msgid="2692955418930476771">"I dalje možete da pozovete govornu poštu da biste je proverili."</string>
+ <string name="voicemail_error_communication_title" msgid="9183339646110368169">"Ažuriranje vizuelne govorne pošte nije uspelo"</string>
+ <string name="voicemail_error_communication_message" msgid="1226746423005179379">"I dalje možete da pozovete govornu poštu da biste je proverili."</string>
+ <string name="voicemail_error_server_connection_title" msgid="3036980885397552848">"Ažuriranje vizuelne govorne pošte nije uspelo"</string>
+ <string name="voicemail_error_server_connection_message" msgid="6008577624710159550">"I dalje možete da pozovete govornu poštu da biste je proverili."</string>
+ <string name="voicemail_error_server_title" msgid="5355286554022049134">"Ažuriranje vizuelne govorne pošte nije uspelo"</string>
+ <string name="voicemail_error_server_message" msgid="3538157415413084592">"I dalje možete da pozovete govornu poštu da biste je proverili."</string>
+ <string name="voicemail_error_inbox_near_full_title" msgid="7568681773644454672">"Prijemno sanduče je skoro puno"</string>
+ <string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Nećete moći da primate novu govornu poštu ako je prijemno sanduče puno."</string>
+ <string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Ne možete da primate nove govorne poruke"</string>
+ <string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Prijemno sanduče je puno. Izbrišite neke poruke da biste primili novu govornu poštu."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Uključite dodatni memorijski prostor i rezervne kopije"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Poštansko sanduče je puno. Da biste oslobodili prostor, uključite dodatni memorijski prostor, pa će Google moći da upravlja vašim govornim porukama i pravi njihove rezervne kopije."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Uključite dodatni memorijski prostor i rezervne kopije"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Poštansko sanduče je skoro puno. Da biste oslobodili prostor, uključite dodatni memorijski prostor, pa će Google moći da upravlja vašim govornim porukama i pravi njihove rezervne kopije."</string>
+ <string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Podesite PIN govorne pošte"</string>
+ <string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"PIN govorne pošte vam treba svaki put kad upućujete poziv da biste pristupili govornoj pošti."</string>
+ <string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Nepoznata greška"</string>
+ <string name="voicemail_action_turn_off_airplane_mode" msgid="6905706401164671086">"Podešavanja režima rada u avionu"</string>
+ <string name="voicemail_action_set_pin" msgid="958510049866316228">"Podesi PIN"</string>
+ <string name="voicemail_action_retry" msgid="4450307484541052511">"Probaj ponovo"</string>
+ <string name="voicemail_action_turn_archive_on" msgid="6008444955560830591">"Uključi"</string>
+ <string name="voicemail_action_dimiss" msgid="6018415798136796966">"Ne, hvala"</string>
+ <string name="voicemail_action_sync" msgid="5139315923415392787">"Sinhronizuj"</string>
+ <string name="voicemail_action_call_voicemail" msgid="6701710720535556395">"Pozovi govornu poštu"</string>
+ <string name="voicemail_action_call_customer_support" msgid="7698973007656462748">"Pozovi korisničku podršku"</string>
+ <string name="vvm3_error_vms_dns_failure_title" msgid="7561818769198666727">"Nešto nije u redu"</string>
+ <string name="vvm3_error_vms_dns_failure_message" msgid="4284259553458502369">"Žao nam je, naišli smo na problem. Probajte ponovo kasnije. Ako i dalje bude problema, kontaktirajte korisničku podršku na <xliff:g id="NUMBER">%1$s</xliff:g> i recite im da je kôd greške 9001."</string>
+ <string name="vvm3_error_vmg_dns_failure_title" msgid="6257196468618464574">"Nešto nije u redu"</string>
+ <string name="vvm3_error_vmg_dns_failure_message" msgid="7110154996415009499">"Žao nam je, naišli smo na problem. Probajte ponovo kasnije. Ako i dalje bude problema, kontaktirajte korisničku podršku na <xliff:g id="NUMBER">%1$s</xliff:g> i recite im da je kôd greške 9002."</string>
+ <string name="vvm3_error_spg_dns_failure_title" msgid="8670172138011171697">"Nešto nije u redu"</string>
+ <string name="vvm3_error_spg_dns_failure_message" msgid="6780011498675342391">"Žao nam je, naišli smo na problem. Probajte ponovo kasnije. Ako i dalje bude problema, kontaktirajte korisničku podršku na <xliff:g id="NUMBER">%1$s</xliff:g> i recite im da je kôd greške 9003."</string>
+ <string name="vvm3_error_vms_no_cellular_title" msgid="5402891018307856824">"Povezivanje sa sandučetom govorne pošte nije uspelo"</string>
+ <string name="vvm3_error_vms_no_cellular_message" msgid="6671769320769351896">"Žao nam je, imamo probleme pri povezivanju sa sandučetom govorne pošte. Ako ste u oblasti sa slabim signalom, sačekajte dok ne budete imali jak signal i pokušajte ponovo. Ako i dalje bude problema, kontaktirajte korisničku podršku na <xliff:g id="NUMBER">%1$s</xliff:g> i recite im da je kôd greške 9004."</string>
+ <string name="vvm3_error_vmg_no_cellular_title" msgid="7974884412395827829">"Povezivanje sa sandučetom govorne pošte nije uspelo"</string>
+ <string name="vvm3_error_vmg_no_cellular_message" msgid="4591495395224161921">"Žao nam je, imamo probleme pri povezivanju sa sandučetom govorne pošte. Ako ste u oblasti sa slabim signalom, sačekajte dok ne budete imali jak signal i pokušajte ponovo. Ako i dalje bude problema, kontaktirajte korisničku podršku na <xliff:g id="NUMBER">%1$s</xliff:g> i recite im da je kôd greške 9005."</string>
+ <string name="vvm3_error_spg_no_cellular_title" msgid="8175349498869951939">"Povezivanje sa sandučetom govorne pošte nije uspelo"</string>
+ <string name="vvm3_error_spg_no_cellular_message" msgid="7902149969965747111">"Žao nam je, imamo probleme pri povezivanju sa sandučetom govorne pošte. Ako ste u oblasti sa slabim signalom, sačekajte dok ne budete imali jak signal i pokušajte ponovo. Ako i dalje bude problema, kontaktirajte korisničku podršku na <xliff:g id="NUMBER">%1$s</xliff:g> i recite im da je kôd greške 9006."</string>
+ <string name="vvm3_error_vms_timeout_title" msgid="4044531581957597519">"Nešto nije u redu"</string>
+ <string name="vvm3_error_vms_timeout_message" msgid="2997890600174252849">"Žao nam je, naišli smo na problem. Probajte ponovo kasnije. Ako i dalje bude problema, kontaktirajte korisničku podršku na <xliff:g id="NUMBER">%1$s</xliff:g> i recite im da je kôd greške 9007."</string>
+ <string name="vvm3_error_vmg_timeout_title" msgid="2631426958078372779">"Nešto nije u redu"</string>
+ <string name="vvm3_error_vmg_timeout_message" msgid="8366857300952305567">"Žao nam je, naišli smo na problem. Probajte ponovo kasnije. Ako i dalje bude problema, kontaktirajte korisničku podršku na <xliff:g id="NUMBER">%1$s</xliff:g> i recite im da je kôd greške 9008."</string>
+ <string name="vvm3_error_status_sms_timeout_title" msgid="6528532085593533049">"Nešto nije u redu"</string>
+ <string name="vvm3_error_status_sms_timeout_message" msgid="9079367624352316780">"Žao nam je, imamo probleme pri podešavanju usluge. Probajte ponovo kasnije. Ako i dalje bude problema, kontaktirajte korisničku podršku na <xliff:g id="NUMBER">%1$s</xliff:g> i recite im da je kôd greške 9009."</string>
+ <string name="vvm3_error_subscriber_blocked_title" msgid="3650932081111129710">"Povezivanje sa sandučetom govorne pošte nije uspelo"</string>
+ <string name="vvm3_error_subscriber_blocked_message" msgid="5162479488602796264">"Žao nam je, trenutno ne možemo da se povežemo sa sandučetom govorne pošte. Probajte ponovo kasnije. Ako i dalje bude problema, kontaktirajte korisničku podršku na <xliff:g id="NUMBER">%1$s</xliff:g> i recite im da je kôd greške 9990."</string>
+ <string name="vvm3_error_unknown_user_title" msgid="3908082247867523916">"Podesite govornu poštu"</string>
+ <string name="vvm3_error_unknown_user_message" msgid="1509539640475335686">"Govorna pošta nije podešena na nalogu. Kontaktirajte korisničku podršku na <xliff:g id="NUMBER">%1$s</xliff:g> i recite im da je kôd greške 9991."</string>
+ <string name="vvm3_error_unknown_device_title" msgid="1894628172321293169">"Govorna pošta"</string>
+ <string name="vvm3_error_unknown_device_message" msgid="5653639091623486217">"Ne možete da koristite Vizuelnu govornu poštu na ovom uređaju. Kontaktirajte korisničku podršku na <xliff:g id="NUMBER">%1$s</xliff:g> i recite im da je kôd greške 9992."</string>
+ <string name="vvm3_error_invalid_password_title" msgid="4552360498026788519">"Nešto nije u redu"</string>
+ <string name="vvm3_error_invalid_password_message" msgid="7203223289526274700">"Kontaktirajte korisničku podršku na <xliff:g id="NUMBER">%1$s</xliff:g> i recite im da je kôd greške 9993."</string>
+ <string name="vvm3_error_mailbox_not_initialized_title" msgid="7903951619707049472">"Vizuelna govorna pošta"</string>
+ <string name="vvm3_error_mailbox_not_initialized_message" msgid="6411209982463628638">"Da biste završili podešavanje Vizuelne govorne pošte, kontaktirajte korisničku podršku na <xliff:g id="NUMBER">%1$s</xliff:g> i recite im da je kôd greške 9994."</string>
+ <string name="vvm3_error_service_not_provisioned_title" msgid="6200721664168681357">"Vizuelna govorna pošta"</string>
+ <string name="vvm3_error_service_not_provisioned_message" msgid="2652652017548677049">"Da biste završili podešavanje Vizuelne govorne pošte, kontaktirajte korisničku podršku na <xliff:g id="NUMBER">%1$s</xliff:g> i recite im da je kôd greške 9995."</string>
+ <string name="vvm3_error_service_not_activated_title" msgid="8223482379756083354">"Vizuelna govorna pošta"</string>
+ <string name="vvm3_error_service_not_activated_message" msgid="3877179443583231620">"Da biste aktivirali Vizuelnu govornu poštu, kontaktirajte korisničku podršku na <xliff:g id="NUMBER">%1$s</xliff:g> i recite im da je kôd greške 9996."</string>
+ <string name="vvm3_error_user_blocked_title" msgid="3182280563102274326">"Nešto nije u redu"</string>
+ <string name="vvm3_error_user_blocked_message" msgid="5006388183845631086">"Da biste završili podešavanje Vizuelne govorne pošte, kontaktirajte korisničku podršku na <xliff:g id="NUMBER">%1$s</xliff:g> i recite im da je kôd greške 9998."</string>
+ <string name="vvm3_error_subscriber_unknown_title" msgid="2327013918755472131">"Vizuelna govorna pošta je onemogućena"</string>
+ <string name="vvm3_error_subscriber_unknown_message" msgid="7991526423950940698">"Kontaktirajte korisničku podršku na <xliff:g id="NUMBER">%1$s</xliff:g> da biste aktivirali vizuelnu govornu poštu."</string>
+ <string name="vvm3_error_imap_getquota_error_title" msgid="2229474251543811881">"Nešto nije u redu"</string>
+ <string name="vvm3_error_imap_getquota_error_message" msgid="4266777005393484563">"Kontaktirajte korisničku podršku na <xliff:g id="NUMBER">%1$s</xliff:g> i recite im da je kôd greške 9997."</string>
+ <string name="vvm3_error_imap_select_error_title" msgid="688468464562761731">"Nešto nije u redu"</string>
+ <string name="vvm3_error_imap_select_error_message" msgid="7535508175537847085">"Kontaktirajte korisničku podršku na <xliff:g id="NUMBER">%1$s</xliff:g> i recite im da je kôd greške 9989."</string>
+ <string name="vvm3_error_imap_error_title" msgid="1952971680250515832">"Nešto nije u redu"</string>
+ <string name="vvm3_error_imap_error_message" msgid="6668651261796655388">"Kontaktirajte korisničku podršku na <xliff:g id="NUMBER">%1$s</xliff:g> i recite im da je kôd greške 9999."</string>
+ <string name="verizon_terms_and_conditions_title" msgid="9074967311276321500">"Uslovi i odredbe za vizuelnu govornu poštu"</string>
+ <string name="verizon_terms_and_conditions_message" msgid="271780225159084419">"Morate da prihvatite Verizon Wireless uslove i odredbe da biste koristili vizuelnu govornu poštu:\n\n%s"</string>
+ <string name="verizon_terms_and_conditions_decline_dialog_message" msgid="7852059293806766767">"Ako odbijete uslove i odredbe, onemogućićete vizuelnu govornu poštu."</string>
+ <string name="verizon_terms_and_conditions_decline_dialog_downgrade" msgid="8347128304508008823">"Onemogućite vizuelnu govornu poštu"</string>
+ <string name="verizon_terms_and_conditions_decline_set_pin_dialog_message" msgid="2200388197966526000">"Govornoj pošti ćete moći da pristupite samo ako pozovete *86. Podesite novi PIN kôd govorne pošte da biste nastavili."</string>
+ <string name="verizon_terms_and_conditions_decline_set_pin_dialog_set_pin" msgid="4320664492466296770">"Podesite PIN"</string>
+</resources>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-be/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-be/strings.xml
index 2ab2a5c9a..50f32af4f 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-be/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-be/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Вы не зможаце атрымліваць новыя галасавыя паведамленні, калі ваша папка ўваходных поўная."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Немагчыма атрымліваць новыя галасавыя паведамленні"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Ваша папка ўваходных запоўнена. Паспрабуйце выдаліць некалькі паведамленняў, каб атрымаць новую галасавую пошту."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Эксперыментальна] Уключыць дадатковае сховішча і рэзервовае капіраванне"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Ваша паштовая скрыня запоўнена. Каб вызваліць месца, уключыце дадатковае сховішча, каб Google мог кіраваць вашымі паведамленнямі галасавой пошты і рабіць іх рэзервовую копію. "<b><i>"Гэта характарыстыка тэсціруецца "</i></b>"і патэнцыяльна будзе выдаляць паведамленні галасавой пошты з вашага сервера галасавой пошты, але мы не абяцаем, што будзем падтрымліваць яе ў будучым. Але мы будзем вельмі ўдзячны за водгукі на гэту характарыстыку."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Эксперыментальна] Уключыць дадатковае сховішча і рэзервовае капіраванне"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Ваша паштовая скрыня запоўнена. Каб вызваліць месца, уключыце дадатковае сховішча, каб Google мог кіраваць вашымі паведамленнямі галасавой пошты і рабіць іх рэзервовую копію. "<b><i>"Гэта характарыстыка тэсціруецца "</i></b>"і патэнцыяльна будзе выдаляць паведамленні галасавой пошты з вашага сервера галасавой пошты, але мы не абяцаем, што будзем падтрымліваць яе ў будучым. Але мы будзем вельмі ўдзячны за водгукі на гэту характарыстыку."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Уключыць дадатковае сховішча і рэзервовае капіраванне"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Ваша паштовая скрыня запоўнена. Каб вызваліць месца, уключыце дадатковае сховішча, каб Google мог кіраваць вашымі паведамленнямі галасавой пошты і рабіць іх рэзервовую копію."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Уключыць дадатковае сховішча і рэзервовае капіраванне"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Ваша паштовая скрыня амаль запоўнена. Каб вызваліць месца, уключыце дадатковае сховішча, каб Google мог кіраваць вашымі паведамленнямі галасавой пошты і рабіць іх рэзервовую копію."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Наладзьце PIN-код галасавой пошты"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Вам спатрэбіцца PIN-код галасавой пошты заўжды, калі вы тэлефануеце на сваю галасавую пошту."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Невядомая памылка"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-bg/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-bg/strings.xml
index e9200d17c..dbca19ea2 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-bg/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-bg/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Няма да можете да получавате нова гласова поща, ако входящата ви поща е пълна."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Не могат да се получават нови гласови съобщения"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Входящата ви поща е пълна. Опитайте да изтриете съобщения, за да получавате нова гласова поща."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Експериментално] Включване на допълнително хранилище и резервни копия"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Пощенската ви кутия е пълна. За да освободите място, включете допълнителното хранилище, за да може Google да управлява и създава резервни копия на съобщенията в гласовата ви поща. "<b><i>"Тази функция понастоящем се тества"</i></b>". Тя потенциално може да изтрие гласови съобщения от сървъра ви за гласова поща и не обещаваме, че ще я поддържаме в бъдеще. Но ще се радваме на отзиви за нея."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Експериментално] Включване на допълнително хранилище и резервни копия"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Пощенската ви кутия е почти пълна. За да освободите място, включете допълнителното хранилище, за да може Google да управлява и създава резервни копия на съобщенията в гласовата ви поща. "<b><i>"Тази функция понастоящем се тества"</i></b>". Тя потенциално може да изтрие гласови съобщения от сървъра ви за гласова поща и не обещаваме, че ще я поддържаме в бъдеще. Но ще се радваме на отзиви за нея."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Включване на допълнително хранилище и създаване на резервно копие"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Пощенската ви кутия е пълна. За да освободите място, включете допълнително хранилище, така че Google да може да управлява и създаде резервно копие на съобщенията в гласовата ви поща."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Включване на допълнително хранилище и създаване на резервно копие"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Пощенската ви кутия е почти пълна. За да освободите място, включете допълнително хранилище, така че Google да може да управлява и създаде резервно копие на съобщенията в гласовата ви поща."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Задайте ПИН за гласовата си поща"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Ще ви е необходим ПИН за гласовата поща при всяко обаждане за достъп до съобщенията ви в нея."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Неизвестна грешка"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-bn/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-bn/strings.xml
index b088f512a..5954448ee 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-bn/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-bn/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"যদি আপনার ইনবক্সে পূর্ণ থাকে তাহলে আপনি নতুন ভয়েসমেল পেতে সক্ষম হবেন না।"</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"নতুন ভয়েসমেলগুলি গ্রহণ করতে পারবেন না"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"আপনার ইনবক্স পূর্ণ। নতুন ভয়েসমেল পেতে কিছু বার্তা মুছে ফেলার চেষ্টা করুন।"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[পরীক্ষামূলক] অতিরিক্ত সঞ্চয়স্থান এবং ব্যাক আপ চালু করুন"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"আপনার মেলবক্স পূর্ণ। স্থান খালি করতে, অতিরিক্ত সঞ্চয়স্থান চালু করুন যাতে Google আপনার ভয়েসমেল বার্তাগুলি পরিচালনা করতে এবং ব্যাক আপ নিতে পারে। "<b><i>"এই বৈশিষ্ট্যটি বর্তমানে পরীক্ষা করা হচ্ছে "</i></b>"এবং সম্ভবত আপনার ভয়েসমেল সার্ভার থেকে ভয়েসমেলগুলি মুছবে এবং আমরা ভবিষ্যতে এই বৈশিষ্ট্যের উপর সমর্থন দেওয়ার কোন কথা দিচ্ছি না। যদিও আমরা এই বৈশিষ্ট্যটির উপর মতামত পেলে খুব খুশি হব।"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[পরীক্ষামূলক] অতিরিক্ত সঞ্চয়স্থান এবং ব্যাক আপ চালু করুন"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"আপনার মেলবক্স প্রায় পূর্ণ। স্থান খালি করতে, অতিরিক্ত সঞ্চয়স্থান চালু করুন যাতে Google আপনার ভয়েসমেল বার্তাগুলি পরিচালনা করতে এবং ব্যাক আপ নিতে পারে। "<b><i>"এই বৈশিষ্ট্যটি বর্তমানে পরীক্ষা করা হচ্ছে "</i></b>"এবং সম্ভবত আপনার ভয়েসমেল সার্ভার থেকে ভয়েসমেলগুলি মুছবে এবং আমরা ভবিষ্যতে এই বৈশিষ্ট্যেটি সমর্থন করব কিনা সেই নিয়ে কোন কথা দিচ্ছি না। যদিও আমরা এই বৈশিষ্ট্যটির উপর মতামত পেলে খুব খুশি হব।"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"অতিরিক্ত সঞ্চয়স্থান এবং ব্যাক আপ চালু করুন"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"আপনার মেলবক্স পূর্ণ। স্থান খালি করতে, অতিরিক্ত সঞ্চয়স্থান চালু করুন যাতে Google আপনার ভয়েসমেল বার্তাগুলি পরিচালনা করতে এবং ব্যাক আপ নিতে পারে।"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"অতিরিক্ত সঞ্চয়স্থান এবং ব্যাক আপ চালু করুন"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"আপনার মেলবক্স প্রায় পূর্ণ। স্থান খালি করতে, অতিরিক্ত সঞ্চয়স্থান চালু করুন যাতে Google আপনার ভয়েসমেল বার্তাগুলি পরিচালনা করতে এবং ব্যাক আপ নিতে পারে।"</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"আপনার ভয়েসমেল পিন সেট করুন"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"যে কোনো সময়ে আপনার ভয়েসমেল অ্যাক্সেস করার জন্য আপনার একটি ভয়েসমেল পিন প্রয়োজন৷"</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"অজানা ত্রুটি"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-bs/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-bs/strings.xml
index 32b4ea345..0352436c4 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-bs/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-bs/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Nećete moći primati novu govornu poštu ako je vam je pristigla pošta puna."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Ne možete primati novu govornu poštu"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Vaša pristigla pošta je puna. Pokušajte izbrisati neke poruke da primite novu govornu poštu."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Eksperimentalno] Uključite dodatnu pohranu i sigurnosnu kopiju"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Vaše poštansko sanduče je puno. Za oslobađanje prostora uključite dodatnu pohranu da Google može upravljati i kreirati sigurnosnu kopiju poruka vaše govorne pošte. "<b><i>"Ova funkcija se trenutno testira "</i></b>" i može izbrisati poruke govorne pošte sa servera govorne pošte. Iako ne obećavamo da ćemo podržavati ovu funkciju u budućnosti, ipak bismo željeli primiti vaše povratne informacije."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Eksperimentalno] Uključite dodatnu pohranu i sigurnosnu kopiju"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Vaše poštansko sanduče je puno. Za oslobađanje prostora uključite dodatnu pohranu da Google može upravljati i kreirati sigurnosnu kopiju poruka vaše govorne pošte. "<b><i>"Ova funkcija se trenutno testira "</i></b>"i može izbrisati poruke govorne pošte sa servera govorne pošte. Iako ne obećavamo da ćemo podržavati ovu funkciju u budućnosti, ipak bismo željeli primiti vaše povratne informacije."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Uključite dodatnu pohranu i sigurnosnu kopiju"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Poštanski pretinac je pun. Da oslobodite prostor, uključite dodatnu pohranu tako da Google može upravljati vašim porukama govorne pošte i praviti njihovu sigurnosnu kopiju."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Uključite dodatnu pohranu i sigurnosnu kopiju"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Poštanski pretinac je gotovo sasvim pun. Da oslobodite prostor, uključite dodatnu pohranu tako da Google može upravljati vašim porukama govorne pošte i praviti njihovu sigurnosnu kopiju."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Postavite PIN za govornu poštu"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"PIN za govornu poštu trebat će vam svaki put kada zatražite pristup govornoj pošti."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Nepoznata greška"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-ca/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-ca/strings.xml
index cea2ed3cb..b6d844df8 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-ca/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-ca/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"No podràs rebre missatges de veu nous si la safata d\'entrada està plena."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"No es poden rebre missatges de veu nous"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"La safata d\'entrada està plena. Per rebre missatges de veu nous, prova de suprimir alguns missatges."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Experimental] Activa l\'emmagatzematge addicional i la còpia de seguretat"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"La bústia de veu està plena. Per alliberar espai, activa l\'emmagatzematge addicional perquè Google pugui gestionar els teus missatges de veu i crear-ne una còpia de seguretat. "<b><i>"Aquesta funció està en mode de prova "</i></b>"i és possible que suprimeixi els missatges de veu del servidor de la bústia. No podem garantir-ne la continuïtat en el futur. De tota manera, ens agradaria saber què en penses."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Experimental] Activa l\'emmagatzematge addicional i la còpia de seguretat"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"La bústia de veu gairebé està plena. Per alliberar espai, activa l\'emmagatzematge addicional perquè Google pugui gestionar els teus missatges de veu i crear-ne una còpia de seguretat. "<b><i>"Aquesta funció està en mode de prova "</i></b>"i és possible que suprimeixi els missatges de veu del servidor de la bústia. No podem garantir-ne la continuïtat en el futur. De tota manera, ens agradaria saber què en penses."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Activa l\'emmagatzematge addicional i la còpia de seguretat"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Tens la bústia plena. Per alliberar espai, activa l\'emmagatzematge addicional perquè Google pugui gestionar els missatges de veu i crear-ne una còpia de seguretat."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Activa l\'emmagatzematge addicional i la còpia de seguretat"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Tens la bústia gairebé plena. Per alliberar espai, activa l\'emmagatzematge addicional perquè Google pugui gestionar els missatges de veu i crear-ne una còpia de seguretat."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Defineix el PIN per als missatges de veu"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Necessitaràs el PIN per als missatges de veu cada vegada que truquis per accedir-hi."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Error desconegut"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-cs/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-cs/strings.xml
index 9db772737..c52f7b007 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-cs/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-cs/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Pokud máte plnou schránku, nemůžete přijímat nové hlasové zprávy."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Nemůžete přijímat nové hlasové zprávy"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Vaše schránka je plná. Abyste mohli přijímat nové hlasové zprávy, zkuste nějaké zprávy smazat."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Experimentální funkce] Zapněte si další úložiště a zálohování"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Vaše e-mailová schránka je plná. Pokud chcete uvolnit místo, zapněte si další úložiště, aby Google mohl spravovat a zálohovat vaše hlasové zprávy. "<b><i>"Tuto funkci právě testujeme."</i></b>" Funkce vám může smazat hlasové zprávy ze serveru hlasové schránky. Nemůžeme zaručit, že bude podporována i v budoucnu, budeme vám ale vděční za zpětnou vazbu."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Experimentální funkce] Zapněte si další úložiště a zálohování"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Vaše e-mailová schránka je téměř plná. Pokud chcete uvolnit místo, zapněte si další úložiště, aby Google mohl spravovat a zálohovat vaše hlasové zprávy. "<b><i>"Tuto funkci právě testujeme."</i></b>" Funkce vám může smazat hlasové zprávy ze serveru hlasové schránky. Nemůžeme zaručit, že bude podporována i v budoucnu, budeme vám ale vděční za zpětnou vazbu."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Zapněte si další úložiště a zálohování"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Vaše e-mailová schránka je plná. Pokud chcete uvolnit místo, zapněte si další úložiště, aby Google mohl spravovat a zálohovat vaše hlasové zprávy."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Zapněte si další úložiště a zálohování"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Vaše e-mailová schránka je téměř plná. Pokud chcete uvolnit místo, zapněte si další úložiště, aby Google mohl spravovat a zálohovat vaše hlasové zprávy."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Nastavit kód PIN hlasové schránky"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"PIN hlasové schránky budete potřebovat, kdykoli do své hlasové schránky zavoláte."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Neznámá chyba"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-da/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-da/strings.xml
index f04049a0f..26e5ede7c 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-da/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-da/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Du vil ikke kunne modtage nye telefonsvarerbeskeder, hvis din indbakke er fuld."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Du kan ikke modtage nye telefonsvarerbeskeder"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Din indbakke er fuld. Prøv at slette nogle beskeder for at modtage nye telefonsvarerbeskeder."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Eksperimental] Slå ekstra lagerplads og sikkerhedskopiering til"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Din telefonsvarer er fuld. Frigør plads ved at slå ekstra lagerplads til, så Google kan administrere og sikkerhedskopiere dine talebeskeder. "<b><i>"Denne funktion bliver testet i øjeblikket "</i></b>"og vil muligvis slette talebeskeder fra din telefonsvarerserver. Vi lover desuden ikke, at denne funktion understøttes fremover. Vi vil dog stadig gerne have feedback fra dig."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Eksperimental] Slå ekstra lagerplads og sikkerhedskopiering til"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Din telefonsvarer er næsten fuld. Frigør plads ved at slå ekstra lagerplads til, så Google kan administrere og sikkerhedskopiere dine talebeskeder. "<b><i>"Denne funktion bliver testet i øjeblikket "</i></b>"og vil muligvis slette talebeskeder fra din telefonsvarerserver. Vi lover desuden ikke, at denne funktion understøttes fremover. Vi vil dog stadig gerne have feedback fra dig."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Slå ekstra lagerplads og sikkerhedskopiering til"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Din telefonsvarer er fuld. Du kan frigøre plads ved at slå ekstra lagerplads til, så Google kan administrere og sikkerhedskopiere dine talebeskeder."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Slå ekstra lagerplads og sikkerhedskopiering til"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Din telefonsvarer er næsten fuld. Du kan frigøre plads ved at slå ekstra lagerplads til, så Google kan administrere og sikkerhedskopiere dine talebeskeder."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Bestem pinkoden til din telefonsvarer"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Du skal bruge en pinkode til din telefonsvarer, når du ringer for at få adgang til den."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Ukendt fejl"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-de/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-de/strings.xml
index 8939e687e..865ddd95a 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-de/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-de/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Wenn deine Mailbox voll ist, kannst du keine neuen Sprachnachrichten empfangen."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Es können keine neuen Mailboxnachrichten empfangen werden"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Deine Mailbox ist voll. Lösche einige Nachrichten, um neue empfangen zu können."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Testfunktion] Zusätzlichen Speicher und Sicherung aktivieren"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Dein Postfach ist voll. Aktivere zusätzlichen Speicher, um Speicherplatz freizugeben. So kann Google deine Mailboxnachrichten verwalten und sichern. "<b><i>"Diese Funktion wird gerade getestet."</i></b>" Hiermit werden möglicherweise Mailboxnachrichten von deinem Mailbox-Server gelöscht und es wird nicht garantiert, dass diese Funktion auch in Zukunft unterstützt wird. Wir würden uns aber sehr über Feedback dazu freuen."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Testfunktion] Zusätzlichen Speicher und Sicherung aktivieren"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Dein Postfach ist voll. Aktivere zusätzlichen Speicher, um Speicherplatz freizugeben. So kann Google deine Mailboxnachrichten verwalten und sichern. "<b><i>"Diese Funktion wird gerade getestet."</i></b>" Hiermit werden möglicherweise Mailboxnachrichten von deinem Mailbox-Server gelöscht und es wird nicht garantiert, dass diese Funktion auch in Zukunft unterstützt wird. Wir würden uns aber sehr über Feedback dazu freuen."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Zusätzlichen Speicher und Sicherung aktivieren"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Dein Postfach ist voll. Aktivere zusätzlichen Speicher, um Speicherplatz freizugeben. So kann Google deine Mailboxnachrichten verwalten und sichern."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Zusätzlichen Speicher und Sicherung aktivieren"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Dein Postfach fast ist voll. Aktivere zusätzlichen Speicher, um Speicherplatz freizugeben. So kann Google deine Mailboxnachrichten verwalten und sichern."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Mailbox-PIN festlegen"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Bei jedem Anruf auf deiner Mailbox benötigst du eine Mailbox-PIN."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Unbekannter Fehler"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-el/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-el/strings.xml
index 9c7c7da66..acd1ca0e7 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-el/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-el/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Δεν θα είστε σε θέση να λάβετε νέα φωνητικά μηνύματα από τον αυτόματο τηλεφωνητή εάν τα εισερχόμενά σας είναι πλήρη."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Δεν μπορείτε να λάβετε νέα μηνύματα από τον αυτόματο τηλεφωνητή"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Τα εισερχόμενά σας είναι πλήρη. Δοκιμάστε να διαγράψετε μερικά μηνύματα, για να λάβετε νέα μηνύματα από τον αυτόματο τηλεφωνητή."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Πειραματική λειτουργία] Ενεργοποίηση επιπλέον αποθηκευτικού χώρου και αντιγράφων ασφαλείας"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Το γραμματοκιβώτιό σας είναι πλήρες. Για να ελευθερώσετε χώρο, ενεργοποιήστε επιπλέον αποθηκευτικό χώρο, ώστε η Google μπορεί να διαχειριστεί και να δημιουργήσει αντίγραφα ασφαλείας των μηνυμάτων του αυτόματου τηλεφωνητή σας. "<b><i>"Αυτή η λειτουργία βρίσκεται σε δοκιμαστική φάση "</i></b>", ενδέχεται να έχει ως αποτέλεσμα τη διαγραφή φωνητικών μηνυμάτων από τον διακομιστή αυτόματου τηλεφωνητή σας και δεν παρέχουμε εγγυήσεις για την υποστήριξη αυτής της λειτουργίας μελλοντικά. Ωστόσο, θα εκτιμούσαμε τα σχόλιά σας."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Πειραματική λειτουργία] Ενεργοποίηση επιπλέον αποθηκευτικού χώρου και αντιγράφων ασφαλείας"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Το γραμματοκιβώτιό σας είναι σχεδόν πλήρες. Για να ελευθερώσετε χώρο, ενεργοποιήστε επιπλέον αποθηκευτικό χώρο, ώστε η Google μπορεί να διαχειριστεί και να δημιουργήσει αντίγραφα ασφαλείας των μηνυμάτων του αυτόματου τηλεφωνητή σας. "<b><i>"Αυτή η λειτουργία βρίσκεται σε δοκιμαστική φάση "</i></b>", ενδέχεται να έχει ως αποτέλεσμα τη διαγραφή φωνητικών μηνυμάτων από τον διακομιστή αυτόματου τηλεφωνητή σας και δεν παρέχουμε εγγυήσεις για την υποστήριξη αυτής της λειτουργίας μελλοντικά. Ωστόσο, θα εκτιμούσαμε τα σχόλιά σας."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Ενεργοποίηση επιπλέον αποθηκευτικού χώρου και αντιγράφων ασφαλείας"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Το γραμματοκιβώτιό σας είναι πλήρες. Για να ελευθερώσετε χώρο, ενεργοποιήστε επιπλέον αποθηκευτικό χώρο, ώστε η Google μπορεί να διαχειριστεί και να δημιουργήσει αντίγραφα ασφαλείας των μηνυμάτων του αυτόματου τηλεφωνητή σας."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Ενεργοποίηση επιπλέον αποθηκευτικού χώρου και αντιγράφων ασφαλείας"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Το γραμματοκιβώτιό σας είναι σχεδόν πλήρες. Για να ελευθερώσετε χώρο, ενεργοποιήστε επιπλέον αποθηκευτικό χώρο, ώστε η Google μπορεί να διαχειριστεί και να δημιουργήσει αντίγραφα ασφαλείας των μηνυμάτων του αυτόματου τηλεφωνητή σας."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Ορίστε PIN για τον αυτόματο τηλεφωνητή σας"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Θα χρειάζεστε ένα PIN φωνητικού τηλεφωνητή κάθε φορά που καλείτε, για να έχετε πρόσβαση στον τηλεφωνητή σας."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Άγνωστο σφάλμα"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-en-rAU/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-en-rAU/strings.xml
index c1455cafc..a036950a6 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-en-rAU/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-en-rAU/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"You won\'t be able to receive new voicemail if your inbox is full."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Can\'t receive new voicemail"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Your inbox is full. Try deleting some messages to receive new voicemail."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Experimental] Turn on extra storage and backup"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Your mailbox is full. To free up space, turn on extra storage so that Google can manage and back up your voicemail messages. "<b><i>"This feature is currently being tested "</i></b>"and will potentially delete voicemail from your voicemail server. We do not promise to support this feature in the future. We would love your feedback though."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Experimental] Turn on extra storage and backup"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Your mailbox is almost full. To free up space, turn on extra storage so that Google can manage and back up your voicemail messages. "<b><i>"This feature is currently being tested "</i></b>"and will potentially delete voicemail from your voicemail server. We do not promise to support this feature in the future. We would love your feedback though."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Turn on extra storage and backup"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Your mailbox is full. To free up space, turn on extra storage so that Google can manage and back up your voicemail messages."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Turn on extra storage and backup"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Your mailbox is almost full. To free up space, turn on extra storage so that Google can manage and back up your voicemail messages."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Set your voicemail PIN"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"You\'ll need a voicemail PIN whenever you call to access your voicemail."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Unknown error"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-en-rGB/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-en-rGB/strings.xml
index c1455cafc..a036950a6 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-en-rGB/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-en-rGB/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"You won\'t be able to receive new voicemail if your inbox is full."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Can\'t receive new voicemail"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Your inbox is full. Try deleting some messages to receive new voicemail."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Experimental] Turn on extra storage and backup"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Your mailbox is full. To free up space, turn on extra storage so that Google can manage and back up your voicemail messages. "<b><i>"This feature is currently being tested "</i></b>"and will potentially delete voicemail from your voicemail server. We do not promise to support this feature in the future. We would love your feedback though."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Experimental] Turn on extra storage and backup"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Your mailbox is almost full. To free up space, turn on extra storage so that Google can manage and back up your voicemail messages. "<b><i>"This feature is currently being tested "</i></b>"and will potentially delete voicemail from your voicemail server. We do not promise to support this feature in the future. We would love your feedback though."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Turn on extra storage and backup"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Your mailbox is full. To free up space, turn on extra storage so that Google can manage and back up your voicemail messages."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Turn on extra storage and backup"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Your mailbox is almost full. To free up space, turn on extra storage so that Google can manage and back up your voicemail messages."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Set your voicemail PIN"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"You\'ll need a voicemail PIN whenever you call to access your voicemail."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Unknown error"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-en-rIN/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-en-rIN/strings.xml
index c1455cafc..a036950a6 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-en-rIN/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-en-rIN/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"You won\'t be able to receive new voicemail if your inbox is full."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Can\'t receive new voicemail"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Your inbox is full. Try deleting some messages to receive new voicemail."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Experimental] Turn on extra storage and backup"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Your mailbox is full. To free up space, turn on extra storage so that Google can manage and back up your voicemail messages. "<b><i>"This feature is currently being tested "</i></b>"and will potentially delete voicemail from your voicemail server. We do not promise to support this feature in the future. We would love your feedback though."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Experimental] Turn on extra storage and backup"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Your mailbox is almost full. To free up space, turn on extra storage so that Google can manage and back up your voicemail messages. "<b><i>"This feature is currently being tested "</i></b>"and will potentially delete voicemail from your voicemail server. We do not promise to support this feature in the future. We would love your feedback though."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Turn on extra storage and backup"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Your mailbox is full. To free up space, turn on extra storage so that Google can manage and back up your voicemail messages."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Turn on extra storage and backup"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Your mailbox is almost full. To free up space, turn on extra storage so that Google can manage and back up your voicemail messages."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Set your voicemail PIN"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"You\'ll need a voicemail PIN whenever you call to access your voicemail."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Unknown error"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-es-rUS/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-es-rUS/strings.xml
index be7eef136..485a78b10 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-es-rUS/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-es-rUS/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Si la carpeta Recibidos está llena, no podrás recibir mensajes de voz nuevos."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"No se pueden recibir mensajes de voz nuevos"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"La carpeta Recibidos está llena. Intenta borrar algunos mensajes para recibir mensajes de voz nuevos."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Experimental] Activar la copia de seguridad y el almacenamiento adicional"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Tu buzón está lleno. Para liberar espacio, obtén almacenamiento adicional para que Google pueda administrar tus mensajes de voz y hacer copias de seguridad de ellos. "<b><i>"Esta función se está probando"</i></b>", y es posible que borre los mensajes de voz del servidor correspondiente. No podemos garantizar la compatibilidad de la función en el futuro. Sin embargo, nos encantaría que nos hicieras comentarios acerca de ella."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Experimental] Activar la copia de seguridad y el almacenamiento adicional"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Tu buzón está casi lleno. Para liberar espacio, obtén almacenamiento adicional para que Google pueda administrar tus mensajes de voz y hacer copias de seguridad de ellos. "<b><i>"Esta función se está probando"</i></b>", y es posible que borre los mensajes de voz del servidor correspondiente. No podemos garantizar la compatibilidad de la función en el futuro. Sin embargo, nos encantaría que nos hicieras comentarios acerca de ella."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Activar la copia de seguridad y obtener almacenamiento adicional"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Tu buzón está lleno. Para liberar espacio, obtén almacenamiento adicional para que Google pueda administrar tus mensajes de voz y hacer copias de seguridad de ellos."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Activar la copia de seguridad y obtener almacenamiento adicional"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Tu buzón está casi lleno. Para liberar espacio, obtén almacenamiento adicional para que Google pueda administrar tus mensajes de voz y hacer copias de seguridad de ellos."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Configura el PIN del buzón de voz"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Necesitas un PIN cada vez que llames para acceder al buzón de voz."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Error desconocido"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-es/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-es/strings.xml
index 01cccf3d0..d351f375c 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-es/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-es/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Si la bandeja de entrada está llena, no podrás recibir los mensajes de voz nuevos."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"No puedes recibir los mensajes de voz nuevos"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Tienes la bandeja de entrada llena. Para recibir nuevos mensajes de voz, prueba a eliminar algunos antiguos."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"(Experimental) Habilita más espacio de almacenamiento y copias de seguridad"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Tu buzón de voz está lleno. Para liberar espacio, habilita más espacio de almacenamiento de forma que Google pueda gestionar tus mensajes de voz y hacer copias de seguridad de estos. "<b><i>"Esta función, que se encuentra actualmente en fase de prueba, "</i></b>"podría servir para eliminar los mensajes de tu servidor de buzón de voz. Aunque no garantizamos que se siga admitiendo en el futuro, nos encantaría conocer tu opinión."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"(Experimental) Habilita más espacio de almacenamiento y copias de seguridad"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Tu buzón de voz está casi lleno. Para liberar espacio, habilita más espacio de almacenamiento de forma que Google pueda gestionar tus mensajes de voz y hacer copias de seguridad de estos. "<b><i>"Esta función, que se encuentra actualmente en fase de prueba, "</i></b>"podría servir para eliminar los mensajes de tu servidor de buzón de voz. Aunque no garantizamos que se siga admitiendo en el futuro, nos encantaría conocer tu opinión."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Habilitar más espacio de almacenamiento y de copia de seguridad"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Tu buzón de voz está lleno. Para desocupar espacio, habilita más almacenamiento para que Google pueda hacer una copia de seguridad de tus mensajes del buzón de buzón y gestionarlos."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Habilitar más espacio de almacenamiento y de copia de seguridad"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Tu buzón de voz está prácticamente lleno. Para desocupar espacio, habilita más almacenamiento para que Google pueda hacer una copia de seguridad de tus mensajes del buzón de buzón y gestionarlos."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Configura el PIN del buzón de voz"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Deberás introducir un PIN del buzón de voz siempre que llames para escuchar los mensajes de voz."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Error desconocido"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-et/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-et/strings.xml
index bfbd977c2..e392f9067 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-et/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-et/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Kui teie postkast on täis, ei saa te uusi kõnepostisõnumeid vastu võtta."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Uusi kõnepostisõnumeid ei saa vastu võtta"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Teie postkast on täis. Uute kõnepostisõnumite vastuvõtmiseks kustutage mõned sõnumid."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Katseline.] Lisasalvestusruumi ja -varunduse sisselülitamine"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Teie postkast on täis. Ruumi vabastamiseks lülitage sisse lisasalvestusruum, et Google saaks teie kõnepostisõnumeid hallata ja varundada. "<b><i>"Seda funktsiooni testitakse "</i></b>"ja see võib teie kõnepostisõnumid kõnepostiserverist kustutada. Me ei garanteeri, et seda funktsiooni tulevikus toetatakse. Soovime selle kohta siiski tagasisidet saada."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Katseline.] Lisasalvestusruumi ja -varunduse sisselülitamine"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Teie postkast on peaaegu täis. Ruumi vabastamiseks lülitage sisse lisasalvestusruum, et Google saaks teie kõnepostisõnumeid hallata ja varundada. "<b><i>"Seda funktsiooni testitakse "</i></b>"ja see võib teie kõnepostisõnumid kõnepostiserverist kustutada. Me ei garanteeri, et seda funktsiooni tulevikus toetatakse. Soovime selle kohta siiski tagasisidet saada."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Lisasalvestusruumi ja varundamise sisselülitamine"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Teie postkast on täis. Ruumi vabastamiseks lülitage sisse lisasalvestusruum, et Google saaks teie kõnepostisõnumeid hallata ja varundada."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Lisasalvestusruumi ja varundamise sisselülitamine"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Teie postkast on peaaegu täis. Ruumi vabastamiseks lülitage sisse lisasalvestusruum, et Google saaks teie kõnepostisõnumeid hallata ja varundada."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Määrake kõneposti PIN-kood"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Vajate PIN-koodi juhul, kui helistate kõnepostile juurdepääsemiseks."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Tundmatu viga"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-eu/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-eu/strings.xml
index a23d03e14..af40192d2 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-eu/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-eu/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Ezin izango duzu jaso ahots-mezu berririk sarrera-ontzia beteta badago."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Ezin da jaso ahots-mezu berririk"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Beteta dago sarrera-ontzia. Ezabatu mezu batzuk ahots-mezu berriak jasotzeko."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Esperimentala] Lortu biltegiratze-toki gehiago eta egin babeskopiak"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Beteta dago postontzia. Tokia egiteko, lortu biltegiratze-toki gehiago, Google-k erantzungailuko mezuak kudeatu eta haien babeskopiak egin ahal izan ditzan. "<b><i>"Eginbide hau probatzen ari gara oraindik, "</i></b>"eta agian erantzungailuaren zerbitzarian gordetako mezuak ezabatuko ditu. Ez dugu bermatzen eginbide hau etorkizunean erabiltzeko aukera emango dugunik. Halere, bihotzez eskertuko genizuke iritzia emango bazenigu."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Esperimentala] Lortu biltegiratze-toki gehiago eta egin babeskopiak"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Ia beteta dago postontzia. Tokia egiteko, lortu biltegiratze-toki gehiago, Google-k erantzungailuko mezuak kudeatu eta haien babeskopiak egin ahal izan ditzan. "<b><i>"Eginbide hau probatzen ari gara oraindik, "</i></b>"eta agian erantzungailuaren zerbitzarian gordetako mezuak ezabatuko ditu. Ez dugu bermatzen eginbide hau etorkizunean erabiltzeko aukera emango dugunik. Halere, bihotzez eskertuko genizuke iritzia emango bazenigu."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Lortu biltegiratze-toki gehiago eta egin babeskopiak"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Beteta dago postontzia. Tokia egiteko, lortu biltegiratze-toki gehiago, Google-k erantzungailuko mezuak kudeatu eta haien babeskopiak egin ahal izan ditzan."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Lortu biltegiratze-toki gehiago eta egin babeskopiak"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Ia beteta dago postontzia. Tokia egiteko, lortu biltegiratze-toki gehiago, Google-k erantzungailuko mezuak kudeatu eta haien babeskopiak egin ahal izan ditzan."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Ezarri erantzungailuko PIN kodea"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Erantzungailua atzitzeko deitzen duzunerako behar duzu PIN kodea."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Errore ezezagun bat gertatu da"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-fa/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-fa/strings.xml
index 331ee9c0c..af79322bb 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-fa/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-fa/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"اگر صندوق ورودی‌تان پر باشد نمی‌توانید پست صوتی جدیدی دریافت کنید."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"پست‌های صوتی جدید دریافت نمی‌شود"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"صندوق ورودی‌تان پر است. بعضی از پیام‌ها را حذف کنید تا پست صوتی جدید دریافت کنید."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[آزمایشی] روشن کردن فضای ذخیره‌سازی اضافی و پشتیبان‌گیری"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"‏صندوق پستی‌تان پر است. برای آزاد کردن فضا، فضای ذخیره‌سازی اضافی را روشن کنید تا Google بتواند پیام‌های پست صوتی شما را مدیریت و پشتیبان‌گیری کند"<b><i>"این یک قابلیت درحال آزمایش شدن است"</i></b>"و به‌طور بالقوه پست‌های صوتی را از سرور پست صوتی شما حذف خواهد کرد و قول نمی‌دهیم در آینده از این قابلیت پشتیبانی کنیم. با این حال مشتاقیم درباره آن بازخورد دریافت کنیم."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[آزمایشی] روشن کردن فضای ذخیره‌سازی اضافی و پشتیبان‌گیری"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"‏صندوق پستی‌تان تقریباً پر است. برای آزاد کردن فضا، فضای ذخیره‌سازی اضافی را روشن کنید تا Google بتواند پیام‌های پست صوتی شما را مدیریت و پشتیبان‌گیری کند"<b><i>"این یک قابلیت درحال آزمایش شدن است"</i></b>"و به‌طور بالقوه پست‌های صوتی را از سرور پست صوتی شما حذف خواهد کرد و قول نمی‌دهیم در آینده از این قابلیت پشتیبانی کنیم. با این حال مشتاقیم درباره آن بازخورد دریافت کنیم."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"فعال‌سازی فضای ذخیره‌سازی اضافی و پشتیبان‌گیری"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"‏صندوق ورودی‌تان پر است. برای آزاد کردن فضا، فضای ذخیره‌سازی اضافی را فعال‌سازی کنید تا Google بتواند پیام‌های صندوق پستی‌تان را مدیریت و پشتیبان‌گیری کند."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"فعال‌سازی فضای ذخیره‌سازی اضافی و پشتیبان‌گیری"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"‏صندوق ورودی‌تان تقریباً پر است. برای آزاد کردن فضا، فضای ذخیره‌سازی اضافی را فعال‌سازی کنید تا Google بتواند پیام‌های صندوق پستی‌تان را مدیریت و پشتیبان‌گیری کند."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"تنظیم پین پست صوتی"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"هر بار که تماس می‌گیرید برای دسترسی به پست صوتی‌تان به پین پست صوتی نیاز دارید."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"خطای ناشناس"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-fi/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-fi/strings.xml
index 2807a22dc..54167659b 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-fi/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-fi/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Uusia vastaajaviestejä ei voi vastaanottaa, jos postilaatikko on täynnä."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Uusien vastaajaviestien vastaanottaminen ei onnistu."</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Postilaatikkosi on täynnä. Poista viestejä, jotta voit vastaanottaa uusia vastaajaviestejä."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Kokeellinen] Ota käyttöön lisätallennustila ja ‑varmuuskopiointi"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Postilaatikkosi on täynnä. Vapauta tilaa ottamalla käyttöön lisätallennustila, jotta Google voi hallinnoida ja varmuuskopioida vastaajaviestejäsi. "<b><i>"Ominaisuus on testivaiheessa"</i></b>", ja se saattaa poistaa vastaajaviestejä vastaajapalvelimelta. Emme takaa ominaisuuden tukea tulevaisuudessa. Otamme kuitenkin mielellämme vastaan palautetta."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Kokeellinen] Ota käyttöön lisätallennustila ja ‑varmuuskopiointi"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Postilaatikkosi on lähes täynnä. Vapauta tilaa ottamalla käyttöön lisätallennustila, jotta Google voi hallinnoida ja varmuuskopioida vastaajaviestejäsi. "<b><i>"Ominaisuus on testivaiheessa"</i></b>", ja se saattaa poistaa vastaajaviestejä vastaajapalvelimelta. Emme takaa ominaisuuden tukea tulevaisuudessa. Otamme kuitenkin mielellämme vastaan palautetta."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Ota käyttöön lisätallennustila ja ‑varmuuskopiointi"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Postilaatikkosi on täynnä. Jos haluat vapauttaa tilaa, ota käyttöön lisätallennustila, niin Google voi hallinnoida ja varmuuskopioida vastaajaviestisi."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Ota käyttöön lisätallennustila ja ‑varmuuskopiointi"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Postilaatikkosi on lähes täynnä. Jos haluat vapauttaa tilaa, ota käyttöön lisätallennustila, niin Google voi hallinnoida ja varmuuskopioida vastaajaviestisi."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Aseta vastaajan PIN-koodi"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Vastaajan PIN-koodi on annettava aina, kun käytät vastaajaa."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Tuntematon virhe"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-fr-rCA/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-fr-rCA/strings.xml
index b26f65b21..ef88ecfa2 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-fr-rCA/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-fr-rCA/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Vous ne pourrez pas recevoir de nouveaux messages vocaux si votre boîte de réception est pleine."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Impossible de recevoir de nouveaux messages vocaux"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Votre boîte de réception est pleine. Essayez de supprimer des messages pour pouvoir recevoir de nouveaux messages vocaux."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Fonction expérimentale] Activer l\'espace supplémentaire de stockage et de sauvegarde"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Votre boîte aux lettres est pleine. Pour libérer de l\'espace, activez l\'espace supplémentaire de stockage pour que Google puisse gérer et sauvegarder vos messages vocaux. "<b><i>"Cette fonction est en cours de test "</i></b>"et pourrait supprimer des messages de votre serveur de messagerie vocale. Nous ne pouvons pas garantir le maintien de cette fonction à l\'avenir. Nous voudrions toutefois savoir ce que vous en pensez."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Fonction expérimentale] Activer l\'espace supplémentaire de stockage et de sauvegarde"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Votre boîte aux lettres est presque pleine. Pour libérer de l\'espace, activez l\'espace supplémentaire de stockage pour que Google puisse gérer et sauvegarder vos messages vocaux. "<b><i>"Cette fonction est en cours de test "</i></b>"et pourrait supprimer des messages de votre serveur de messagerie vocale. Nous ne pouvons pas garantir le maintien de cette fonction à l\'avenir. Nous voudrions toutefois savoir ce que vous en pensez."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Activer l\'espace supplémentaire de stockage et de sauvegarde"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Votre boîte aux lettres est pleine. Pour libérer de l\'espace, activez l\'espace de stockage supplémentaire pour que Google puisse gérer et sauvegarder vos messages vocaux."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Activer l\'espace supplémentaire de stockage et de sauvegarde"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Votre boîte aux lettres est presque pleine. Pour libérer de l\'espace, activez l\'espace de stockage supplémentaire pour que Google puisse gérer et sauvegarder vos messages vocaux."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Définir votre NIP de messagerie vocale"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Vous devez saisir un NIP de messagerie vocale chaque fois que vous appelez pour accéder à vos messages vocaux."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Erreur inconnue"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-fr/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-fr/strings.xml
index f10c0383b..eefd5ad24 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-fr/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-fr/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Vous ne pouvez pas recevoir de nouveaux messages vocaux si votre boîte de réception est pleine."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Impossible de recevoir de nouveaux messages vocaux"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Votre boîte de réception est pleine. Supprimez des messages vocaux pour pouvoir en recevoir de nouveaux."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Fonctionnalité expérimentale] Activer l\'espace de stockage et de sauvegarde supplémentaire"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Votre messagerie est pleine. Pour libérer de l\'espace, activez l\'espace de stockage supplémentaire pour permettre à Google de gérer et de sauvegarder vos messages vocaux. "<b><i>"Cette fonctionnalité est en cours de test. "</i></b>"Des messages risquent d\'être supprimés de votre serveur de messagerie vocale. Nous ne pouvons pas garantir le maintien de cette fonction. Toutefois, n\'hésitez pas à nous faire part de vos commentaires."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Fonctionnalité expérimentale] Activer l\'espace de stockage et de sauvegarde supplémentaire"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Votre messagerie est presque pleine. Pour libérer de l\'espace, activez l\'espace de stockage supplémentaire pour permettre à Google de gérer et de sauvegarder vos messages vocaux. "<b><i>"Cette fonctionnalité est en cours de test. "</i></b>"Des messages risquent d\'être supprimés de votre serveur de messagerie vocale. Nous ne pouvons pas garantir le maintien de cette fonction. Toutefois, n\'hésitez pas à nous faire part de vos commentaires."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Activer l\'espace de stockage et de sauvegarde supplémentaire"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Votre boîte aux lettres est pleine. Pour libérer de l\'espace, activez l\'espace de stockage supplémentaire. Google pourra ainsi gérer vos messages vocaux et les sauvegarder."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Activer l\'espace de stockage et de sauvegarde supplémentaire"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Votre boîte aux lettres est presque pleine. Pour libérer de l\'espace, activez l\'espace de stockage supplémentaire. Google pourra ainsi gérer vos messages vocaux et les sauvegarder."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Définir le code de votre messagerie vocale"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Vous devrez saisir ce code chaque fois que vous consulterez votre messagerie vocale."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Erreur inconnue"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-gl/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-gl/strings.xml
index a4f8f565c..efd174ffb 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-gl/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-gl/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Non poderás recibir correo de voz novo se a caixa de entrada está chea."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Non se poden recibir correos de voz novos"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"A caixa de entrada está chea. Proba a eliminar algunhas mensaxes para recibir correo de voz novo."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Experimental] Activa a copia de seguranza e o almacenamento adicional"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"A túa caixa de correo está chea. Para liberar espazo, activa o almacenamento adicional de modo que Google poida xestionar e facer unha copia de seguranza das túas mensaxes do correo de voz. "<b><i>"Actualmente esta función está en modo de proba, "</i></b>"e é posible que elimine correos de voz do teu servidor de correo de voz. Non prometemos a súa continuidade no futuro. De todos modos, encantaríanos que nos deses a túa opinión."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Experimental] Activa a copia de seguranza e o almacenamento adicional"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"O túa caixa de correo está case chea. Para liberar espazo, activa o almacenamento adicional de modo que Google poida xestionar e facer unha copia de seguranza das túas mensaxes do correo de voz. "<b><i>"Actualmente esta función está en modo de proba, "</i></b>"e é posible que elimine os correos de voz do teu servidor de correo de voz. Non prometemos a súa continuidade no futuro. De todos modos, encantaríanos que nos deses a túa opinión."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Activa o almacenamento adicional e a copia de seguranza"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"A túa caixa de correo está chea. Para liberar espazo, activa o almacenamento adicional, de modo que Google poida xestionar as túas mensaxes do correo de voz e facer unha copia de seguranza."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Activa o almacenamento adicional e a copia de seguranza"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"A túa caixa de correo está case chea. Para liberar espazo, activa o almacenamento adicional, de modo que Google poida xestionar as túas mensaxes do correo de voz e facer unha copia de seguranza."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Establece o PIN para o teu correo de voz"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Necesitarás o PIN cada vez que chames para acceder ao teu correo de voz."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Produciuse un erro descoñecido"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-gu/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-gu/strings.xml
index 149c52764..44634437a 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-gu/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-gu/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"જો તમારું ઇનબોક્સ ભરાઈ ગયું હોય તો તમે નવી વૉઇસમેઇલ પ્રાપ્ત કરી શકશો નહીં."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"નવી વૉઇસમેઇલ્સ પ્રાપ્ત કરી શકતાંં નથી"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"તમારું ઇનબોક્સ ભરાઈ ગયું છે. નવી વૉઇસમેઇલ પ્રાપ્ત કરવા માટે કેટલા સંદેશા કાઢી નાખવાનો પ્રયાસ કરો."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[પ્રાયોગિક] અતિરિક્ત સ્ટોરેજ ચાલુ કરો અને બેકઅપ લો"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"તમારું મેઇલબૉક્સ ભરાઇ ગયું છે. સ્થાન ખાલી કરવા માટે, અતિરિક્ત સ્ટોરેજ ચાલુ કરો જેથી Google તમારા વૉઇસમેઇલ સંદેશા સંચાલિત કરી અને તેનું બેકઅપ લઈ શકે. "<b><i>"આ સુવિધાનું હાલમાં પરીક્ષણ થઈ રહ્યું છે "</i></b>"અને તમારા વૉઇસમેઇલ સર્વરમાંથી સંભવિત રૂપે વૉઇસમેઇલ કાઢી નાખશે અને આ સુવિધાનું ભવિષ્યમાં સમર્થન કરવાનું અમે વચન આપતા નથી. જોકે અમને આ સુવિધા પર પ્રતિસાદ ગમશે."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[પ્રાયોગિક] અતિરિક્ત સ્ટોરેજ ચાલુ કરો અને બેકઅપ લો"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"તમારું મેઇલબૉક્સ મોટે ભાગે ભરાઇ ગયું છે. સ્થાન ખાલી કરવા માટે, અતિરિક્ત સ્ટોરેજ ચાલુ કરો જેથી Google તમારા વૉઇસમેઇલ સંદેશા સંચાલિત કરી અને તેનું બેકઅપ લઈ શકે. "<b><i>"આ સુવિધાનું હાલમાં પરીક્ષણ થઈ રહ્યું છે "</i></b>"અને તમારા વૉઇસમેઇલ સર્વરમાંથી સંભવિત રૂપે વૉઇસમેઇલ કાઢી નાખશે અને આ સુવિધાનું ભવિષ્યમાં સમર્થન કરવાનું અમે વચન આપતા નથી. જોકે અમને આ સુવિધા પર પ્રતિસાદ ગમશે."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"અતિરિક્ત સ્ટોરેજ ચાલુ કરો અને બેકઅપ લો"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"તમારું મેઇલબોક્સ ભરાઇ ગયું છે. સ્થાન ખાલી કરવા માટે, અતિરિક્ત સ્ટોરેજ ખાલી કરો જેથી Google તમારા વૉઇસમેઇલ સંદેશા સંચાલિત કરી અને તેનું બેકઅપ લઈ શકે."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"અતિરિક્ત સ્ટોરેજ ચાલુ કરો અને બેકઅપ લો"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"તમારું મેઇલબોક્સ મોટાંભાગે ભરાઇ ગયું છે. સ્થાન ખાલી કરવા માટે, અતિરિક્ત સ્ટોરેજ ખાલી કરો જેથી Google તમારા વૉઇસમેઇલ સંદેશા સંચાલિત કરી અને તેનું બેકઅપ લઈ શકે."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"તમારો વૉઇસમેઇલ PIN સેટ કરો"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"તમારી વૉઇસમેઇલને ઍક્સેસ કરવા માટે તમે કોઈપણ સમયે કૉલ કરો છો, ત્યારે તમને વૉઇસમેઇલ PIN ની જરૂર પડશે."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"અજાણી ભૂલ"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-hi/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-hi/strings.xml
index 07cc9b70b..bc9c46331 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-hi/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-hi/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"यदि आपका इनबॉक्स भरा हुआ है, तो आप नया वॉइसमेल नहीं प्राप्त कर सकेंगे."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"नए वॉइसमेल प्राप्त नहीं किए जा सकते"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"आपका इनबॉक्स पूरा भर गया है. नया वॉइसमेल प्राप्त करने के लिए कुछ संदेश हटाने का प्रयास करें."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[प्रयोगात्मक] अतिरिक्त जगह और बैकअप चालू करें"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"आपका मेलबॉक्स भर चुका है. जगह खाली करने के लिए, अतिरिक्त मेमोरी चालू करें ताकि Google आपके वॉइसमेल संदेशों को प्रबंधित कर सके और उनका बैक अप ले सके. "<b><i>"इस सुविधा का अभी परीक्षण किया जा रहा है "</i></b>"और हो सकता है कि यह आपके वॉइसमेल सर्वर से वॉइसमेल हटा दे और हम भविष्य में इस सुविधा को देने का वादा नहीं करते. फिर भी आपका फ़ीडबैक हमें अच्छा लगेगा."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[प्रयोगात्मक] अतिरिक्त जगह और बैकअप चालू करें"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"आपका मेलबॉक्स लगभग भर चुका है. जगह खाली करने के लिए, अतिरिक्त मेमोरी चालू करें ताकि Google आपके वॉइसमेल संदेशों को प्रबंधित कर सके और उनका बैक अप ले सके. "<b><i>"इस सुविधा का अभी परीक्षण किया जा रहा है "</i></b>"और हो सकता है कि यह आपके वॉइसमेल सर्वर से वॉइसमेल हटा दे और हम भविष्य में इस सुविधा को देने का वादा नहीं करते. फिर भी आपका फ़ीडबैक हमें अच्छा लगेगा."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"अतिरिक्त जगह और बैकअप चालू करें"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"आपका मेलबॉक्स भर गया है. जगह खाली करने के लिए, अतिरिक्त जगह चालू करें ताकि Google आपके वॉइसमेल संदेशों को प्रबंधित कर सके और उनका बैकअप ले सके."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"अतिरिक्त जगह और बैकअप चालू करें"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"आपका मेलबॉक्स लगभग भर गया है. जगह खाली करने के लिए, अतिरिक्त जगह चालू करें ताकि Google आपके वॉइसमेल संदेशों को प्रबंधित कर सके और उनका बैकअप ले सके."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"अपना वॉइसमेल पिन सेट करें"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"आप जब भी अपना वॉइसमेल एक्सेस करने के लिए कॉल करते हैं, आपको वॉइसमेल पिन की आवश्यकता होगी."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"अज्ञात गड़बड़ी"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-hr/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-hr/strings.xml
index b41443b84..a310d597c 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-hr/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-hr/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Ako je vaša pristigla pošta puna, nećete moći primiti novu govornu poruku."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Primanje nove govorne pošte nije moguće"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Pristigla pošta je puna. Izbrišite neke poruke da biste primili novu govornu poštu."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Eksperimentalno] Uključivanje dodatne pohrane i sigurnosnog kopiranja"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Vaš je poštanski pretinac pun. Da biste oslobodili prostor, uključite dodatnu pohranu tako da Google može upravljati porukama u govornoj pošti i sigurnosno ih kopirati. "<b><i>"Ova se značajka trenutačno testira "</i></b>"i možda će izbrisati poruke govorne pošte s vašeg poslužitelja govorne pošte. Ne možemo obećati da ćemo ovu značajku podržati u budućnosti. Međutim, voljeli bismo dobiti povratne informacije o njoj."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Eksperimentalno] Uključivanje dodatne pohrane i sigurnosnog kopiranja"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Vaš je poštanski pretinac pun. Da biste oslobodili prostor, uključite dodatnu pohranu tako da Google može upravljati porukama u govornoj pošti i sigurnosno ih kopirati. "<b><i>"Ova se značajka trenutačno testira "</i></b>"i možda će izbrisati poruke govorne pošte s vašeg poslužitelja govorne pošte. Ne možemo obećati da ćemo ovu značajku podržati u budućnosti. Međutim, voljeli bismo dobiti povratne informacije o njoj."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Uključivanje dodatne pohrane i sigurnosnog kopiranja"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Vaš je poštanski pretinac pun. Da biste oslobodili prostor, uključite dodatnu pohranu tako da Google može upravljati porukama u govornoj pošti i sigurnosno ih kopirati."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Uključivanje dodatne pohrane i sigurnosnog kopiranja"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Vaš je poštanski pretinac gotovo pun. Da biste oslobodili prostor, uključite dodatnu pohranu tako da Google može upravljati porukama u govornoj pošti i sigurnosno ih kopirati."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Postavljanje PIN-a za govornu poštu"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"PIN za govornu poštu trebat će vam svaki put kad zatražite pristup govornoj pošti."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Nepoznata pogreška"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-hu/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-hu/strings.xml
index 2fc191ae1..cc3eb7ecf 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-hu/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-hu/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Ha a postaláda megtelt, nem fogadhat új hangpostaüzeneteket."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Nem tud új hangpostaüzeneteket fogadni"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"A postaláda megtelt. Ha meg szeretné kapni az új hangpostaüzeneteket, töröljön néhány üzenetet."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Kísérleti] Az extra tárhely és biztonsági mentés bekapcsolása"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"A postafiókja megtelt. Ha szeretne helyet felszabadítani, kapcsolja be az extra tárhely funkciót, így a Google kezelheti az Ön hangposta-üzeneteit, és biztonsági másolatot készíthet róluk. "<b><i>"Ezt a funkciót jelenleg teszteljük"</i></b>", és előfordulhat, hogy letörli az Ön hangüzeneteit a hangpostaszerverről. Nem garantáljuk, hogy a funkció a jövőben is megmarad, de nagy örömmel vennénk, ha megírná róla a véleményét."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Kísérleti] Az extra tárhely és biztonsági mentés bekapcsolása"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"A postafiókja majdnem megtelt. Ha szeretne helyet felszabadítani, kapcsolja be az extra tárhely funkciót, így a Google kezelheti az Ön hangposta-üzeneteit, és biztonsági másolatot készíthet róluk. "<b><i>"Ezt a funkciót jelenleg teszteljük"</i></b>", és előfordulhat, hogy letörli az Ön hangüzeneteit a hangpostaszerverről. Nem garantáljuk, hogy a funkció a jövőben is megmarad, de nagy örömmel vennénk, ha megírná róla a véleményét."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Az extra tárhely és biztonsági mentés bekapcsolása"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"A postaláda betelt. Ha szeretne helyet felszabadítani, kapcsolja be az extra tárhely funkciót, hogy a Google kezelhesse a hangpostaüzeneteket, és biztonsági mentést készíthessen róluk."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Az extra tárhely és biztonsági mentés bekapcsolása"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"A postaláda majdnem betelt. Ha szeretne helyet felszabadítani, kapcsolja be az extra tárhely funkciót, hogy a Google kezelhesse a hangpostaüzeneteket, és biztonsági mentést készíthessen róluk."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"A hangposta PIN-kódjának beállítása"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"A hangpostafiók eléréséhez PIN-kódra van szüksége."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Ismeretlen hiba"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-hy/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-hy/strings.xml
index 435f1242b..4a9c2ed21 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-hy/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-hy/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Եթե մուտքի արկղը լցվի, նոր ձայնային հաղորդագրություններ չեք կարողանա ստանալ:"</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Հնարավոր չէ ստանալ նոր ձայնային հաղորդագրություններ"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Մուտքի արկղը լիքն է: Նոր հաղոդագրություններ ստանալու համար ջնջեք հները:"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Փորձնական գործառույթ] Ակտիվացրեք լրացուցիչ տարածքն ու պահուստավորումը"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Ձեր փոստարկղը լիքն է: Ակտիվացրեք լրացուցիչ տարածք, որպեսզի Google-ը կարողանա կառավարել և պահուստավորել ձեր ձայնային փոստի հաղորդագրությունները: "<b><i>"Այս գործառույթը ներկայումս փորձարկման փուլում է, "</i></b>"և այս ընթացքում ձայնային հաղորդագրությունները ձեր ձայնային փոստի սերվերից կարող են ջնջվել: Մենք չենք կարող խոստանալ, որ այն հետագայում կաջակցվի: Այդուհանդերձ, կցանկանայինք ձեր կարծիքն իմանալ այս գործառույթի մասին:"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Փորձնական գործառույթ] Ակտիվացրեք լրացուցիչ տարածքն ու պահուստավորումը"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Ձեր փոստարկղը գրեթե լիքն է: Ակտիվացրեք լրացուցիչ տարածք, որպեսզի Google-ը կարողանա կառավարել և պահուստավորել ձեր ձայնային փոստի հաղորդագրությունները: "<b><i>"Այս գործառույթը ներկայումս փորձարկման փուլում է, "</i></b>"և այս ընթացքում ձայնային հաղորդագրությունները ձեր ձայնային փոստի սերվերից կարող են ջնջվել: Մենք չենք կարող խոստանալ, որ այն հետագայում կաջակցվի: Այդուհանդերձ, կցանկանայինք ձեր կարծիքն իմանալ այս գործառույթի մասին:"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Պահանջվում է լրացուցիչ տարածք"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Ձեր փոստարկղը լիքն է: Ակտիվացրեք լրացուցիչ տարածք, որպեսզի Google-ը կարողանա կառավարել և պահուստավորել ձեր ձայնային փոստի հաղորդագրությունները:"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Պահանջվում է լրացուցիչ տարածք"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Ձեր փոստարկղը գրեթե լիքն է: Ակտիվացրեք լրացուցիչ տարածք, որպեսզի Google-ը կարողանա կառավարել և պահուստավորել ձեր ձայնային փոստի հաղորդագրությունները:"</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Ընտրել ձեր ձայնային փոստի PIN-ը"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Ամեն անգամ ձայնային փոստին զանգելիս ձեզանից կպահանջվի ձայնային փոստի PIN-ը:"</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Անհայտ սխալ"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-in/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-in/strings.xml
index 5687aa9e2..948afaed4 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-in/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-in/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Pesan suara tidak dapat diterima jika kotak masuk Anda penuh."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Tidak dapat menerima pesan suara baru"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Kotak masuk Anda penuh. Coba hapus beberapa pesan untuk menerima pesan suara baru."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Eksperimental] Aktifkan penyimpanan dan backup ekstra"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Kotak surat Anda penuh. Untuk mengosongkan ruang penyimpanan, aktifkan penyimpanan ekstra sehingga Google dapat mengelola dan mem-backup pesan suara Anda. "<b><i>"Fitur ini sedang diuji "</i></b>"dan berpotensi menghapus pesan suara dari server pesan suara Anda, dan kami tidak berjanji akan mendukung fitur ini di masa mendatang. Namun, kami akan menerima masukan Anda dengan senang hati."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Eksperimental] Aktifkan penyimpanan dan backup ekstra"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Kotak surat Anda hampir penuh. Untuk mengosongkan ruang penyimpanan, aktifkan penyimpanan ekstra agar Google dapat mengelola dan mem-backup pesan suara Anda. "<b><i>"Fitur ini sedang diuji "</i></b>"dan berpotensi menghapus pesan suara dari server pesan suara Anda, dan kami tidak berjanji akan mendukung fitur ini di masa mendatang. Namun, kami akan menerima masukan Anda dengan senang hati."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Aktifkan penyimpanan dan backup ekstra"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Kotak surat Anda sudah penuh. Untuk mengosongkan ruang, aktifkan penyimpanan ekstra sehingga Google dapat mengelola dan melakukan backup pada pesan suara Anda."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Aktifkan penyimpanan dan backup ekstra"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Kotak surat Anda hampir penuh. Untuk mengosongkan ruang, aktifkan penyimpanan ekstra sehingga Google dapat mengelola dan melakukan backup pada pesan suara Anda."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Setel PIN pesan suara Anda"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Anda akan memerlukan PIN pesan suara setiap kali menelepon untuk mengakses pesan suara."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Kesalahan tidak dikenal"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-is/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-is/strings.xml
index 6aeb70fec..ae0497ee3 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-is/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-is/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Þú getur ekki tekið á móti nýjum talhólfsskilaboðum ef pósthólfið er fullt."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Ekki hægt að taka á móti nýjum talhólfsskilaboðum"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Pósthólfið er fullt. Prófaðu að eyða skilaboðum til að taka á móti nýjum talhólfsskilaboðum."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Tilraunaútgáfa] Kveikja á viðbótargeymslu og öryggisafritun"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Pósthólfið er fullt. Kveiktu á viðbótargeymslu svo Google geti haft umsjón með og tekið afrit af talhólfsskilaboðunum þínum. "<b><i>"Verið er að prófa þennan eiginleika "</i></b>"og mögulega gæti talhólfsskilaboðum verið eytt af vefþjóni talhólfsins og við ábyrgjumst ekki að eiginleikinn verði studdur í framtíðinni. Við kunnum virkilega að meta allar ábendingar varðandi þennan eiginleika."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Tilraunaútgáfa] Kveikja á viðbótargeymslu og öryggisafritun"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Pósthólfið er næstum fullt. Kveiktu á viðbótargeymslu svo Google geti haft umsjón með og tekið afrit af talhólfsskilaboðunum þínum. "<b><i>"Verið er að prófa þennan eiginleika "</i></b>"og mögulega gæti talhólfsskilaboðum verið eytt af vefþjóni talhólfsins og við ábyrgjumst ekki að eiginleikinn verði studdur í framtíðinni. Við kunnum virkilega að meta allar ábendingar varðandi þennan eiginleika."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Kveikja á viðbótargeymslu og öryggisafritun"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Pósthólfið þitt er fullt. Þú getur losað pláss með því að kveikja á viðbótargeymslu til að Google geti unnið með og tekið öryggisafrit af talhólfsskilaboðunum þínum."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Kveikja á viðbótargeymslu og öryggisafritun"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Pósthólfið þitt er næstum fullt. Þú getur losað pláss með því að kveikja á viðbótargeymslu til að Google geti unnið með og tekið öryggisafrit af talhólfsskilaboðunum þínum."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Stilla PIN-númer talhólfs"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Þú þarft að nota PIN-númer talhólfsins í hvert skipti sem þú hringir til að athuga það."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Óþekkt villa"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-it/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-it/strings.xml
index e0a4fe946..1df608aed 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-it/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-it/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Se la casella della segreteria è piena non potrai ricevere nuovi messaggi vocali."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Impossibile ricevere nuovi messaggi vocali"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"La casella della segreteria è piena. Prova a eliminare alcuni messaggi per riceverne di nuovi."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Sperimentale] Attiva archiviazione supplementare e backup"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"La tua casella postale è piena. Per liberare spazio, attiva l\'archiviazione supplementare in modo che Google possa gestire i messaggi vocali ed effettuarne il backup. "<b><i>"Questa funzionalità al momento è in fase di test "</i></b>" possibile che i messaggi vocali vengano eliminati dal server della segreteria. Non ci sono garanzie che la funzionalità continui a essere supportata in futuro, ma ci piacerebbe ricevere il tuo feedback."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Sperimentale] Attiva archiviazione supplementare e backup"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"La tua casella postale è quasi piena. Per liberare spazio, attiva l\'archiviazione supplementare in modo che Google possa gestire i messaggi vocali ed effettuarne il backup. "<b><i>"Questa funzionalità al momento è in fase di test "</i></b>"È possibile che i messaggi vocali vengano eliminati dal server della segreteria. Non ci sono garanzie che la funzionalità continui a essere supportata in futuro, ma ci piacerebbe ricevere il tuo feedback."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Attiva spazio di archiviazione supplementare e backup"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"La tua casella di posta e piena. Per liberare spazio, attiva lo spazio di archiviazione supplementare in modo che Google possa gestire i messaggi vocali ed eseguirne il backup."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Attiva spazio di archiviazione supplementare e backup"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"La tua casella di posta e quasi piena. Per liberare spazio, attiva lo spazio di archiviazione supplementare in modo che Google possa gestire i messaggi vocali ed eseguirne il backup."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Imposta il PIN della segreteria"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Dovrai inserire il PIN della segreteria ogni volta che chiami per accedervi."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Errore sconosciuto"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-iw/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-iw/strings.xml
index 17c8e075a..c05a02feb 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-iw/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-iw/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"אם תיבת הדואר הנכנס מלאה, לא תוכל לקבל דואר קולי חדש."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"לא ניתן לקבל הודעות חדשות בדואר הקולי"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"תיבת הדואר הנכנס מלאה. נסה למחוק חלק מההודעות כדי שתוכל לקבל דואר קולי חדש."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[תכונה ניסיונית] הפעל את הגיבוי ופינוי המקום"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"‏תיבת הדואר שלך מלאה. הפעל את התכונה \'גיבוי ופינוי מקום\' כדי ש-Google תוכל לנהל ולגבות את ההודעות הקוליות שלך. "<b><i>"זוהי תכונה ניסיונית"</i></b>" שאנחנו בודקים כרגע. היא עלולה למחוק הודעות קוליות מתא הדואר הקולי שלך בשרת. אנחנו לא מתחייבים שהתכונה תהיה זמינה בעתיד, אך נשמח לקבל עליה משוב."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[תכונה ניסיונית] הפעל את הגיבוי ופינוי המקום"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"‏תיבת הדואר שלך כמעט מלאה. הפעל את התכונה \'גיבוי ופינוי מקום\' כדי ש-Google תוכל לנהל ולגבות את ההודעות הקוליות שלך. "<b><i>"זוהי תכונה ניסיונית"</i></b>" שאנחנו בודקים כרגע. היא עלולה למחוק הודעות קוליות מתא הדואר הקולי שלך בשרת. אנחנו לא מתחייבים שהתכונה תהיה זמינה בעתיד, אך נשמח לקבל עליה משוב."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"הפעל את הגיבוי ופינוי המקום"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"‏תיבת הדואר שלך מלאה. הפעל את הגיבוי ופינוי המקום כדי ש-Google תוכל לנהל ולגבות את ההודעות הקוליות שלך."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"הפעל את הגיבוי ופינוי המקום"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"‏תיבת הדואר שלך כמעט מלאה. הפעל את הגיבוי ופינוי המקום כדי ש-Google תוכל לנהל ולגבות את ההודעות הקוליות שלך."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"הגדר קוד גישה לדואר הקולי"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"בכל פעם שתשתמש בדואר הקולי תצטרך את קוד הגישה."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"שגיאה לא ידועה"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-ja/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-ja/strings.xml
index 41d32b0cc..5d47a9cea 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-ja/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-ja/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"新しいボイスメールを受信できません。受信トレイがいっぱいです。"</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"新しいボイスメールを受信できません"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"受信トレイがいっぱいです。新しいボイスメールを受信するには、古いメッセージをいくつか削除してみてください。"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[試験運用機能] 追加の保存容量とバックアップを ON にしてください"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"メールボックスの容量が上限に達しました。空き容量を増やすには、追加の保存容量を ON にして、Google がボイスメールのメッセージの管理とバックアップを行えるようにしてください。"<b><i>"これは現在テスト中の機能"</i></b>"で、ボイスメール サーバーからボイスメールを削除することができます。今後この機能が正式にサポートされる保証はありませんが、フィードバックをお寄せいただければ幸いです。"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[試験運用機能] 追加の保存容量とバックアップを ON にしてください"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"メールボックスの保存容量がもう少しで上限に達します。空き容量を増やすには、追加の保存容量を ON にして、Google がボイスメールのメッセージの管理とバックアップを行えるようにしてください。"<b><i>"これは現在テスト中の機能"</i></b>"で、ボイスメール サーバーからボイスメールを削除することができます。今後この機能が正式にサポートされる保証はありませんが、フィードバックをお寄せいただければ幸いです。"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"追加の保存容量とバックアップを ON にしてください"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"メールボックスの保存容量が上限に達しました。空き容量を増やすには、追加の保存容量を ON にして、Google がボイスメールのメッセージの管理とバックアップを行えるようにしてください。"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"追加の保存容量とバックアップを ON にしてください"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"メールボックスの保存容量がもう少しで上限に達します。空き容量を増やすには、追加の保存容量を ON にして、Google がボイスメールのメッセージの管理とバックアップを行えるようにしてください。"</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"ボイスメール PIN を設定"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"ボイスメールを呼び出すには、ボイスメール PIN が必要です。"</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"不明なエラー"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-ka/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-ka/strings.xml
index 4990066ea..c5f6a12ca 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-ka/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-ka/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"თუ თქვენი შემოსულები სავსეა, ახალ ხმოვან ფოსტას ვერ მიიღებთ."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"ახალი ხმოვანი ფოსტის მიღება შეუძლებელია"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"თქვენი შემოსულები სავსეა. ახალი ხმოვანი ფოსტის მისაღებად სცადეთ რამდენიმე შეტყობინების წაშლა."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[ექსპერიმენტული] დამატებითი მეხსიერების ჩართვა და სარეზერვო ასლების შექმნა"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"თქვენი საფოსტო ყუთი სავსეა. სივრცის გასათავისუფლებლად ჩართეთ დამატებითი მეხსიერება, რომ Google-მა შეძლოს თქვენი ხმოვანი ფოსტის შეტყობინებების მართვა და სარეზერვო ასლების შექმნა. "<b><i>"ეს ფუნქცია ამჟამად ტესტირების პროცესშია "</i></b>"და, სავარაუდოდ, წაშლის ხმოვან შეტყობინებებს თქვენი ხმოვანი ფოსტის სერვერიდან. ჩვენ ვერ დაგპირდებით, რომ მომავალში ეს ფუნქცია მხარდაჭერილი იქნება. თუმცა ამ ფუნქციის შესახებ გამოხმაურებას ინტერესით გავეცნობოდით."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[ექსპერიმენტული] დამატებითი მეხსიერების ჩართვა და სარეზერვო ასლების შექმნა"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"თქვენი საფოსტო ყუთი თითქმის სავსეა. სივრცის გასათავისუფლებლად ჩართეთ დამატებითი მეხსიერება, რომ Google-მა შეძლოს თქვენი ხმოვანი ფოსტის შეტყობინებების მართვა და სარეზერვო ასლების შექმნა. "<b><i>"ეს ფუნქცია ამჟამად ტესტირების პროცესშია "</i></b>"და, სავარაუდოდ, წაშლის ხმოვან შეტყობინებებს თქვენი ხმოვანი ფოსტის სერვერიდან. ჩვენ ვერ დაგპირდებით, რომ მომავალში ეს ფუნქცია მხარდაჭერილი იქნება. თუმცა ამ ფუნქციის შესახებ გამოხმაურებას ინტერესით გავეცნობოდით."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"დამატებითი მეხსიერების ჩართვა და სარეზერვო ასლების შექმნა"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"თქვენი საფოსტო ყუთი სავსეა. ადგილის გასათავისუფლებლად ჩართეთ დამატებითი მეხსიერება, რათა Google-მა შეძლოს თქვენი ხმოვანი ფოსტის შეტყობინებების მართვა და სარეზერვო ასლების შექმნა."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"დამატებითი მეხსიერების ჩართვა და სარეზერვო ასლების შექმნა"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"თქვენი საფოსტო ყუთი თითქმის სავსეა. ადგილის გასათავისუფლებლად ჩართეთ დამატებითი მეხსიერება, რათა Google-მა შეძლოს თქვენი ხმოვანი ფოსტის შეტყობინებების მართვა და სარეზერვო ასლების შექმნა."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"დააყენეთ თქვენი ხმოვანი ფოსტის PIN-კოდი"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"ნებისმიერ დროს, როდესაც დარეკავთ, რათა ხმოვან ფოსტაზე წვდომა იქონიოთ, ხმოვანი ფოსტის PIN-კოდი დაგჭირდებათ."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"უცნობი შეცდომა"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-kk/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-kk/strings.xml
index f2ea20536..ad164c8fa 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-kk/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-kk/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Кіріс қалтасы толы болса, жаңа дауыстық хабар ала алмайсыз."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Жаңа дауыстық хабарды алу мүмкін емес"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Кіріс қалтасы толы. Жаңа дауыстық хабарды алу үшін кейбір хабарларды жойып көріңіз."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Эксперименттік] Қосымша жадты қосып, сақтық көшірме жасау"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Пошта жәшігі толы. Орын босату үшін, қосымша жад функциясын қосып, Google-ға дауыстық хабарларыңызды басқарып, сақтық көшірмесін жасауға рұқсат беріңіз. "<b><i>"Бұл мүмкіндік қазір тексеріліп жатыр "</i></b>"және ол дауыстық хабарларды дауыстық хабар серверінен өшіруі мүмкін. Сондықтан осы мүмкіндікке алдағы уақытта қолдау көрсетілетініне уәде бермейміз. Сонда да осы мүмкіндікке қатысты пікір алғымыз келеді."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Эксперименттік] Қосымша жадты қосып, сақтық көшірме жасау"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Пошта жәшігі толы. Орын босату үшін, қосымша жад функциясын қосып, Google-ға дауыстық хабарларыңызды басқарып, сақтық көшірмесін жасауға рұқсат беріңіз. "<b><i>"Бұл мүмкіндік қазір тексеріліп жатыр "</i></b>"және ол дауыстық хабарларды дауыстық хабар серверінен өшіруі мүмкін. Сондықтан осы мүмкіндікке алдағы уақытта қолдау көрсетілетініне уәде бермейміз. Сонда да осы мүмкіндікке қатысты пікір алғымыз келеді."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Қосымша жадты қосып, сақтық көшірме жасау"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Кіріс жәшігі толы. Орын босату үшін, қосымша жад функциясын қосып, Google-ға дауыстық хабарларыңызды басқарып, сақтық көшірмесін жасауға рұқсат беріңіз."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Қосымша жадты қосып, сақтық көшірме жасау"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Кіріс жәшігі толы. Орын босату үшін, қосымша жад функциясын қосып, Google-ға дауыстық хабарларыңызды басқарып, сақтық көшірмесін жасауға рұқсат беріңіз."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Дауыстық пошта PIN кодын орнатыңыз"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Дауыстық поштаны тыңдау үшін кез келген уақытта қоңырау шалғанда, дауыстық пошта PIN коды сұралады."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Белгісіз қате"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-km/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-km/strings.xml
index ff2a28378..f0ebf043d 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-km/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-km/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"អ្នក​នឹង​មិន​អាច​ទទួល​សារ​ជា​សំឡេង​ថ្មី​បាន​ទេ បើ​ប្រអប់​សំបុត្រ​របស់​អ្នក​ពេញ។"</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"មិនអាចទទួល​សារជា​សំឡេង​ថ្មី​បាន​ទេ"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"ប្រអប់សំបុត្ររបស់អ្នកពេញ។ សូមព្យាយាមលុបសារមួយចំនួនដើម្បី​អាច​ទទួល​សារជាសំឡេងថ្មី​បាន។"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[ការ​សាកល្បង] បើក​ទំហំ​ផ្ទុក​បន្ថែម រួច​បម្រុងទុក"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"ប្រអប់​​សារ​​របស់​អ្នក​ពេញហើយ។ ដើម្បី​បង្កើន​ទំហំ​ផ្ទុក​ទំនេរ សូម​បើក​ទំហំផ្ទុក​បន្ថែម ដើម្បី​ឲ្យ Google អាច​គ្រប់គ្រង និង​បម្រុងទុក​សារ​សារ​ជា​សំឡេង​របស់​អ្នក​បាន។ "<b><i>"មុខងារ​នេះ​កំពុង​ត្រូវ​បាន​សាកល្បង​នៅ​ពេល​នេះ "</i></b>"ហើយ​អាច​នឹង​លុប​សារ​ជា​សំឡេង​​ពី​ម៉ាស៊ីន​មេ​សារ​ជា​សំឡេង​របស់​អ្នក ហើយ​យើង​​មិន​សន្យា​​​ធ្វើ​ឲ្យ​មុខងារ​នេះ​ដំណើរការ​នៅ​ថ្ងៃ​ក្រោយ​ទេ។ យើង​ចង់​ដឹង​មតិ​ស្ថាបនា​អំពី​មុខងារនេះ​ផង​ដែរ។"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[ការ​សាកល្បង] បើក​ទំហំ​ផ្ទុក​បន្ថែម រួច​បម្រុងទុក"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"ប្រអប់​​សារ​​របស់​អ្នក​ពេញហើយ។ ដើម្បី​បង្កើន​ទំហំ​ផ្ទុក​ទំនេរ សូម​បើក​ទំហំផ្ទុក​បន្ថែម ដើម្បី​ឲ្យ Google អាច​គ្រប់គ្រង និង​បម្រុងទុក​សារ​សារ​ជា​សំឡេង​របស់​អ្នក​បាន។ "<b><i>"មុខងារ​នេះ​កំពុង​ត្រូវ​បាន​សាកល្បង​នៅ​ពេល​នេះ "</i></b>"ហើយ​អាច​នឹង​លុប​សារ​ជា​សំឡេង​​ពី​ម៉ាស៊ីន​មេ​សារ​ជា​សំឡេង​របស់​អ្នក ហើយ​យើង​​មិន​សន្យា​​​ធ្វើ​ឲ្យ​មុខងារ​នេះ​ដំណើរការ​នៅ​ថ្ងៃ​ក្រោយ​ទេ។ យើង​ចង់​ដឹង​មតិ​ស្ថាបនា​អំពី​មុខងារនេះផង​ដែរ។"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"បើក​ទំហំ​ផ្ទុក​បន្ថែម រួច​បម្រុងទុក"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"ប្រអប់​​សារ​​របស់​អ្នក​ពេញហើយ។ ដើម្បី​បង្កើន​ទំហំ​ផ្ទុក​ទំនេរ សូម​បើក​ទំហំផ្ទុក​បន្ថែម ដើម្បី​ឲ្យ Google អាច​គ្រប់គ្រង និង​បម្រុងទុក​សារ​សារ​ជា​សំឡេង​របស់​អ្នក​បាន។"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"បើក​ទំហំ​ផ្ទុក​បន្ថែម រួច​បម្រុងទុក"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"ប្រអប់​សារ​របស់​អ្នក​ពេញហើយ។ ដើម្បី​បង្កើន​ទំហំ​ផ្ទុក​ទំនេរ សូម​បើក​ទំហំផ្ទុក​បន្ថែម ដើម្បី​ឲ្យ Google អាច​គ្រប់គ្រង និង​បម្រុងទុក​សារ​សារ​ជា​សំឡេង​របស់​អ្នក​បាន។"</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"កំណត់កូដ PIN ​សារ​ជាសំឡេង​របស់​អ្នក"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"អ្នក​នឹង​ត្រូវការកូដ PIN សារ​ជាសំឡេងមួយ ​គ្រប់​ពេល​ដែល​អ្នក​ហៅ ​​ដើម្បី​ចូល​ដំណើរការ​សារ​ជា​សំឡេង​របស់​អ្នក។"</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"បញ្ហាមិនស្គាល់"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-kn/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-kn/strings.xml
index bf6390349..7840fca9a 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-kn/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-kn/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"ನಿಮ್ಮ ಇನ್‌ಬಾಕ್ಸ್ ಪೂರ್ಣವಾಗಿದ್ದಾಗ ಹೊಸ ಧ್ವನಿಮೇಲ್‌ ಅನ್ನು ಸ್ವೀಕರಿಸಲು ನಿಮಗೆ ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"ಹೊಸ ಧ್ವನಿಮೇಲ್‌‌ಗಳನ್ನು ಸ್ವೀಕರಿಸಲಾಗುವುದಿಲ್ಲ"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"ನಿಮ್ಮ ಇನ್‌ಬಾಕ್ಸ್‌ ಪೂರ್ಣವಾಗಿದೆ. ಹೊಸ ಧ್ವನಿಮೇಲ್‌ ಸ್ವೀಕರಿಸಲು ಕೆಲವು ಸಂದೇಶಗಳನ್ನು ಅಳಿಸಲು ಪ್ರಯತ್ನಿಸಿ."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[ಪ್ರಾಯೋಗಿಕ] ಹೆಚ್ಚುವರಿ ಸಂಗ್ರಹಣೆ ಮತ್ತು ಬ್ಯಾಕಪ್ ಅನ್ನು ಆನ್ ಮಾಡಿ"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"ನಿಮ್ಮ ಮೇಲ್‌ಬಾಕ್ಸ್ ತುಂಬಿದೆ. ಸ್ಥಳಾವಕಾಶವನ್ನು ತೆರವುಗೊಳಿಸಲು, ಹೆಚ್ಚುವರಿ ಸಂಗ್ರಹಣೆಯನ್ನು ಆನ್ ಮಾಡಿ ಇದರಿಂದ Google ನಿಮ್ಮ ಧ್ವನಿಮೇಲ್ ಸಂದೇಶಗಳನ್ನು ನಿರ್ವಹಿಸಬಹುದು ಮತ್ತು ಬ್ಯಾಕಪ್ ಮಾಡಬಹುದು. "<b><i>"ಈ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಪ್ರಸ್ತುತ ಪರೀಕ್ಷೆ ಮಾಡಲಾಗುತ್ತಿದೆ "</i></b>"ಮತ್ತು ನಿಮ್ಮ ಧ್ವನಿಮೇಲ್ ಸರ್ವರ್‌ನಿಂದ ಧ್ವನಿಮೇಲ್‌ಗಳನ್ನು ಸಂಭಾವ್ಯವಾಗಿ ಅಳಿಸುತ್ತದೆ ಮತ್ತು ನಾವು ಭವಿಷ್ಯದಲ್ಲಿ ಈ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಬೆಂಬಲಿಸುವ ಭರವಸೆಯನ್ನು ನೀಡುವುದಿಲ್ಲ. ಆದರೂ ನಿಮ್ಮ ಪ್ರತಿಕ್ರಿಯೆಗೆ ಸ್ವಾಗತ."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[ಪ್ರಾಯೋಗಿಕ] ಹೆಚ್ಚುವರಿ ಸಂಗ್ರಹಣೆ ಮತ್ತು ಬ್ಯಾಕಪ್ ಅನ್ನು ಆನ್ ಮಾಡಿ"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"ನಿಮ್ಮ ಮೇಲ್‌ಬಾಕ್ಸ್ ಬಹುತೇಕ ತುಂಬಿದೆ. ಸ್ಥಳಾವಕಾಶವನ್ನು ತೆರವುಗೊಳಿಸಲು, ಹೆಚ್ಚುವರಿ ಸಂಗ್ರಹಣೆಯನ್ನು ಆನ್ ಮಾಡಿ ಇದರಿಂದ Google ನಿಮ್ಮ ಧ್ವನಿಮೇಲ್ ಸಂದೇಶಗಳನ್ನು ನಿರ್ವಹಿಸಬಹುದು ಮತ್ತು ಬ್ಯಾಕಪ್ ಮಾಡಬಹುದು. "<b><i>"ಈ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಪ್ರಸ್ತುತವಾಗಿ ಪರೀಕ್ಷೆ ಮಾಡಲಾಗುತ್ತಿದೆ "</i></b>"ಮತ್ತು ನಿಮ್ಮ ಧ್ವನಿಮೇಲ್ ಸರ್ವರ್‌ನಿಂದ ಧ್ವನಿಮೇಲ್‌ಗಳನ್ನು ಸಂಭಾವ್ಯವಾಗಿ ಅಳಿಸುತ್ತದೆ ಮತ್ತು ನಾವು ಭವಿಷ್ಯದಲ್ಲಿ ಈ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಬೆಂಬಲಿಸುವ ಭರವಸೆಯನ್ನು ನೀಡುವುದಿಲ್ಲ. ಆದರೂ ನಿಮ್ಮ ಪ್ರತಿಕ್ರಿಯೆಗೆ ಸ್ವಾಗತ."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"ಹೆಚ್ಚುವರಿ ಸಂಗ್ರಹಣೆ ಮತ್ತು ಬ್ಯಾಕಪ್ ಅನ್ನು ಆನ್ ಮಾಡಿ"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"ನಿಮ್ಮ ಮೇಲ್‌ಬಾಕ್ಸ್ ತುಂಬಿದೆ. ಸ್ಥಳಾವಕಾಶವನ್ನು ತೆರವುಗೊಳಿಸಲು, ಹೆಚ್ಚುವರಿ ಸಂಗ್ರಹವನ್ನು ಆನ್ ಮಾಡಿಕೊಳ್ಳುವ ಮೂಲಕ Google ನಿಮ್ಮ ಧ್ವನಿಮೇಲ್ ಸಂದೇಶಗಳನ್ನು ನಿರ್ವಹಿಸಬಹುದು ಮತ್ತು ಬ್ಯಾಕಪ್ ಮಾಡಬಹುದು."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"ಹೆಚ್ಚುವರಿ ಸಂಗ್ರಹಣೆ ಮತ್ತು ಬ್ಯಾಕಪ್ ಅನ್ನು ಆನ್ ಮಾಡಿ"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"ನಿಮ್ಮ ಮೇಲ್‌ಬಾಕ್ಸ್ ಬಹುತೇಕ ತುಂಬಿದೆ. ಸ್ಥಳಾವಕಾಶವನ್ನು ತೆರವುಗೊಳಿಸಲು, ಹೆಚ್ಚುವರಿ ಸಂಗ್ರಹವನ್ನು ಆನ್ ಮಾಡಿಕೊಳ್ಳುವ ಮೂಲಕ Google ನಿಮ್ಮ ಧ್ವನಿಮೇಲ್ ಸಂದೇಶಗಳನ್ನು ನಿರ್ವಹಿಸಬಹುದು ಮತ್ತು ಬ್ಯಾಕಪ್ ಮಾಡಬಹುದು."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"ನಿಮ್ಮ ಧ್ವನಿಮೇಲ್ ಪಿನ್ ಹೊಂದಿಸಿ"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"ನೀವು ಕರೆ ಮಾಡಿದಾಗ ನಿಮ್ಮ ಧ್ವನಿಮೇಲ್ ಪ್ರವೇಶಿಸಲು ನಿಮಗೆ ಯಾವಾಗಲೂ ಧ್ವನಿಮೇಲ್‌ ಪಿನ್ ಅಗತ್ಯವಿರುತ್ತದೆ."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"ಅಪರಿಚಿತ ದೋಷ"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-ko/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-ko/strings.xml
index fc4385b99..092214db1 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-ko/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-ko/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"받은편지함이 가득 차면 새로운 음성메시지를 받을 수 없습니다."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"새로운 음성메시지를 받을 수 없음"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"받은편지함이 가득 찼습니다. 새로운 음성메시지를 받으려면 일부 메시지를 삭제해 보세요."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[실험] 추가 저장용량 및 백업 사용 설정"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"편지함이 가득 찼습니다. 여유 공간을 확보하려면 Google에서 음성사서함 메시지를 관리하고 백업할 수 있도록 추가 저장용량을 사용 설정해 주세요. "<b><i>"이 기능은 현재 테스트 단계이며 "</i></b>"이 기능으로 인해 음성사서함 서버에서 메시지가 삭제될 수도 있습니다. 또한 Google에서는 추후 이 기능이 지원된다고 보장할 수 없습니다. 하지만 이 기능에 관해 의견을 주시면 감사하겠습니다."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[실험] 추가 저장용량 및 백업 사용 설정"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"사서함이 거의 가득 찼습니다. 여유 공간을 확보하려면 Google에서 음성사서함 메시지를 관리하고 백업할 수 있도록 추가 저장용량을 사용 설정해 주세요. "<b><i>"이 기능은 현재 테스트 단계이며 "</i></b>"이 기능으로 인해 음성사서함 서버에서 메시지가 삭제될 수도 있습니다. 또한 Google에서는 추후 이 기능이 지원된다고 보장할 수 없습니다. 하지만 이 기능에 관해 의견을 주시면 감사하겠습니다."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"추가 저장용량 및 백업 사용"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"음성사서함이 가득 찼습니다. Google에서 음성사서함 메시지를 관리하고 백업할 수 있도록 추가 저장용량을 사용 설정하여 여유 공간을 확보하세요."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"추가 저장용량 및 백업 사용"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"음성사서함이 거의 가득 찼습니다. Google에서 음성사서함 메시지를 관리하고 백업할 수 있도록 추가 저장용량을 사용 설정하여 여유 공간을 확보하세요."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"음성사서함 PIN 설정"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"음성사서함에 액세스하도록 호출할 때마다 음성사서함 PIN이 필요합니다."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"알 수 없는 오류"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-ky/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-ky/strings.xml
index 096b29288..0fffb06d0 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-ky/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-ky/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Почтаңыз толуп калса, жаңы үн каттарын ала албай каласыз."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Жаңы үн каттары алынбай жатат"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"\"Келген каттар\" кутуңуз толуп калды. Үн каттарын алуу үчүн айрым билдирүүлөрдү өчүрүңүз."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Эксперименталдык] Кошумча мейкиндик жана камдык көчүрмөнү сактоону кошуңуз"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Үн почтаңызда бош орун жок. Үн каттарыңызды башкаруу жана алардын камдык көчүрмөлөрүн сактоо үчүн кошумча мейкиндикти күйгүзүп коюңуз. "<b><i>"Бул функция учурда сыноодон өтүп жатат "</i></b>"жана үн почтаңыздын сервериндеги үн каттарды өчүрүп салышы мүмкүн. Кийин бул функцияны колдоого алаарыбызга кепилдик бере албайбыз. Ошентсе да, функция тууралуу пикириңизди билгибиз келет."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Эксперименталдык] Кошумча мейкиндик жана камдык көчүрмөнү сактоону кошуңуз"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Үн почтаңыз толуп калды. Үн каттарыңызды башкаруу жана алардын камдык көчүрмөлөрүн сактоо үчүн кошумча мейкиндикти күйгүзүп коюңуз. "<b><i>"Бул функция учурда сыноодон өтүп жатат "</i></b>"жана үн почтаңыздын сервериндеги үн каттарды өчүрүп салышы мүмкүн. Кийин бул функцияны колдоого алаарыбызга кепилдик бере албайбыз. Ошентсе да, функция тууралуу пикириңизди билгибиз келет."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Кошумча мейкиндик талап кылынат"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Үн почтаңызда бош орун жок. Үн каттарыңызды башкаруу жана алардын камдык көчүрмөлөрүн сактоо үчүн кошумча мейкиндикти күйгүзүп коюңуз."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Кошумча мейкиндик талап кылынат"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Үн почтаңыз толуп калды. Үн каттарыңызды башкаруу жана алардын камдык көчүрмөлөрүн сактоо үчүн кошумча мейкиндикти күйгүзүп коюңуз."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Үн почтаңыздын PIN-кодун орнотуңуз"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"PIN-код ар чалган сайын үн почтаңызды угуу үчүн керек."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Белгисиз ката"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-lo/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-lo/strings.xml
index bea11800c..d6293d2e7 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-lo/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-lo/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"ທ່ານຈະບໍ່ສາມາດຮັບຂໍ້ຄວາມສຽງໃໝ່ໄດ້ຫາກອິນບັອກຂອງທ່ານເຕັມ."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"ບໍ່ສາມາດຮັບຂໍ້ຄວາມສຽງໃໝ່"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"ອິນບັອກຂອງທ່ານເຕັມແລ້ວ. ໃຫ້ລອງລຶບບາງຂໍ້ຄວາມອອກເພື່ອຮັບຂໍ້ຄວາມສຽງໃໝ່."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[ການທົດລອງ] ການສຳຮອງ ແລະ ບ່ອນຈັດເກັບຂໍ້ມູນພິເສດ"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Your mailbox is full. To free up space, turn on extra storage so Google can manage and backup your voicemail messages. "<b><i>"This feature is currently being tested "</i></b>"and will potentially delete voicemails from your voicemail server, and we do not promise to support this feature in the future. We would love your feedback though."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[ການທົດລອງ] ການສຳຮອງ ແລະ ບ່ອນຈັດເກັບຂໍ້ມູນພິເສດ"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"ກ່ອງອີເມວຂອງທ່ານເຕັມແລ້ວ. ເພື່ອສ້າງພື້ນທີ່ຫວ່າງ, ໃຫ້ເປີດໃຊ້ບ່ອນຈັດເກັບຂໍ້ມູນພິເສດເພື່ອໃຫ້ Google ສາມາດຈັດການ ແລະ ສຳຮອງຂໍ້ຄວາມສຽງຂອງທ່ານໄດ້. "<b><i>"ຄຸນສົມບັດນີ້ກຳລັງຢູ່ໃນລະຫວ່າງການທົດສອບ "</i></b>"ແລະ ມັນອາດລຶບຂໍ້ຄວາມສຽງອອກຈາກເຊີບເວີຂໍ້ຄວາມສຽງຂອງທ່ານໄດ້. ຈະບໍ່ມີການຮັບປະກັນການຊ່ວຍເຫຼືອຄຸນສົມບັດນີ້ໃນອະນາຄົດ. ຢ່າງໃດກໍຕາມພວກເຮົາຢາກຟັງຄຳຄິດເຫັນທີ່ມີຕໍ່ຄຸນສົມບັດດັ່ງກ່າວຈາກທ່ານ."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"ເປີດໃຊ້ບ່ອນຈັດເກັບຂໍ້ມູນເພີ່ມເຕີມ ແລະ ການສຳຮອງຂໍ້ມູນ"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"ກ່ອງອີເມວຂອງທ່ານເຕັມແລ້ວ. ເພື່ອເພີ່ມບ່ອນຈັດເກັບຂໍ້ມູນ, ໃຫ້ເປີດໃຊ້ບ່ອນຈັດເກັບຂໍ້ມູນເພີ່າມເຕີມເພື່ອໃຫ້ Google ສາມາດຈັດການ ແລະ ສຳຮອງຂໍ້ມູນຂໍ້ຄວາມສຽງຂອງທ່ານໄດ້."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"ເປີດໃຊ້ບ່ອນຈັດເກັບຂໍ້ມູນເພີ່ມເຕີມ ແລະ ການສຳຮອງຂໍ້ມູນ"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"ກ່ອງອີເມວຂອງທ່ານໃກ້ເຕັມແລ້ວ. ເພື່ອເພີ່ມບ່ອນຈັດເກັບຂໍ້ມູນ, ໃຫ້ເປີດໃຊ້ບ່ອນຈັດເກັບຂໍ້ມູນເພີ່າມເຕີມເພື່ອໃຫ້ Google ສາມາດຈັດການ ແລະ ສຳຮອງຂໍ້ມູນຂໍ້ຄວາມສຽງຂອງທ່ານໄດ້."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"ຕັ້ງລະຫັດ PIN ຂໍ້ຄວາມສຽງຂອງທ່ານ"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"ທ່ານຈະຕ້ອງໃຊ້ລະຫັດ PIN ໃນຕອນໃດກໍຕາມທີ່ທ່ານໂທເພື່ອເຂົ້າຟັງຂໍ້ຄວາມສຽງຂອງທ່ານ."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"ຄວາມຜິດພາດທີ່ບໍ່ຮູ້ຈັກ"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-lt/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-lt/strings.xml
index 8b4c63989..92f3316d4 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-lt/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-lt/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Negalėsite gauti naujų balso pašto pranešimų, jei gautuosiuose nebeliks laisvos vietos."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Nepavyksta gauti naujų balso pašto pranešimų"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Gautuosiuose nebėra laisvos vietos. Kad galėtumėte gauti naujus balso pašto pranešimus, pabandykite ištrinti keletą pranešimų."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Eksperimentinė] Įjunkite papildomos saugyklos vietos ir atsarginių kopijų kūrimo funkciją"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Pašto dėžutė pilna. Jei norite atlaisvinti vietos, įjunkite papildomos saugyklos vietos parinktį, kad „Google“ galėtų tvarkyti balso pašto pranešimus ir kurti atsargines jų kopijas. "<b><i>"Ši funkcija šiuo metu išbandoma "</i></b>"ir ją naudojant iš balso pašto serverio bus ištrinami balso pašto pranešimai. Nepažadame, kad ateityje ši funkcija bus palaikoma, tačiau norėtume gauti atsiliepimų apie ją."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Eksperimentinė] Įjunkite papildomos saugyklos vietos ir atsarginių kopijų kūrimo funkciją"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Pašto dėžutė beveik pilna. Jei norite atlaisvinti vietos, įjunkite papildomos saugyklos vietos parinktį, kad „Google“ galėtų tvarkyti balso pašto pranešimus ir kurti atsargines jų kopijas. "<b><i>"Ši funkcija šiuo metu išbandoma "</i></b>"ir ją naudojant iš balso pašto serverio bus ištrinami balso pašto pranešimai. Nepažadame, kad ateityje ši funkcija bus palaikoma, tačiau norėtume gauti atsiliepimų apie ją."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Įjunkite papildomos saugyklos vietos ir atsarginės kopijos kūrimo parinktį"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Jūsų pašto dėžutė pilna. Jei norite atlaisvinti vietos, įjunkite papildomos saugyklos vietos parinktį, kad „Google“ galėtų tvarkyti balso pašto pranešimus ir kurti atsargines jų kopijas."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Įjunkite papildomos saugyklos vietos ir atsarginės kopijos kūrimo parinktį"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Jūsų pašto dėžutė beveik pilna. Jei norite atlaisvinti vietos, įjunkite papildomos saugyklos vietos parinktį, kad „Google“ galėtų tvarkyti balso pašto pranešimus ir kurti atsargines jų kopijas."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Nustatyti balso pašto PIN kodą"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Jums reikės balso pašto PIN kodo visada, kai skambinsite norėdami pasiekti balso paštą."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Nežinoma klaida"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-lv/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-lv/strings.xml
index cd8ed7a6d..e27de6f21 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-lv/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-lv/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Jūs nevarēsiet saņemt jaunus balss pasta ziņojumus, ja iesūtne ir pilna."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Nevar saņemt balss pasta ziņojumus."</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Iesūtne ir pilna. Izdzēsiet dažus ziņojumus, lai saņemtu jaunus balss pasta ziņojumus."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Eksperimentāli] Papildu krātuves un dublēšanas aktivizēšana"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Jūsu pastkaste ir pilna. Lai atbrīvotu vietu un Google varētu pārvaldīt un dublēt jūsu balss pasta ziņojumus, aktivizējiet papildu krātuvi. "<b><i>"Šī funkcija pašlaik tiek testēta, "</i></b>"un pastāv iespēja, ka no jūsu balss pasta servera tiks izdzēsti balss pasta ziņojumi. Mēs negarantējam šīs funkcijas turpmāku atbalstu, tomēr priecāsimies saņemt atsauksmes par to."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Eksperimentāli] Papildu krātuves un dublēšanas aktivizēšana"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Jūsu pastkaste ir gandrīz pilna. Lai atbrīvotu vietu un Google varētu pārvaldīt un dublēt jūsu balss pasta ziņojumus, aktivizējiet papildu krātuvi. "<b><i>"Šī funkcija pašlaik tiek testēta, "</i></b>"un pastāv iespēja, ka no jūsu balss pasta servera tiks izdzēsti balss pasta ziņojumi. Mēs negarantējam šīs funkcijas turpmāku atbalstu, tomēr priecāsimies saņemt atsauksmes par to."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Papildu krātuves un dublēšanas aktivizēšana"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Jūsu pastkaste ir pilna. Lai atbrīvotu vietu un Google varētu pārvaldīt un dublēt jūsu balss pasta ziņojumus, aktivizējiet papildu krātuvi."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Papildu krātuves un dublēšanas aktivizēšana"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Jūsu pastkaste ir gandrīz pilna. Lai atbrīvotu vietu un Google varētu pārvaldīt un dublēt jūsu balss pasta ziņojumus, aktivizējiet papildu krātuvi."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Balss pasta PIN iestatīšana"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Lai piekļūtu balss pastam zvanot, būs vajadzīgs balss pasta PIN."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Nezināma kļūda"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-mk/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-mk/strings.xml
index 19aaa42aa..3ff8b8739 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-mk/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-mk/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Нема да може да добивате нова говорна пошта ако вашето приемно сандаче е полно."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Не може да добивате нова говорна пошта"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Вашето приемно сандаче е полно. Обидете се да избришете неколку пораки за да добиете нова говорна пошта."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Експериментално] Вклучете дополнителен простор и бекап"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Вашето поштенско сандаче е полно. За да ослободите простор, вклучете дополнителен простор за да може Google да управува и да прави бекап на пораките од вашата говорна пошта. "<b><i>"Функцијава е во фаза на тестирање во моментов "</i></b>"и постои можност да брише говорни пораки од вашиот сервер за говорна пошта. Не ветуваме поддршка за функцијава во иднина. Сепак, многу би ни значеле вашите повратни информации."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Експериментално] Вклучете дополнителен простор и бекап"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Вашето поштенско сандаче е речиси полно. За да ослободите простор, вклучете дополнителен простор за да може Google да управува и да прави бекап на пораките од вашата говорна пошта. "<b><i>"Функцијава е во фаза на тестирање во моментов "</i></b>"и постои можност да брише говорни пораки од вашиот сервер за говорна пошта. Не ветуваме поддршка за функцијава во иднина. Сепак, многу би ни значеле вашите повратни информации."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Вклучете дополнителен простор и бекап"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Вашето поштенско сандаче е полно. За да ослободите простор, вклучете дополнителен простор за да може Google да управува и да прави бекап на пораките од вашата говорна пошта."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Вклучете дополнителен простор и бекап"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Вашето поштенско сандаче е речиси полно. За да ослободите простор, вклучете дополнителен простор за да може Google да управува и да прави бекап на пораките од вашата говорна пошта."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Поставете PIN за говорната пошта"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Секогаш кога ќе повикате за да пристапите до говорната пошта, ќе треба да внесете PIN за говорна пошта."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Непозната грешка"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-ml/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-ml/strings.xml
index 896b77036..84d221e3d 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-ml/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-ml/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"ഇൻബോക്‌സ്‌ നിറഞ്ഞിരിക്കുകയാണെങ്കിൽ നിങ്ങൾക്ക് പുതിയ വോയ്‌സ്‌മെയിൽ സ്വീകരിക്കാനാവില്ല."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"പുതിയ വോയ്‌സ്‌മെയിലുകൾ സ്വീകരിക്കാനാകുന്നില്ല"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"നിങ്ങളുടെ ഇൻബോക്‌സ്‌ നിറഞ്ഞിരിക്കുകയാണ്. പുതിയ വോയ്‌സ്‌മെയിൽ സ്വീകരിക്കാൻ ചില സന്ദേശങ്ങൾ ഇല്ലാതാക്കുന്നത് പരീക്ഷിച്ചുനോക്കൂ."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[പരീക്ഷണാത്മകം] അധിക സ്‌റ്റോറേജും ബായ്‌ക്കപ്പും ഓണാക്കുക"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"നിങ്ങളുടെ മെയിൽബോക്‌സ് നിറഞ്ഞിരിക്കുന്നു. ഇടം സൃഷ്‌ടിക്കാൻ അധിക സ്‌റ്റോറേജ് ഓണാക്കുക, തുടർന്ന് Google-ന് നിങ്ങളുടെ വോയ്‌സ്‌മെയിൽ സന്ദേശങ്ങൾ മാനേജുചെയ്യാനും ബായ്‌ക്കപ്പെടുക്കാനുമാകും. "<b><i>"നിലവിൽ ഈ ഫീച്ചർ പരീക്ഷണ ഘട്ടത്തിലായതിനാൽ "</i></b>"നിങ്ങളുടെ വോയ്‌സ്‌മെയിൽ സെർവറിലെ വോയ്‌സ്‌മെയിലുകൾ ഇല്ലാതാക്കാൻ സാധ്യതയുണ്ട്, ഒപ്പം ഭാവിയിൽ ഈ ഫീച്ചർ ഉപയോഗിക്കാനാവുമെന്നും ഞങ്ങൾ ഉറപ്പുനൽകുന്നില്ല. എങ്കിലും ഇതിനെക്കുറിച്ചുള്ള ഫീഡ്‌ബാക്ക് അറിയാൻ ഞങ്ങൾ താൽപ്പര്യപ്പെടുന്നു."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[പരീക്ഷണാത്മകം] അധിക സ്‌റ്റോറേജും ബായ്‌ക്കപ്പും ഓണാക്കുക"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"നിങ്ങളുടെ മെയിൽബോക്‌സ്‌ ഏകദേശം നിറഞ്ഞിരിക്കുന്നു. ഇടം സൃഷ്‌ടിക്കാൻ അധിക സ്‌റ്റോറേജ് ഓണാക്കുക, തുടർന്ന് Google-ന് നിങ്ങളുടെ വോയ്‌സ്‌മെയിൽ സന്ദേശങ്ങൾ മാനേജുചെയ്യാനും ബായ്‌ക്കപ്പെടുക്കാനുമാകും. "<b><i>"നിലവിൽ ഈ ഫീച്ചർ പരീക്ഷണ ഘട്ടത്തിലായതിനാൽ "</i></b>"നിങ്ങളുടെ വോയ്‌സ്‌മെയിൽ സെർവറിലെ വോയ്‌സ്‌മെയിലുകൾ ഇല്ലാതാക്കാൻ സാധ്യതയുണ്ട്, ഒപ്പം ഭാവിയിൽ ഈ ഫീച്ചർ ഉപയോഗിക്കാനാവുമെന്നും ഞങ്ങൾ ഉറപ്പുനൽകുന്നില്ല. എങ്കിലും ഇതിനെക്കുറിച്ചുള്ള ഫീഡ്‌ബാക്ക് അറിയാൻ ഞങ്ങൾ താൽപ്പര്യപ്പെടുന്നു."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"അധിക സ്‌റ്റോറേജും ബായ്‌ക്കപ്പും ഓണാക്കുക"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"നിങ്ങളുടെ മെയിൽബോക്‌സ് നിറഞ്ഞിരിക്കുന്നു. ഇടം സൃഷ്‌ടിക്കാൻ, അധിക സ്‌റ്റോറേജ് ഓണാക്കുക, തുടർന്ന് Google-ന് നിങ്ങളുടെ വോയ്‌സ്‌മെയിൽ സന്ദേശങ്ങൾ മാനേജുചെയ്യാനും ബായ്‌ക്കപ്പെടുക്കാനുമാകും."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"അധിക സ്‌റ്റോറേജും ബായ്‌ക്കപ്പും ഓണാക്കുക"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"നിങ്ങളുടെ മെയിൽബോക്‌സ്‌ ഏകദേശം നിറഞ്ഞിരിക്കുന്നു. ഇടം സൃഷ്‌ടിക്കാൻ അധിക സ്‌റ്റോറേജ് ഓണാക്കുക, തുടർന്ന് Google-ന് നിങ്ങളുടെ വോയ്‌സ്‌മെയിൽ സന്ദേശങ്ങൾ മാനേജുചെയ്യാനും ബായ്‌ക്കപ്പെടുക്കാനുമാകും."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"നിങ്ങളുടെ വോയ്‌സ്മെയിൽ പിൻ സജ്ജമാക്കുക"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"വോയ്‌സ്മെയിൽ ആക്‌സസ് ചെയ്യാൻ ശ്രമിക്കുമ്പോഴെല്ലാം നിങ്ങൾക്കൊരു വോയ്‌സ്‌മെയിൽ പിൻ ആവശ്യമാണ്."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"തിരിച്ചറിയാനാകാത്ത പിശക്"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-mn/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-mn/strings.xml
index b4b01f7dc..99fc29dc3 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-mn/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-mn/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Ирсэн имэйл хайрцаг дүүрсэн бол та шинэ дуут шуудан хүлээж авах боломжгүй."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Шинэ дуут шуудан хүлээж авах боломжгүй"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Таны ирсэн имэйл хайрцаг дүүрэн байна. Шинэ дуут шуудан авахын тулд зарим зурвасыг устгаж үзнэ үү."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Туршилтын] Гадаад хадгалах сан болон нөөцлөлтийг асаана уу"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Таны имэйл хайрцаг дүүрсэн байна. Сул зай гаргахын тулд гадаад хадгалах санг асааж өөрийн дуут шуудангийн зурвасуудыг удирдах, нөөцлөх боломжийг Google-д олгоно уу."<b><i>"Энэ функцийг одоо шалгаж байгаа"</i></b>" бөгөөд таны дуут шуудангийн серверээс дуут шуудангуудыг устгах магадлалтай, бид цаашид энэ функцийг дэмжинэ гэсэн баталгаа өгөхгүй. Гэхдээ энэ функцийн талаар санал хүсэлт илгээвэл талархах болно."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Туршилтын] Гадаад хадгалах сан болон нөөцлөлтийг асаана уу"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Таны имэйл хайрцаг дүүрсэн байна. Сул зай гаргахын тулд гадаад хадгалах санг асааж өөрийн дуут шуудангийн зурвасуудыг удирдах, нөөцлөх боломжийг Google-д олгоно уу."<b><i>"Энэ функцийг одоо шалгаж байгаа"</i></b>" бөгөөд таны дуут шуудангийн серверээс дуут шуудангуудыг устгах магадлалтай, бид цаашид энэ функцийг дэмжинэ гэсэн баталгаа өгөхгүй. Гэхдээ энэ функцийн талаар санал хүсэлт илгээвэл талархах болно."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Гадаад хадгалах сан болон нөөцлөлтийг асаана уу"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Таны имэйл хайрцаг дүүрсэн байна. Сул зай гаргахын тулд гадаад хадгалах санг асааж өөрийн дуут шуудангийн зурвасуудыг удирдах, нөөцлөх боломжийг Google-д олгоно уу."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Гадаад хадгалах сан болон нөөцлөлтийг асаана уу"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Таны имэйл хайрцаг бараг дүүрсэн байна. Сул зай гаргахын тулд гадаад хадгалах санг асааж өөрийн дуут шуудангийн зурвасуудыг удирдах, нөөцлөх боломжийг Google-д олгоно уу."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Өөрийн дуут шуудангийн PIN-г тохируулна уу"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Та дуут шуудандаа хандахаар дуудлага хийх бүрт дуут шуудангийн PIN шаардлагатай болно."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Тодорхойгүй алдаа"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-mr/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-mr/strings.xml
index 04f48b843..43c8bddbf 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-mr/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-mr/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"आपला इनबॉक्स भरलेला असल्यास आपण नवीन व्हॉइसमेल प्राप्त करण्यात सक्षम असणार नाही."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"नवीन व्हॉइसमेल प्राप्त करू शकत नाही"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"आपला इनबॉक्स भरलेला आहे. नवीन व्हॉइसमेल प्राप्त करण्यासाठी काही संदेश हटविण्याचा प्रयत्न करा."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[प्रायोगिक] अतिरिक्त संचय आणि बॅक अप चालू करा"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"आपला मेलबॉक्स पूर्ण भरला आहे. स्थान मोकळे करण्यासाठी, अतिरिक्त संचय चालू करा त्यामुळे Google आपले व्हॉइसमेल संदेश व्यवस्थापित करू शकते आणि त्यांचा बॅक अप घेऊ शकते. "<b><i>"या वैशिष्ट्याची सध्‍या चाचणी घेतली जात आहे "</i></b>"आणि आपल्या व्हॉइसमेल सर्व्हर मधून संभाव्यपणे व्हॉइसमेल हटवेल आणि आम्ही भविष्‍यात या वैशिष्‍ट्यास समर्थन देण्याचे वचन देत नाही. तरीही आम्ही आपला अभिप्राय घेऊ इच्छितो."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[प्रायोगिक] अतिरिक्त संचय आणि बॅक अप चालू करा"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"आपला मेलबॉक्स जवळजवळ पूर्ण भरला आहे. स्थान मोकळे करण्यासाठी, अतिरिक्त संचय चालू करा त्यामुळे Google आपले व्हॉइसमेल संदेश व्यवस्थापित करू शकते आणि त्यांचा बॅक अप घेऊ शकते. "<b><i>"या वैशिष्ट्याची सध्‍या चाचणी घेतली जात आहे "</i></b>"आणि आपल्या व्हॉइसमेल सर्व्हर मधून संभाव्यपणे व्हॉइसमेल हटवेल आणि आम्ही भविष्‍यात या वैशिष्‍ट्यास समर्थन देण्याचे वचन देत नाही. तरीही आम्ही आपला अभिप्राय घेऊ इच्छितो."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"अतिरिक्त संचय आणि बॅक अप चालू करा"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"आपला मेलबॉक्स पूर्ण भरला आहे. स्थान मोकळे करण्यासाठी, अतिरिक्त संचय चालू करा त्यामुळे Google आपले व्हॉइसमेल संदेश व्यवस्थापित करू शकते आणि त्यांचा बॅक अप घेऊ शकते."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"अतिरिक्त संचय आणि बॅक अप चालू करा"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"आपला मेलबॉक्स जवळजवळ पूर्ण भरला आहे. स्थान मोकळे करण्यासाठी, अतिरिक्त संचय चालू करा त्यामुळे Google आपले व्हॉइसमेल संदेश व्यवस्थापित करू शकते आणि त्यांचा बॅक अप घेऊ शकते."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"आपला व्हॉइसमेल पिन सेट करा"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"आपल्या व्हॉइसमेलमध्ये प्रवेश करण्यासाठी आपण कधीही कॉल करता तेव्हा आपल्याला व्हॉइसमेल पिन आवश्यक असेल."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"अज्ञात त्रुटी"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-ms/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-ms/strings.xml
index e011de1a7..c8b70d55c 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-ms/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-ms/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Anda tidak akan dapat menerima mel suara baharu jika peti masuk anda penuh."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Tidak dapat menerima mel suara baharu"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Peti masuk anda penuh. Cuba padamkan beberapa mesej untuk menerima mel suara baharu."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Percubaan] Hidupkan storan tambahan dan sandaran"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Peti mel anda penuh. Untuk mengosongkan ruang, hidupkan storan tambahan supaya Google boleh mengurus dan menyandarkan mesej mel suara anda. "<b><i>"Ciri ini sedang diuji"</i></b>" dan berupaya memadamkan mel suara daripada pelayan mel suara anda. Kami tidak menjamin bahawa ciri ini akan disokong pada masa hadapan. Namun begitu, kami berharap untuk menerima maklum balas anda tentang ciri ini."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Percubaan] Hidupkan storan tambahan dan sandaran"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Peti mel anda hampir penuh. Untuk mengosongkan ruang, hidupkan storan tambahan supaya Google boleh mengurus dan menyandarkan mesej mel suara anda. "<b><i>"Ciri ini sedang diuji"</i></b>" dan berupaya memadamkan mel suara daripada pelayan mel suara anda. Kami tidak menjamin bahawa ciri ini akan disokong pada masa hadapan. Namun begitu, kami berharap untuk menerima maklum balas anda tentang ciri ini."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Hidupkan storan tambahan dan sandaran"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Peti mel anda penuh. Untuk mengosongkan ruang, hidupkan storan tambahan supaya Google boleh mengurus dan menyandarkan mesej mel suara anda."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Hidupkan storan tambahan dan sandaran"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Peti mel anda hampir penuh. Untuk mengosongkan ruang, hidupkan storan tambahan supaya Google boleh mengurus dan menyandarkan mesej mel suara anda."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Tetapkan PIN mel suara anda"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Anda memerlukan PIN mel suara setiap kali anda memanggil untuk mengakses mel suara anda."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Ralat tidak diketahui"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-my/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-my/strings.xml
index d755850d2..686d37d10 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-my/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-my/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"သင့်ဝင်စာပြည့်နေပါက အသံမေးလ်အသစ်များ လက်ခံရယူနိုင်မည်မဟုတ်ပါ။"</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"အသံမေးလ်အသစ် လက်ခံ၍မရပါ"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"သင့်ဝင်စာပြည့်နေပါသည်။ အသံမေးလ်အသစ်များ လက်ခံရယူနိုင်ရန် မက်ဆေ့ဂျ်အချို့ဖျက်ကြည့်ပါ။"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[စမ်းသပ်ဆဲ] အပိုဆောင်း သိုလှောင်မှုနှင့် မိတ္တူတို့ကို ဖွင့်ပါ"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"သင့်ဝင်စာ ပြည့်နေပါပြီ။ နေရာလွတ်ရရှိရန်အတွက် အပိုသိုလှောင်မှုကို ဖွင့်လျှင် Google က သင်၏အသံမေးလ်မက်ဆေ့ဂျ်များကို စီမံခန့်ခွဲပြီး မိတ္တူကူးနိုင်ပါမည်။ "<b><i>"ဤဝန်ဆောင်မှုကို လတ်တလောတွင် စမ်းသပ်နေ "</i></b>"ပါသည်၊ ဤဝန်ဆောင်မှုသည် သင်၏အသံမေးလ်ဆာဗာမှ အသံမေးလ်များကို ဖျက်ပစ်နိုင်ပြီး အနာဂတ်တွင် ၎င်းကို ဆက်လက်ရရှိနိုင်မည်ဟု အာမခံပေးမထားပါ။ သို့သော် သင့်အကြံပြုချက်များကို ရရှိလိုပါသည်။"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[စမ်းသပ်ဆဲ] အပိုဆောင်း သိုလှောင်မှုနှင့် မိတ္တူတို့ကို ဖွင့်ပါ"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"သင့်ဝင်စာ ပြည့်နေပါပြီ။ နေရာလွတ်ရရှိရန်အတွက် အပိုသိုလှောင်မှုကို ဖွင့်လျှင် Google က သင်၏အသံမေးလ်မက်ဆေ့ဂျ်များကို စီမံခန့်ခွဲပြီး မိတ္တူကူးနိုင်ပါမည်။ "<b><i>"ဤဝန်ဆောင်မှုကို လတ်တလောတွင် စမ်းသပ်နေ "</i></b>"ပါသည်၊ ဤဝန်ဆောင်မှုသည် သင်၏အသံမေးလ်ဆာဗာမှ အသံမေးလ်များကို ဖျက်ပစ်နိုင်ပြီး အနာဂတ်တွင် ၎င်းကို ဆက်လက်ရရှိနိုင်မည်ဟု အာမခံပေးမထားပါ။ သို့သော် သင့်အကြံပြုချက်များကို ရရှိလိုပါသည်။"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"အပိုသိုလှောင်မှုနှင့် မိတ္တူ ဖွင့်ရန်"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"သင့်ဝင်စာ ပြည့်နေပါပြီ။ နေရာလွတ်ရရှိရန်အတွက် Google က သင်၏အသံမေးလ်မက်ဆေ့ဂျ်များကို စီမံခန့်ခွဲပြီး မိတ္တူကူးနိုင်ရန် အပိုသိုလှောင်မှုကို ဖွင့်ပါ။"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"အပိုသိုလှောင်မှုနှင့် မိတ္တူ ဖွင့်ရန်"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"သင့်ဝင်စာ ပြည့်လုပါပြီ။ နေရာလွတ်ရရှိရန်အတွက် Google က သင်၏အသံမေးလ်မက်ဆေ့ဂျ်များကို စီမံခန့်ခွဲပြီး မိတ္တူကူးနိုင်ရန် အပိုသိုလှောင်မှုကို ဖွင့်ပါ။"</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"သင်၏အသံမေးလ်ပင်နံပါတ် သတ်မှတ်ပါ"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"သင်၏အသံမေးလ်ကို သုံးစွဲရန်အတွက် သင်ခေါ်ဆိုသည့်အခါတိုင်း အသံမေးလ်ပင်နံပါတ်တစ်ခု လိုအပ်ပါမည်။"</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"အမျိုးအမည်မသိမှားယွင်းမှု"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-nb/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-nb/strings.xml
index 9dff46dce..6fc75614a 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-nb/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-nb/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Du kan ikke motta ny talepost hvis innboksen din er full."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Kan ikke motta ny talepost"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Innboksen din er full. Prøv å slette noen meldinger for å motta ny talepost."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"Slå på ekstra lagring og sikkerhetskopi"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Postkassen din er full. For å frigjøre plass, kan du slå på ekstra lagring sånn at Google kan administrere og sikkerhetskopiere talepostmeldingene dine. "<b><i>"Denne funksjonen er fortsatt under utforskning "</i></b>", og det kan føre til at noen av talepostmelingene dine slettes. Vi kan dessverre ikke love at denne funksjonen støttes i fremtiden, men vi vil gjerne høre om hva du mener om den."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"Slå på ekstra lagring og sikkerhetskopi"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Postkassen din er nesten full. For å frigjøre plass, kan du slå på ekstra lagring sånn at Google kan administrere og sikkerhetskopiere talepostmeldingene dine. "<b><i>"Denne funksjonen er fortsatt under utforskning "</i></b>", og det kan føre til at noen av talepostmelingene dine slettes. Vi kan dessverre ikke love at denne funksjonen støttes i fremtiden, men vi vil gjerne høre om hva du mener om den."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Slå på ekstra lagringsplass og sikkerhetskopiering"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Talepostkassen din er full. Frigjør plass ved å slå på ekstra lagringsplass og la Google administrere og ta sikkerhetskopi av taleposten din."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Slå på ekstra lagringsplass og sikkerhetskopiering"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Talepostkassen din er nesten full. Frigjør plass ved å slå på ekstra lagringsplass og la Google administrere og ta sikkerhetskopi av taleposten din."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Angi PIN-koden din for talepost"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Du trenger PIN-koden hver gang du ringer for å sjekke taleposten din."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Ukjent feil"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-ne/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-ne/strings.xml
index 1f7f77102..ff06fa06c 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-ne/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-ne/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"तपाईंको इनबक्स भरिएको छ भने तपाईंले नयाँ भ्वाइस मेल प्राप्त गर्न सक्नुहुने छैन।"</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"नयाँ भ्वाइस मेलहरू प्राप्त गर्न सकिँदैन"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"तपाईँको इनबक्स भरिएको छ। नयाँ भ्वाइस मेलहरू प्राप्त गर्न कृपया केही सन्देशहरू मेटी हेर्नुहोस्।"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[प्रयोगात्मक] अतिरिक्त भण्डारण र ब्याकअप सेवा सक्रिय पार्नुहोस्"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"तपाईंको मेल बक्स झन्डै झन्डै भरिएको छ। Google ले तपाईंका भ्वाइस मेल सम्बन्धी सन्देशहरूको व्यवस्थापन गर्न र ब्याकअप गर्नका लागि स्थान खाली गर्न अतिरिक्त भण्डारणलाई सक्रिय पार्नुहोस् । "<b><i>"हाल यो विशेषताको परीक्षण गरिँदै छ "</i></b>" र सम्भवत: तपाईंको भ्वाइस मेल सर्भरबाट भ्वाइस मेलहरू मेट्ने छ, र हामी यो विशेषतालाई भविष्यमा पनि समर्थन गरिने कुराको वाचा गर्दैनौं। तथापि तपाईंको प्रतिक्रियाको अपेक्षा गर्दछौं।"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[प्रयोगात्मक] अतिरिक्त भण्डारण र ब्याकअप सेवा सक्रिय पार्नुहोस्"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"तपाईंको मेल बक्स झन्डै झन्डै भरिएको छ। Google ले तपाईंका भ्वाइस मेल सन्देशहरूखो व्यवस्थापन गर्न र ब्याकअप गर्न सकोस् भन्नका खातिर स्थान खाली गर्न अतिरिक्त भण्डारणलाई सक्रिय पार्नुहोस् । "<b><i>"हाल यो विशेषताको परीक्षण गरिँदै छ "</i></b>" र यसले सम्भवत: तपाईंको भ्वाइस मेल सर्भरका भ्वाइस मेलहरू मेट्ने छ, र हामी यो विशेषतालाई भविष्यमा पनि समर्थन गरिने कुराको वाचा गर्दैनौं। तथापि तपाईंको प्रतिक्रियाको अपेक्षा गर्दछौं।"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"अतिरिक्त भण्डारण र ब्याकअप सेवा सक्रिय पार्नुहोस्"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"तपाईंको मेल बक्स भरिएको छ। ठाउँ खाली गर्न, Google ले तपाईंका भ्वाइस मेल सन्देशहरूको व्यवस्थापन र ब्याकअप गर्न सकोस् भन्नाका खातिर अतिरिक्त भण्डारणलाई सक्रिय पार्नुहोस्।"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"अतिरिक्त भण्डारण र ब्याकअप सेवा सक्रिय पार्नुहोस्"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"तपाईंको मेल बक्स लगभग भरिएको छ। ठाउँ खाली गर्न Google ले तपाईंका भ्वाइस मेल सन्देशहरूको व्यवस्थापन र ब्याकअप गर्न सकोस् भन्नाका खातिर अतिरिक्त भण्डारणलाई सक्रिय पार्नुहोस्।"</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"आफ्नो भ्वाइस मेलको PIN सेट गर्नुहोस्"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"तपाईँलाई जुनसुकै समयमा आफ्नो भ्वाइस मेलमा पहुँच गर्न कल गर्दा भ्वाइस मेल PIN को आवश्यकता पर्दछ।"</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"अज्ञात त्रुटि"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-nl/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-nl/strings.xml
index 4a31fd3a3..f74a37d8d 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-nl/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-nl/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Je kunt geen nieuwe voicemails ontvangen als je inbox vol is."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Kan geen nieuwe voicemails ontvangen"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Je inbox is vol. Verwijder enkele berichten om nieuwe voicemails te ontvangen."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Experimenteel] Extra opslag en back-up inschakelen"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Je mailbox is vol. Schakel extra opslag in om ruimte vrij te maken, zodat Google je voicemailberichten kan beheren en back-ups kan maken. "<b><i>"Deze functie wordt momenteel getest "</i></b>"en het is mogelijk dat hierdoor voicemails van de voicemailserver worden verwijderd. We kunnen niet beloven dat we deze functie in de toekomst blijven ondersteunen. We zijn wel heel benieuwd naar jullie feedback over de functie."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Experimenteel] Extra opslag en back-up inschakelen"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Je mailbox is bijna vol. Schakel extra opslag in om ruimte vrij te maken, zodat Google je voicemailberichten kan beheren en back-ups kan maken. "<b><i>"Deze functie wordt momenteel getest "</i></b>"en het is mogelijk dat hierdoor voicemails van de voicemailserver worden verwijderd. We kunnen niet beloven dat we deze functie in de toekomst blijven ondersteunen. We zijn wel heel benieuwd naar jullie feedback over de functie."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Extra opslag en back-up inschakelen"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Je mailbox is vol. Als je ruimte wilt vrijmaken, schakel je extra opslagruimte in zodat Google je voicemailberichten kan beheren en er back-ups van kan maken."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Extra opslag en back-up inschakelen"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Je mailbox is bijna vol. Als je ruimte wilt vrijmaken, schakel je extra opslagruimte in zodat Google je voicemailberichten kan beheren en er back-ups van kan maken."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Een pincode voor je voicemail instellen"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Je hebt een pincode voor de voicemail nodig wanneer je belt om toegang tot je voicemail te krijgen."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Onbekende fout"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-no/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-no/strings.xml
index 9dff46dce..6fc75614a 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-no/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-no/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Du kan ikke motta ny talepost hvis innboksen din er full."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Kan ikke motta ny talepost"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Innboksen din er full. Prøv å slette noen meldinger for å motta ny talepost."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"Slå på ekstra lagring og sikkerhetskopi"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Postkassen din er full. For å frigjøre plass, kan du slå på ekstra lagring sånn at Google kan administrere og sikkerhetskopiere talepostmeldingene dine. "<b><i>"Denne funksjonen er fortsatt under utforskning "</i></b>", og det kan føre til at noen av talepostmelingene dine slettes. Vi kan dessverre ikke love at denne funksjonen støttes i fremtiden, men vi vil gjerne høre om hva du mener om den."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"Slå på ekstra lagring og sikkerhetskopi"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Postkassen din er nesten full. For å frigjøre plass, kan du slå på ekstra lagring sånn at Google kan administrere og sikkerhetskopiere talepostmeldingene dine. "<b><i>"Denne funksjonen er fortsatt under utforskning "</i></b>", og det kan føre til at noen av talepostmelingene dine slettes. Vi kan dessverre ikke love at denne funksjonen støttes i fremtiden, men vi vil gjerne høre om hva du mener om den."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Slå på ekstra lagringsplass og sikkerhetskopiering"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Talepostkassen din er full. Frigjør plass ved å slå på ekstra lagringsplass og la Google administrere og ta sikkerhetskopi av taleposten din."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Slå på ekstra lagringsplass og sikkerhetskopiering"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Talepostkassen din er nesten full. Frigjør plass ved å slå på ekstra lagringsplass og la Google administrere og ta sikkerhetskopi av taleposten din."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Angi PIN-koden din for talepost"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Du trenger PIN-koden hver gang du ringer for å sjekke taleposten din."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Ukjent feil"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-pa/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-pa/strings.xml
index 3437271cb..2a07b459d 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-pa/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-pa/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"ਜੇਕਰ ਤੁਹਾਡਾ ਇਨਬਾਕਸ ਭਰਿਆ ਹੋਇਆ ਹੈ ਤਾਂ ਤੁਸੀਂ ਨਵੀਂ ਵੌਇਸਮੇਲ ਪ੍ਰਾਪਤ ਨਹੀਂ ਕਰ ਸਕੋਂਗੇ।"</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"ਨਵੀਆਂ ਵੌਇਸਮੇਲਾਂ ਨੂੰ ਪ੍ਰਾਪਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"ਤੁਹਾਡਾ ਇਨਬਾਕਸ ਭਰਿਆ ਹੋਇਆ ਹੈ। ਨਵੀਂ ਵੌਇਸਮੇਲ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ ਕੁਝ ਸੁਨੇਹਿਆਂ ਨੂੰ ਮਿਟਾਉਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[ਪ੍ਰਯੋਗਿਕ] ਵਾਧੂ ਸਟੋਰੇਜ ਨੂੰ ਚਾਲੂ ਕਰੋ ਅਤੇ ਬੈਕਅੱਪ ਲਓ"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"ਤੁਹਾਡਾ ਮੇਲਬਾਕਸ ਭਰਿਆ ਹੋਇਆ ਹੈ। ਜਗ੍ਹਾ ਖਾਲੀ ਕਰਨ ਲਈ, ਵਾਧੂ ਸਟੋਰੇਜ ਨੂੰ ਚਾਲੂ ਕਰੋ ਤਾਂ ਕਿ Google ਤੁਹਾਡੇ ਵੌਇਸਮੇਲ ਸੁਨੇਹਿਆਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕੇ ਅਤੇ ਬੈਕਅੱਪ ਲੈ ਸਕੇ। "<b><i>"ਇਸ ਵਿਸ਼ੇਸ਼ਤਾ ਦੀ ਇਸ ਵੇਲੇ ਜਾਂਚ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ "</i></b>"ਅਤੇ ਇਹ ਸੰਭਾਵੀ ਤੌਰ \'ਤੇ ਤੁਹਾਡੇ ਵੌਇਸਮੇਲ ਸਰਵਰ ਤੋਂ ਵੌਇਸਮੇਲਾਂ ਨੂੰ ਮਿਟਾ ਦੇਵੇਗੀ, ਅਤੇ ਅਸੀਂ ਭਵਿੱਖ ਵਿੱਚ ਇਸ ਵਿਸ਼ੇਸ਼ਤਾ ਦਾ ਸਮਰਥਨ ਕਰਨ ਦਾ ਵਾਅਦਾ ਨਹੀਂ ਕਰਦੇ ਹਾਂ। ਅਸੀਂ ਹਾਲਾਂਕਿ ਤੁਹਾਡੇ ਪ੍ਰਤੀਕਰਮ ਨੂੰ ਪਸੰਦ ਕਰਾਂਗੇ।"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[ਪ੍ਰਯੋਗਿਕ] ਵਾਧੂ ਸਟੋਰੇਜ ਨੂੰ ਚਾਲੂ ਕਰੋ ਅਤੇ ਬੈਕਅੱਪ ਲਓ"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"ਤੁਹਾਡਾ ਮੇਲਬਾਕਸ ਲਗਭਗ ਭਰਿਆ ਹੋਇਆ ਹੈ। ਜਗ੍ਹਾ ਖਾਲੀ ਕਰਨ ਲਈ, ਵਾਧੂ ਸਟੋਰੇਜ ਨੂੰ ਚਾਲੂ ਕਰੋ ਤਾਂ ਕਿ Google ਤੁਹਾਡੇ ਵੌਇਸਮੇਲ ਸੁਨੇਹਿਆਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕੇ ਅਤੇ ਬੈਕਅੱਪ ਲੈ ਸਕੇ। "<b><i>"ਇਸ ਵਿਸ਼ੇਸ਼ਤਾ ਦੀ ਇਸ ਵੇਲੇ ਜਾਂਚ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ "</i></b>"ਅਤੇ ਇਹ ਸੰਭਾਵੀ ਤੌਰ \'ਤੇ ਤੁਹਾਡੇ ਵੌਇਸਮੇਲ ਸਰਵਰ ਤੋਂ ਵੌਇਸਮੇਲਾਂ ਨੂੰ ਮਿਟਾ ਦੇਵੇਗੀ, ਅਤੇ ਅਸੀਂ ਭਵਿੱਖ ਵਿੱਚ ਇਸ ਵਿਸ਼ੇਸ਼ਤਾ ਦਾ ਸਮਰਥਨ ਕਰਨ ਦਾ ਵਾਅਦਾ ਨਹੀਂ ਕਰਦੇ ਹਾਂ। ਅਸੀਂ ਹਾਲਾਂਕਿ ਤੁਹਾਡੇ ਪ੍ਰਤੀਕਰਮ ਨੂੰ ਪਸੰਦ ਕਰਾਂਗੇ।"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"ਵਾਧੂ ਸਟੋਰੇਜ ਨੂੰ ਚਾਲੂ ਕਰੋ ਅਤੇ ਬੈਕਅੱਪ ਲਓ"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"ਤੁਹਾਡਾ ਮੇਲਬਾਕਸ ਭਰਿਆ ਹੋਇਆ ਹੈ। ਜਗ੍ਹਾ ਖਾਲੀ ਕਰਨ ਲਈ, ਵਾਧੂ ਸਟੋਰੇਜ ਨੂੰ ਚਾਲੂ ਕਰੋ ਤਾਂ ਕਿ Google ਤੁਹਾਡੇ ਵੌਇਸਮੇਲ ਸੁਨੇਹਿਆਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕੇ ਅਤੇ ਬੈਕਅੱਪ ਲੈ ਸਕੇ।"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"ਵਾਧੂ ਸਟੋਰੇਜ ਨੂੰ ਚਾਲੂ ਕਰੋ ਅਤੇ ਬੈਕਅੱਪ ਲਓ"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"ਤੁਹਾਡਾ ਮੇਲਬਾਕਸ ਲਗਭਗ ਭਰਿਆ ਹੋਇਆ ਹੈ। ਜਗ੍ਹਾ ਖਾਲੀ ਕਰਨ ਲਈ, ਵਾਧੂ ਸਟੋਰੇਜ ਨੂੰ ਚਾਲੂ ਕਰੋ ਤਾਂ ਕਿ Google ਤੁਹਾਡੇ ਵੌਇਸਮੇਲ ਸੁਨੇਹਿਆਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕੇ ਅਤੇ ਬੈਕਅੱਪ ਲੈ ਸਕੇ।"</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"ਆਪਣਾ ਵੌਇਸਮੇਲ PIN ਸੈੱਟ ਕਰੋ"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"ਜਦੋਂ ਵੀ ਤੁਸੀਂ ਆਪਣੀ ਵੌਇਸਮੇਲ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਲਈ ਕਾਲ ਕਰੋਂਗੇ ਤਾਂ ਤੁਹਾਨੂੰ ਇੱਕ ਵੌਇਸਮੇਲ PIN ਦੀ ਲੋੜ ਪਵੇਗੀ।"</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"ਅਗਿਆਤ ਗੜਬੜ"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-pl/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-pl/strings.xml
index 1b88481ba..b12290821 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-pl/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-pl/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Nie otrzymasz nowych wiadomości głosowych, gdy Twoja skrzynka odbiorcza jest pełna."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Nie udało się odebrać nowych wiadomości głosowych"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Twoja skrzynka odbiorcza jest pełna. Spróbuj usunąć kilka wiadomości głosowych, aby odebrać nowe."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"(Funkcja eksperymentalna) Włącz dodatkowe miejsce i kopię zapasową"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Twoja skrzynka pocztowa jest pełna. Jeśli chcesz zwolnić miejsce, włącz dodatkowe miejsce, aby umożliwić Google zarządzanie Twoimi wiadomościami głosowymi i tworzenie ich kopii zapasowej. "<b><i>"Ta funkcja jest obecnie w fazie testów"</i></b>" i może usunąć wiadomości głosowe z Twojego serwera poczty głosowej. Nie gwarantujemy, że ta funkcja będzie w przyszłości obsługiwana. Chętnie jednak dowiemy się, co o niej sądzisz."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"(Funkcja eksperymentalna) Włącz dodatkowe miejsce i kopię zapasową"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Twoja skrzynka pocztowa jest prawie pełna. Jeśli chcesz zwolnić miejsce, włącz dodatkowe miejsce, aby umożliwić Google zarządzanie Twoimi wiadomościami głosowymi i tworzenie ich kopii zapasowej. "<b><i>"Ta funkcja jest obecnie w fazie testów"</i></b>" i może usunąć wiadomości głosowe z Twojego serwera poczty głosowej. Nie gwarantujemy, że ta funkcja będzie w przyszłości obsługiwana. Chętnie jednak dowiemy się, co o niej sądzisz."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Włącz dodatkowe miejsce i kopię zapasową"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Twoja skrzynka pocztowa jest pełna. Jeśli chcesz zwolnić miejsce, włącz dodatkowe miejsce, aby umożliwić Google zarządzanie Twoimi wiadomościami głosowymi i tworzenie ich kopii zapasowej."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Włącz dodatkowe miejsce i kopię zapasową"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Twoja skrzynka pocztowa jest prawie pełna. Jeśli chcesz zwolnić miejsce, włącz dodatkowe miejsce, aby umożliwić Google zarządzanie Twoimi wiadomościami głosowymi i tworzenie ich kopii zapasowej."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Ustaw kod PIN do poczty głosowej"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Za każdym razem, gdy zadzwonisz pod numer poczty głosowej, będzie konieczne wpisanie kodu PIN."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Nieznany błąd"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-pt-rBR/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-pt-rBR/strings.xml
index e286a4d44..bbe9340a6 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-pt-rBR/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-pt-rBR/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Não será possível receber novos correios de voz se sua Caixa de entrada estiver cheia."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Não é possível receber novos correios de voz"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Sua Caixa de entrada está cheia. Exclua algumas mensagens para receber novos correios de voz."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Experimental] Ativar armazenamento extra e fazer backup"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Sua caixa de correio está cheia. Para liberar espaço, ative o armazenamento extra para que o Google possa gerenciar e fazer o backup das suas mensagens do correio de voz. "<b><i>"Este recurso está sendo testado no momento "</i></b>"e talvez exclua os correios de voz do seu servidor de correio de voz. Não há garantias de suporte no futuro, mas gostaríamos de receber seu feedback."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Experimental] Ativar armazenamento extra e fazer backup"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Sua caixa de correio está cheia. Para liberar espaço, ative o armazenamento extra para que o Google possa gerenciar e fazer o backup das suas mensagens do correio de voz. "<b><i>"Este recurso está sendo testado no momento "</i></b>"e talvez exclua os correios de voz do seu servidor de correio de voz. Não há garantias de suporte no futuro, mas gostaríamos de receber seu feedback."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Ativar armazenamento extra e fazer backup"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Sua caixa de correio está cheia. Para liberar espaço, ative o armazenamento extra para que o Google possa gerenciar e fazer o backup das suas mensagens do correio de voz."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Ativar armazenamento extra e fazer backup"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Sua caixa de correio está quase cheia. Para liberar espaço, ative o armazenamento extra para que o Google possa gerenciar e fazer o backup das suas mensagens do correio de voz."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Definir seu PIN do correio de voz"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Você precisará de um PIN do correio de voz sempre que ligar para acessar seu correio de voz."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Erro desconhecido"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-pt-rPT/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-pt-rPT/strings.xml
index ad7ee7599..364b2783d 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-pt-rPT/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-pt-rPT/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Se a sua caixa de entrada estiver cheia, não irá receber novas mensagens de correio de voz."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Não é possível receber novas mensagens de correio de voz"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"A sua caixa de entrada está cheia. Tente eliminar algumas mensagens para receber novas mensagens de correio de voz."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Experimental] Ativar a cópia de segurança e o armazenamento adicional"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"A sua caixa de correio está cheia. Para libertar espaço, ative o armazenamento adicional para que a Google possa gerir e criar uma cópia de segurança das suas mensagens de correio de voz. "<b><i>"Esta funcionalidade está a ser testada "</i></b>"e poderá eliminar mensagens de correio de voz do seu servidor de correio de voz. Não podemos garantir compatibilidade com esta funcionalidade no futuro. No entanto, gostaríamos de receber os seus comentários."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Experimental] Ativar a cópia de segurança e o armazenamento adicional"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"A sua caixa de correio está quase cheia. Para libertar espaço, ative o armazenamento adicional para que a Google possa gerir e criar uma cópia de segurança das suas mensagens de correio de voz. "<b><i>"Esta funcionalidade está a ser testada "</i></b>"e poderá eliminar mensagens de correio de voz do seu servidor de correio de voz. Não podemos garantir compatibilidade com esta funcionalidade no futuro. No entanto, gostaríamos de receber os seus comentários."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Ativar o armazenamento adicional e a cópia de segurança"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"A sua caixa de correio está cheia. Para libertar espaço, ative o armazenamento adicional para que a Google possa gerir e criar uma cópia de segurança das suas mensagens de correio de voz."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Ativar o armazenamento adicional e a cópia de segurança"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"A sua caixa de correio está quase cheia. Para libertar espaço, ative o armazenamento adicional para que a Google possa gerir e criar uma cópia de segurança das suas mensagens de correio de voz."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Definir o seu PIN do correio de voz"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Irá precisar de um PIN do correio de voz sempre que efetuar uma chamada para aceder ao seu correio de voz."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Erro desconhecido"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-pt/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-pt/strings.xml
index e286a4d44..bbe9340a6 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-pt/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-pt/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Não será possível receber novos correios de voz se sua Caixa de entrada estiver cheia."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Não é possível receber novos correios de voz"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Sua Caixa de entrada está cheia. Exclua algumas mensagens para receber novos correios de voz."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Experimental] Ativar armazenamento extra e fazer backup"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Sua caixa de correio está cheia. Para liberar espaço, ative o armazenamento extra para que o Google possa gerenciar e fazer o backup das suas mensagens do correio de voz. "<b><i>"Este recurso está sendo testado no momento "</i></b>"e talvez exclua os correios de voz do seu servidor de correio de voz. Não há garantias de suporte no futuro, mas gostaríamos de receber seu feedback."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Experimental] Ativar armazenamento extra e fazer backup"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Sua caixa de correio está cheia. Para liberar espaço, ative o armazenamento extra para que o Google possa gerenciar e fazer o backup das suas mensagens do correio de voz. "<b><i>"Este recurso está sendo testado no momento "</i></b>"e talvez exclua os correios de voz do seu servidor de correio de voz. Não há garantias de suporte no futuro, mas gostaríamos de receber seu feedback."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Ativar armazenamento extra e fazer backup"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Sua caixa de correio está cheia. Para liberar espaço, ative o armazenamento extra para que o Google possa gerenciar e fazer o backup das suas mensagens do correio de voz."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Ativar armazenamento extra e fazer backup"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Sua caixa de correio está quase cheia. Para liberar espaço, ative o armazenamento extra para que o Google possa gerenciar e fazer o backup das suas mensagens do correio de voz."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Definir seu PIN do correio de voz"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Você precisará de um PIN do correio de voz sempre que ligar para acessar seu correio de voz."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Erro desconhecido"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-ro/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-ro/strings.xml
index f576cf6c6..263ab003d 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-ro/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-ro/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Nu veți putea primi mesaje vocale noi dacă aveți căsuța de mesaje plină."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Nu puteți primi mesaje vocale noi"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Căsuța de mesaje este plină. Încercați să ștergeți câteva mesaje pentru a putea primi unele noi."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Experimental] Activați spațiul de stocare suplimentar și backupul."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Căsuța dvs. de mesaje este plină. Pentru a elibera spațiu, activați spațiul de stocare suplimentar pentru ca Google să poată gestiona și face backup pentru mesajele dvs. vocale. "<b><i>"Această funcție este în curs de testare "</i></b>"și e posibil să șteargă mesajele vocale de pe serverul de mesagerie vocală. Nu se poate garanta acceptarea acestei funcții pe viitor, însă feedbackul dvs. e bine-venit."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Experimental] Activați spațiul de stocare suplimentar și backupul."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Căsuța dvs. de mesaje este aproape plină. Pentru a elibera spațiu, activați spațiul de stocare suplimentar pentru ca Google să poată gestiona și face backup pentru mesajele dvs. vocale. "<b><i>"Această funcție este în curs de testare "</i></b>"și e posibil să șteargă mesajele vocale de pe serverul de mesagerie vocală. Nu se poate garanta acceptarea acestei funcții pe viitor, însă feedbackul dvs. e bine-venit."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Activați spațiul de stocare suplimentar și backupul"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Căsuța dvs. de e-mail este plină. Pentru a elibera spațiu, activați spațiul de stocare suplimentar și astfel Google poate să vă gestioneze mesajele vocale și să facă backup pentru acestea."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Activați spațiul de stocare suplimentar și backupul"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Căsuța dvs. de e-mail este aproape plină. Pentru a elibera spațiu, activați spațiul de stocare suplimentar și astfel Google poate să vă gestioneze mesajele vocale și să facă backup pentru acestea."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Setați un cod PIN pentru mesageria vocală"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Aveți nevoie de un cod PIN pentru mesageria vocală când sunați pentru a o accesa."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Eroare necunoscută"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-ru/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-ru/strings.xml
index f0a1048e6..1989f269c 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-ru/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-ru/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Когда почтовый ящик будет заполнен, вы не сможете получать новые голосовые сообщения."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Нет свободного места"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Почтовый ящик заполнен. Чтобы получать новые голосовые сообщения, удалите старые."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Экспериментальная функция] Активируйте дополнительное пространство для хранения и резервного копирования"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Почтовый ящик заполнен. Чтобы освободить место, активируйте дополнительное пространство. После этого Google сможет управлять вашими голосовыми сообщениями и сохранять их резервные копии. "<b><i>"Эта функция сейчас проходит тестирование."</i></b>" Возможно, ваши голосовые сообщения будут удалены с вашего сервера. Поддержка этой функции в дальнейшем не гарантируется. Мы бы хотели узнать ваше мнение о ней."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Экспериментальная функция] Активируйте дополнительное пространство для хранения и резервного копирования"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Почтовый ящик почти заполнен. Чтобы освободить место, активируйте дополнительное пространство. После этого Google сможет управлять вашими голосовыми сообщениями и сохранять их резервные копии. "<b><i>"Эта функция сейчас проходит тестирование."</i></b>" Возможно, ваши голосовые сообщения будут удалены с вашего сервера. Поддержка этой функции в дальнейшем не гарантируется. Мы бы хотели узнать ваше мнение о ней."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Требуется дополнительное пространство"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Почтовый ящик заполнен. Чтобы освободить место, активируйте дополнительное пространство. После этого Google сможет управлять вашими голосовыми сообщениями и сохранять их резервные копии."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Требуется дополнительное пространство"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Почтовый ящик почти заполнен. Чтобы освободить место, активируйте дополнительное пространство. После этого Google сможет управлять вашими голосовыми сообщениями и сохранять их резервные копии."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Установите PIN-код голосовой почты"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Он будет нужен вам каждый раз, когда вы звоните, чтобы прослушать голосовую почту."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Неизвестная ошибка"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-si/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-si/strings.xml
index f0c58b129..2a057facd 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-si/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-si/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"ඔබේ එන ලිපි පිරී ඇති නම් ඔබට නව හඩ තැපැල් ලැබීමට නොහැකි වනු ඇත."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"නව හඬ තැපැල් ලැබීමට නොහැකිය"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"ඔබේ එන ලිපි පිරී ඇත. නව හඬ තැපැල් ලබා ගැනීමට පණිවිඩ සමහරක් මැකීම උත්සාහ කරන්න."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Experimental] අතිරේක ගබඩාව සහ උපස්ථය ක්‍රියාත්මක කරන්න"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"ඔබේ තැපැල් පෙට්ටිය පිරී ඇත. ඉඩ නිදහස් කර ගැනීමට, අතිරේක ගබඩාව ක්‍රියාත්මක කරන්න. එවිට Google හට ඔබේ හඬ තැපැල් පණිවිඩ කළමනාකරණය කිරීමට සහ උපස්ථ කිරීමට හැකිය. "<b><i>"මෙම විශේෂාංගය දැන් පරීක්ෂා කරමින් සිටින අතර "</i></b>"විභව්‍යව හඬ තැපැල් ඔබේ හඬ තැපැල් සේවාදායකයෙන් මකනු ඇති අතර, අපි අනාගතයේදී මෙම විශේෂාංගයට සහාය දැක්වීමට පොරොන්දු නොවෙමු. එසේ වුවත් අපි ඔබේ විශේෂාංගය ගැන ප්‍රතිපෝෂණවලට ආදරය කරන්නෙමු."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Experimental] අතිරේක ගබඩාව සහ උපස්ථය ක්‍රියාත්මක කරන්න"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"ඔබේ තැපැල් පෙට්ටිය මුළුමනින්ම පාහේ පිරී ඇත. ඉඩ නිදහස් කර ගැනීමට, අතිරේක ගබඩාව ක්‍රියාත්මක කරන්න. එවිට Google හට ඔබේ හඬ තැපැල් පණිවිඩ කළමනාකරණය කිරීමට සහ උපස්ථ කිරීමට හැකිය. "<b><i>"මෙම විශේෂාංගය දැන් පරීක්ෂා කරමින් සිටින අතර"</i></b>"විභව්‍යව හඬ තැපැල් ඔබේ හඬ තැපැල් සේවාදායකයෙන් මකනු ඇති අතර, අපි අනාගතයේදී මෙම විශේෂාංගයට සහාය දැක්වීමට පොරොන්දු නොවෙමු. එසේ වුවත් අපි ඔබේ විශේෂාංගය ගැන ප්‍රතිපෝෂණවලට ආදරය කරන්නෙමු."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"අතිරේක ගබඩාව සහ උපස්ථය ක්‍රියාත්මක කරන්න"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"ඔබේ තැපැල් පෙට්ටිය පිරී ඇත. ඉඩ නිදහස් කර ගැනීමට, අතිරේක ගබඩාව ක්‍රියාත්මක කරන්න. එවිට Google හට ඔබේ හඬ තැපැල් පණිවිඩ කළමනාකරණය කිරීමට සහ උපස්ථ කිරීමට හැකිය."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"අතිරේක ගබඩාව සහ උපස්ථය ක්‍රියාත්මක කරන්න"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"ඔබේ තැපැල් පෙට්ටිය මුළුමනින්ම පාහේ පිරී ඇත. ඉඩ නිදහස් කර ගැනීමට, අතිරේක ගබඩාව ක්‍රියාත්මක කරන්න. එවිට Google හට ඔබේ හඬ තැපැල් පණිවිඩ කළමනාකරණය කිරීමට සහ උපස්ථ කිරීමට හැකිය."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"ඔබේ හඬ තැපැල් PIN අංකය සකසන්න"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"ඔබ ඔබේ හඬ තැපෑලට ප්‍රවේශ වීමට අමතන ඕනෑම අවස්ථාවක ඔබට හඬ තැපැල් PIN අංකයක් අවශ්‍ය වනු ඇත."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"නොදන්නා දෝෂයකි"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-sk/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-sk/strings.xml
index ecf0a21bf..165a9f58c 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-sk/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-sk/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"S plnou doručenou poštou nebudete môcť prijímať nové hlasové správy."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Nemôžete prijímať nové hlasové správy"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Máte plnú doručenú poštu. Skúste odstrániť niekoľko správ, aby ste mohli prijať novú hlasovú správu."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Experimentálna funkcia] Zapnite si ďalšie úložisko a zálohovanie"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Poštovú schránku máte plnú. Ak chcete uvoľniť miesto, zapnite ďalšie úložisko, aby mohol Google spravovať a zálohovať vaše hlasové správy. "<b><i>"Túto funkciu práve testujeme "</i></b>"a môže vám odstrániť hlasové správy zo servera hlasovej schránky. Nemôžeme zaručiť, že bude podporovaná aj v budúcnosti, no budeme vám vďační za poskytnutie spätnej väzby."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Experimentálna funkcia] Zapnite si ďalšie úložisko a zálohovanie"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Poštovú schránku máte takmer plnú. Ak chcete uvoľniť miesto, zapnite ďalšie úložisko, aby mohol Google spravovať a zálohovať vaše hlasové správy. "<b><i>"Túto funkciu práve testujeme "</i></b>"a môže vám odstrániť hlasové správy zo servera hlasovej schránky. Nemôžeme zaručiť, že bude podporovaná aj v budúcnosti, no budeme vám vďační za poskytnutie spätnej väzby."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Zapnite si ďalšie úložisko a zálohovanie"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Poštovú schránku máte plnú. Ak chcete uvoľniť miesto, zapnite si ďalšie úložisko, aby mohol Google spravovať a zálohovať vaše hlasové správy."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Zapnite si ďalšie úložisko a zálohovanie"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Poštovú schránku máte takmer plnú. Ak chcete uvoľniť miesto, zapnite si ďalšie úložisko, aby mohol Google spravovať a zálohovať vaše hlasové správy."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Nastaviť kód PIN hlasovej schránky"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Kód PIN hlasovej schránky budete potrebovať vždy, keď zavoláte do svojej hlasovej schránky."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Neznáma chyba"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-sl/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-sl/strings.xml
index c2ef327d8..d4f63c1e4 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-sl/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-sl/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Če je nabiralnik poln, ne boste mogli prejemati novih sporočil v odzivniku."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Vizualnih sporočil v odzivniku ni mogoče prejemati"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Nabiralnik je poln. Poskusite izbrisati nekaj sporočil, da bo mogoče prejeti nova sporočila v odzivniku."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Poskusno] Vklop dodatne shrambe in varnostnega kopiranja"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Odzivnik je poln. Če želite sprostiti prostor, vklopite dodatno shrambo, da bo lahko Google upravljal vaša sporočila v odzivniku in jih varnostno kopiral. "<b><i>"Za to funkcijo se trenutno izvajajo preskusi"</i></b>", zato bodo sporočila v odzivniku morda izbrisana iz strežnika za sporočila v odzivniku, pri čemer ne obljubljamo, da bomo to funkcijo podpirali tudi v prihodnje. Kljub temu bomo veseli vaših povratnih informacij o funkciji."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Poskusno] Vklop dodatne shrambe in varnostnega kopiranja"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Odzivnik je skoraj poln. Če želite sprostiti prostor, vklopite dodatno shrambo, da bo lahko Google upravljal vaša sporočila v odzivniku in jih varnostno kopiral. "<b><i>"Za to funkcijo se trenutno izvajajo preskusi"</i></b>", zato bodo sporočila v odzivniku morda izbrisana iz strežnika za sporočila v odzivniku, pri čemer ne obljubljamo, da bomo to funkcijo podpirali tudi v prihodnje. Kljub temu bomo veseli vaših povratnih informacij o funkciji."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Vklop dodatnega prostora za shranjevanje in varnostno kopiranje"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Odzivnik je poln. Če želite sprostiti prostor, vklopite dodaten prostor za shranjevanje, da bo Google lahko upravljal vaša sporočila v odzivniku in jih varnostno kopiral."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Vklop dodatnega prostora za shranjevanje in varnostno kopiranje"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Odzivnik je skoraj poln. Če želite sprostiti prostor, vklopite dodaten prostor za shranjevanje, da bo Google lahko upravljal vaša sporočila v odzivniku in jih varnostno kopiral."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Nastavite kodo PIN za glasovno pošto"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Kodo PIN za glasovno pošto boste potrebovali ob vsakem klicu za dostop do glasovne pošte."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Neznana napaka"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-sq/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-sq/strings.xml
index 7beb4585b..d400cd8ef 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-sq/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-sq/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Nuk mund të marrësh postë zanore të re nëse kutia hyrëse është plot."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Posta zanore nuk mund të merret"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Kutia hyrëse është plot. Provo të fshish disa mesazhe për të marrë postë zanore të re."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Eksperimentale] Aktivizo rezervimin dhe hapësirën ruajtëse shtesë"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Kutia jote postare është plot. Për të liruar hapësirën, aktivizo hapësirën ruajtëse shtesë që Google të mund të menaxhojë dhe të rezervojë mesazhet e tua të postës zanore. "<b><i>"Ky funksion po testohet aktualisht "</i></b>"dhe mund të fshijë posta zanore nga serveri i postës zanore, si dhe nuk premtojmë mbështetjen për këtë funksion në të ardhmen. Megjithatë do të na pëlqente të merrnim komentet e tua."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Eksperimentale] Aktivizo rezervimin dhe hapësirën ruajtëse shtesë"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Kutia jote postare është plot. Për të liruar hapësirën, aktivizo hapësirën ruajtëse shtesë që Google të mund të menaxhojë dhe të rezervojë mesazhet e tua të postës zanore. "<b><i>"Ky funksion po testohet aktualisht "</i></b>"dhe mund të fshijë posta zanore nga serveri i postës zanore, si dhe nuk premtojmë mbështetjen për këtë funksion në të ardhmen. Megjithatë do të na pëlqente të merrnim komentet e tua."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Aktivizo hapësirën ruajtëse shtesë dhe rezervimin"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Kutia jote postare është plot. Për të liruar hapësirën, aktivizo hapësirën ruajtëse shtesë që Google të mund të menaxhojë dhe të rezervojë mesazhet e tua të postës zanore."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Aktivizo hapësirën ruajtëse shtesë dhe rezervimin"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Kutia jote postare është thuajse plot. Për të liruar hapësirën, aktivizo hapësirën ruajtëse shtesë që Google të mund të menaxhojë dhe të rezervojë mesazhet e tua të postës zanore."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Vendos kodin PIN të postës zanore"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Të duhet një kod PIN për postën zanore në çdo kohë që telefonon për të hyrë te posta zanore."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Gabim i panjohur"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-sr/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-sr/strings.xml
index ebbee778c..da1853a14 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-sr/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-sr/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Нећете моћи да примате нову говорну пошту ако је пријемно сандуче пуно."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Не можете да примате нове говорне поруке"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Пријемно сандуче је пуно. Избришите неке поруке да бисте примили нову говорну пошту."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Експериментално] Укључите додатни меморијски простор и резервне копије"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Ваше поштанско сандуче је пуно. Да бисте ослободили простор, укључите додатни меморијски простор како би Google могао да управља вашим порукама говорне поште и прави њихове резервне копије. "<b><i>"Ова функција се тренутно тестира "</i></b>", може да избрише говорне поруке са сервера говорне поште и не гарантујемо да ћемо је подржавати у будућности. Ипак, желели бисмо да добијамо повратне информације од вас."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Експериментално] Укључите додатни меморијски простор и резервне копије"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Ваше поштанско сандуче је скоро пуно. Да бисте ослободили простор, укључите додатни меморијски простор како би Google могао да управља вашим порукама говорне поште и прави њихове резервне копије. "<b><i>"Ова функција се тренутно тестира "</i></b>", може да избрише говорне поруке са сервера говорне поште и не гарантујемо да ћемо је подржавати у будућности. Ипак, желели бисмо да добијамо повратне информације од вас."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Укључите додатни меморијски простор и резервне копије"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Поштанско сандуче је пуно. Да бисте ослободили простор, укључите додатни меморијски простор, па ће Google моћи да управља вашим говорним порукама и прави њихове резервне копије."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Укључите додатни меморијски простор и резервне копије"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Поштанско сандуче је скоро пуно. Да бисте ослободили простор, укључите додатни меморијски простор, па ће Google моћи да управља вашим говорним порукама и прави њихове резервне копије."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Подесите PIN говорне поште"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"PIN говорне поште вам треба сваки пут кад упућујете позив да бисте приступили говорној пошти."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Непозната грешка"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-sv/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-sv/strings.xml
index b74be6132..cfab8305a 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-sv/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-sv/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Du kan inte ta emot nya röstmeddelanden om inkorgen är full."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Du kan inte ta emot nya röstmeddelanden."</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Inkorgen är full. Testa att radera några meddelanden om du vill kunna ta emot nya röstmeddelanden."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Experimentell] Aktivera extra lagring och säkerhetskopiering"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Din brevlåda är full. Frigör utrymme genom att aktivera extra lagring så att Google hanterar och säkerhetskopierar dina röstmeddelanden. "<b><i>"Det här är en experimentfunktion"</i></b>" som vi för närvarande testar. Den kan potentiellt radera röstmeddelanden på röstbrevlådans server och vi garanterar inte support för den här funktionen i framtiden. Vi är dock tacksamma för synpunkter om den."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Experimentell] Aktivera extra lagring och säkerhetskopiering"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Din brevlåda är nästan full. Frigör utrymme genom att aktivera extra lagring så att Google hanterar och säkerhetskopierar dina röstmeddelanden. "<b><i>"Det här är en experimentfunktion"</i></b>" som vi för närvarande testar. Den kan potentiellt radera röstmeddelanden på röstbrevlådans server och vi garanterar inte support för den här funktionen i framtiden. Vi är dock tacksamma för synpunkter om den."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Aktivera extra lagring och säkerhetskopiering"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Din postlåda är full. Frigör utrymme genom att aktivera extra lagringsutrymme så att Google kan hantera och säkerhetskopiera dina röstmeddelanden."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Aktivera extra lagring och säkerhetskopiering"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Din postlåda är nästan full. Frigör utrymme genom att aktivera extra lagringsutrymme så att Google kan hantera och säkerhetskopiera dina röstmeddelanden."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Ange PIN-kod till röstbrevlåda"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Du måste ha en PIN-kod till röstbrevlådan varje gång du ringer till den."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Okänt fel"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-sw/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-sw/strings.xml
index 098fbe0b7..56aad211c 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-sw/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-sw/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Hutaweza kupokea ujumbe mpya wa sauti kama kikasha chako kimejaa."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Huwezi kupokea ujumbe mpya wa sauti"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Kikasha chako kimejaa. Jaribu kufuta baadhi ili uweze kupokea ujumbe mpya wa sauti."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Majaribio] Washa nafasi ya ziada halafu uhifadhi nakala rudufu"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Sanduku lako la ujumbe wa sauti limejaa. Ili upate nafasi, washa hifadhi ya ziada ili Google idhibiti na kuweka nakala rudufu ya ujumbe wako wa sauti. "<b><i>"Kipengele hiki kinajaribiwa kwa sasa "</i></b>"na huenda kitafuta ujumbe wa sauti kutoka kwenye seva yako ya ujumbe wa sauti, na hatuwezi kutoa ahadi kwamba kipengele hiki kitatumika katika siku zijazo. Hata hivyo, tungependa kupata maoni yako kuhusu kipengele hiki."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Majaribio] Washa nafasi ya ziada halafu uhifadhi nakala rudufu"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Sanduku lako la ujumbe wa sauti limejaa. Ili upate nafasi, washa hifadhi ya ziada ili Google idhibiti na kuweka nakala rudufu ya ujumbe wako wa sauti. "<b><i>"Kipengele hiki kinajaribiwa kwa sasa "</i></b>"na huenda kitafuta ujumbe wa sauti kutoka kwenye seva yako ya ujumbe wa sauti, na hatuwezi kutoa ahadi kwamba kipengele hiki kitatumika katika siku zijazo. Hata hivyo, tungependa kupata maoni yako kuhusu kipengele hiki."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Washa nafasi ya ziada halafu uhifadhi nakala rudufu"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Sanduku lako la ujumbe wa sauti limejaa. Ili upate nafasi, washa hifadhi ya ziada ili Google idhibiti na kuweka nakala rudufu ya ujumbe wako wa sauti."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Washa nafasi ya ziada halafu uhifadhi nakala rudufu"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Sanduku lako la ujumbe wa sauti linakaribia kujaa. Ili upate nafasi, washa hifadhi ya ziada ili Google idhibiti na kuweka nakala rudufu ya ujumbe wako wa sauti."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Weka PIN yako ya ujumbe wa sauti"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Utahitaji PIN ya ujumbe wa sauti wakati wowote unapopiga simu ili ufikie ujumbe wako wa sauti."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Hitilafu isiyojulikana"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-ta/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-ta/strings.xml
index f8ab381f7..f2613f082 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-ta/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-ta/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"இன்பாக்ஸ் நிரம்பியிருந்தால், புதிய குரலஞ்சலைப் பெற முடியாது."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"புதிய குரலஞ்சல்களைப் பெற முடியவில்லை"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"இன்பாக்ஸ் நிரம்பிவிட்டது. புதிய குரலஞ்சல்களைப் பெற, சில செய்திகளை நீக்கவும்."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[சோதனை முயற்சி] கூடுதல் சேமிப்பகத்தையும் காப்புப் பிரதியையும் இயக்கு"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"உங்கள் அஞ்சல்பெட்டி நிரம்பிவிட்டது. இடத்தைக் காலியாக்க, கூடுதல் சேமிப்பகத்தை இயக்கவும். இதன் மூலம் Google உங்கள் குரலஞ்சல் செய்திகளை நிர்வகித்து, காப்புப் பிரதி எடுக்கலாம். "<b><i>" இந்த அம்சம் தற்போது சோதனை செய்யப்படுகிறது "</i></b>", இது உங்கள் குரலஞ்சல் சேவையகத்திலிருந்து குரலஞ்சல்களை நீக்கச் சாத்தியமுள்ளது. இந்த அம்சம் எதிர்காலத்தில் ஆதரிப்படும் என்பதற்குஉத்திரவாதம் இல்லை. இருப்பினும் உங்கள் கருத்தை வரவேற்கிறோம்."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[சோதனை முயற்சி] கூடுதல் சேமிப்பகத்தையும் காப்புப் பிரதியையும் இயக்கு"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"உங்கள் அஞ்சல்பெட்டி கிட்டத்தட்ட நிரம்பிவிட்டது. இடத்தைக் காலியாக்க, கூடுதல் சேமிப்பகத்தை இயக்கவும். இதன் மூலம் Google உங்கள் குரலஞ்சல் செய்திகளை நிர்வகித்து, காப்புப் பிரதி எடுக்கலாம். "<b><i>" இந்த அம்சம் தற்போது சோதனை செய்யப்படுகிறது "</i></b>", இது உங்கள் குரலஞ்சல் சேவையகத்திலிருந்து குரலஞ்சல்களை நீக்கச் சாத்தியமுள்ளது. இந்த அம்சம் எதிர்காலத்தில் ஆதரிப்படும் என்பதற்குஉத்திரவாதம் இல்லை. இருப்பினும் உங்கள் கருத்தை வரவேற்கிறோம்."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"கூடுதல் சேமிப்பகத்தையும் காப்புப் பிரதியையும் இயக்கு"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"உங்கள் அஞ்சல்பெட்டி நிரம்பிவிட்டது. இடத்தைக் காலியாக்க, கூடுதல் சேமிப்பகத்தை இயக்கவும். இதன் மூலம் Google உங்கள் குரலஞ்சல் செய்திகளை நிர்வகித்து, காப்புப் பிரதி எடுக்கலாம்."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"கூடுதல் சேமிப்பகத்தையும் காப்புப் பிரதியையும் இயக்கு"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"உங்கள் அஞ்சல்பெட்டி கிட்டத்தட்ட நிரம்பிவிட்டது. இடத்தைக் காலியாக்க, கூடுதல் சேமிப்பகத்தை இயக்கவும். இதன் மூலம் Google உங்கள் குரலஞ்சல் செய்திகளை நிர்வகித்து, காப்புப் பிரதி எடுக்கலாம்."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"உங்கள் குரலஞ்சல் பின்னை அமைக்கவும்"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"உங்கள் குரலஞ்சலை அணுகுவதற்கு நீங்கள் எப்போது அழைத்தாலும் குரலஞ்சல் பின் அவசியம்."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"அறியப்படாத பிழை"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-te/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-te/strings.xml
index c2a818f47..a881550e8 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-te/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-te/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"మీ ఇన్‌బాక్స్ నిండిపోయి ఉంటే, కొత్త వాయిస్ మెయిల్‌ను స్వీకరించలేరు."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"కొత్త వాయిస్ మెయిల్‌లను స్వీకరించలేరు"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"మీ ఇన్‌బాక్స్ నిండింది. కొత్త వాయిస్ మెయిల్‌ను స్వీకరించడానికి కొన్ని సందేశాలను తొలగించడానికి ప్రయత్నించండి."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[ప్రయోగాత్మకం] అదనపు నిల్వ మరియు బ్యాకప్‌ను ఆన్ చేయండి"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"మీ మెయిల్‌బాక్స్ నిండింది. స్థలాన్ని ఖాళీ చేసేందుకు అదనపు నిల్వను ఆన్ చేయండి, అప్పుడు Google మీ వాయిస్ మెయిల్ సందేశాలను నిర్వహించగలదు మరియు బ్యాకప్ చేయగలదు. "<b><i>"ప్రస్తుతం ఈ లక్షణం పరీక్షించబడుతున్నందున "</i></b>"మీ వాయిస్ మెయిల్ సర్వర్ నుండి సంభావ్యంగా వాయిస్ మెయిల్‌లు తొలగించబడతాయి, అలాగే మేము భవిష్యత్తులో ఈ లక్షణానికి మద్దతు ఇస్తామని ఎలాంటి వాగ్దానం చేయము. అయితే, మీ అభిప్రాయాన్ని అందిస్తే మేము సంతోషిస్తాము."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[ప్రయోగాత్మకం] అదనపు నిల్వ మరియు బ్యాకప్‌ను ఆన్ చేయండి"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"మీ మెయిల్‌బాక్స్ దాదాపు నిండింది. స్థలాన్ని ఖాళీ చేసేందుకు అదనపు నిల్వను ఆన్ చేయండి, అప్పుడు Google మీ వాయిస్ మెయిల్ సందేశాలను నిర్వహించగలదు మరియు బ్యాకప్ చేయగలదు. "<b><i>"ప్రస్తుతం ఈ లక్షణం పరీక్షించబడుతున్నందున "</i></b>"మీ వాయిస్ మెయిల్ సర్వర్ నుండి సంభావ్యంగా వాయిస్ మెయిల్‌లు తొలగించబడతాయి మరియు మేము భవిష్యత్తులో ఈ లక్షణానికి మద్దతు ఇస్తామని ఎలాంటి వాగ్దానం చేయము. అయితే, మీ అభిప్రాయాన్ని అందిస్తే మేము సంతోషిస్తాము."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"అదనపు నిల్వ మరియు బ్యాకప్‌ను ఆన్ చేయండి"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"మీ మెయిల్‌బాక్స్ నిండింది. స్థలాన్ని ఖాళీ చేసేందుకు అదనపు నిల్వను ఆన్ చేయండి, దీని వలన Google మీ వాయిస్ మెయిల్ సందేశాలను నిర్వహించగలదు మరియు బ్యాకప్ చేయగలదు."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"అదనపు నిల్వ మరియు బ్యాకప్‌ను ఆన్ చేయండి"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"మీ మెయిల్‌బాక్స్ దాదాపు నిండిపోయింది. స్థలాన్ని ఖాళీ చేసేందుకు అదనపు నిల్వను ఆన్ చేయండి, దీని వలన Google మీ వాయిస్ మెయిల్ సందేశాలను నిర్వహించగలదు మరియు బ్యాకప్ చేయగలదు."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"మీ వాయిస్ మెయిల్ PIN సెట్ చేయండి"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"మీరు మీ వాయిస్ మెయిల్‌ను ప్రాప్యత చేయడానికి కాల్ చేసే ప్రతిసారి మీకు వాయిస్ మెయిల్ PIN అవసరమవుతుంది."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"తెలియని లోపం"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-th/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-th/strings.xml
index 97ceee724..31302cc65 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-th/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-th/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"คุณจะไม่สามารถรับข้อความเสียงใหม่ได้ ถ้ากล่องจดหมายเต็ม"</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"ไม่สามารถรับข้อความเสียงใหม่ได้"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"กล่องจดหมายเต็ม ลองลบข้อความบางส่วนออกเพื่อรับข้อความเสียงใหม่"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[ทดสอบ] เปิดพื้นที่เก็บข้อมูลและการสำรองข้อมูลเพิ่มเติม"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"กล่องจดหมายเต็มแล้ว หากต้องการทำให้พื้นที่ว่างมากขึ้น โปรดเปิดพื้นที่เก็บข้อมูลเพิ่มเติมเพื่อให้ Google จัดการและสำรองข้อมูลข้อความเสียงได้ "<b><i>"คุณลักษณะนี้อยู่ในระหว่างการทดสอบ"</i></b>"และอาจลบข้อความเสียงออกจากเซิร์ฟเวอร์ข้อความเสียงได้ เราไม่สัญญาว่าจะรองรับคุณลักษณะนี้ในอนาคต แต่ยินดีรับฟังความคิดเห็น"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[ทดสอบ] เปิดพื้นที่เก็บข้อมูลและการสำรองข้อมูลเพิ่มเติม"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"กล่องจดหมายใกล้จะเต็มแล้ว หากต้องการทำให้พื้นที่ว่างมากขึ้น โปรดเปิดพื้นที่เก็บข้อมูลเพิ่มเติมเพื่อให้ Google จัดการและสำรองข้อมูลข้อความเสียงได้ "<b><i>"คุณลักษณะนี้อยู่ในระหว่างการทดสอบ"</i></b>"และอาจลบข้อความเสียงออกจากเซิร์ฟเวอร์ข้อความเสียงได้ เราไม่สัญญาว่าจะรองรับคุณลักษณะนี้ในอนาคต แต่ยินดีรับฟังความคิดเห็น"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"เปิดพื้นที่เก็บข้อมูลเพิ่มเติมและการสำรองข้อมูล"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"กล่องจดหมายของคุณเต็มแล้ว หากต้องการเพิ่มพื้นที่ว่าง โปรดเปิดพื้นที่เก็บข้อมูลเพิ่มเติมเพื่อให้ Google สามารถจัดการและเก็บสำรองข้อความเสียงได้"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"เปิดพื้นที่เก็บข้อมูลเพิ่มเติมและการสำรองข้อมูล"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"กล่องจดหมายของคุณใกล้เต็มแล้ว หากต้องการเพิ่มพื้นที่ว่าง โปรดเปิดพื้นที่เก็บข้อมูลเพิ่มเติมเพื่อให้ Google สามารถจัดการและเก็บสำรองข้อความเสียงได้"</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"ตั้งค่า PIN ข้อความเสียง"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"คุณต้องใช้ PIN ข้อความเสียงทุกครั้งที่โทรหาบริการข้อความเสียง"</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"ข้อผิดพลาดที่ไม่ทราบสาเหตุ"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-tl/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-tl/strings.xml
index f8bcc952a..b99d0c377 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-tl/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-tl/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Hindi ka makakatanggap ng bagong voicemail kung puno na ang inbox mo."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Hindi makatanggap ng mga bagong voicemail"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Puno na ang inbox mo. Subukang i-delete ang ilang mensahe upang makatanggap ng bagong voicemail."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Eksperimental] I-on ang karagdagang storage at backup"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Puno na ang iyong mailbox. Upang magbakante ng space, i-on ang karagdagang storage para mapamahalaan at ma-back up ng Google ang iyong mga mensahe sa voicemail. "<b><i>"Kasalukuyang sinusubukan ang feature na ito "</i></b>"at posibleng i-delete ang mga voicemail mula sa iyong server ng voicemail, at hindi namin ipinapangakong susuportahan ang feature na ito sa hinaharap. Gayunpaman, gusto naming makuha ang iyong feedback."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Eksperimental] I-on ang karagdagang storage at backup"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Malapit nang mapuno ang iyong mailbox. Upang magbakante ng space, i-on ang karagdagang storage para mapamahalaan at ma-back up ng Google ang iyong mga mensahe sa voicemail. "<b><i>"Kasalukuyang sinusubukan ang feature na ito "</i></b>"at posibleng i-delete ang mga voicemail mula sa iyong server ng voicemail, at hindi namin ipinapangakong susuportahan ang feature na ito sa hinaharap. Gayunpaman, gusto naming makuha ang iyong feedback."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"I-on ang karagdagang storage at backup"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Puno na ang iyong mailbox. Upang magbakante ng space, i-on ang karagdagang storage para pamahalaan at i-back up ng Google ang iyong mga mensahe sa voicemail."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"I-on ang karagdagang storage at backup"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Malapit nang mapuno ang iyong mailbox. Upang magbakante ng space, i-on ang karagdagang storage para pamahalaan at i-back up ng Google ang iyong mga mensahe sa voicemail."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Itakda ang iyong PIN sa voicemail"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Kakailanganin mo ng isang PIN sa voicemail sa tuwing tatawag ka upang ma-access ang iyong voicemail."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Hindi alam na error"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-tr/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-tr/strings.xml
index 428543d3b..be5cbb027 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-tr/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-tr/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Gelen kutunuz dolarsa yeni sesli mesajları alamayacaksınız."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Yeni sesli mesajlar alınamıyor"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Gelen kutunuz doldu. Yeni sesli mesajları almak için bazı mesajları silmeyi deneyin."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Deneysel] Ekstra depolama alanını ve yedeklemeyi etkinleştirin"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Posta kutunuz dolu. Google\'ın sesli mesajlarınızı yönetebileceği ve yedekleyebileceği şekilde yer açmak için ekstra depolama alanını etkinleştirin. "<b><i>"Bu özellik henüz test edilmektedir "</i></b>"ve sesli mesaj sunucunuzdaki sesli mesajların silinmesine neden olabilir. Ayrıca, bu özelliğin gelecekte destekleneceğine dair bir garanti vermiyoruz. Yine de geri bildirimlerinizi öğrenmek isteriz."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Deneysel] Ekstra depolama alanını ve yedeklemeyi etkinleştirin"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Posta kutunuz dolmak üzere. Google\'ın sesli mesajlarınızı yönetebileceği ve yedekleyebileceği şekilde yer açmak için ekstra depolama alanını etkinleştirin. "<b><i>"Bu özellik henüz test edilmektedir "</i></b>"ve sesli mesaj sunucunuzdaki sesli mesajların silinmesine neden olabilir. Ayrıca, bu özelliğin gelecekte destekleneceğine dair bir garanti vermiyoruz. Yine de geri bildirimlerinizi öğrenmek isteriz."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Ekstra depolama alanını ve yedeklemeyi etkinleştirin"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Posta kutunuz dolu. Google\'ın sesli mesajlarınızı yönetebileceği ve yedekleyebileceği şekilde yer açmak için ekstra depolama alanını etkinleştirin."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Ekstra depolama alanını ve yedeklemeyi etkinleştirin"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Posta kutunuz dolmak üzere. Google\'ın sesli mesajlarınızı yönetebileceği ve yedekleyebileceği şekilde yer açmak için ekstra depolama alanını etkinleştirin."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Sesli mesaj PIN\'inizi ayarlayın"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Sesli mesajlarınıza erişmek için her aradığınızda bir sesli mesaj PIN\'i girmeniz gerekecek."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Bilinmeyen hata"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-uk/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-uk/strings.xml
index 30e83f2d7..6adf49ab9 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-uk/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-uk/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Якщо папка вхідної голосової пошти заповнена, ви не зможете отримувати нові повідомлення."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Неможливо отримати нові голосові повідомлення"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Папка вхідної голосової пошти заповнена. Видаліть деякі повідомлення, щоб отримати нові."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Експериментальна функція] Увімкніть додаткову пам’ять і резервне копіювання"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"У поштовій скриньці не залишилося місця. Щоб звільнити його, увімкніть додаткову пам’ять, і тоді Google робитиме резервні копії вашої голосової пошти та керуватиме нею. "<b><i>"Ця функція зараз тестується, "</i></b>"і в результаті її використання голосові повідомлення може бути видалено із сервера голосової пошти. Ми не гарантуємо, що вона підтримуватиметься в майбутньому, однак хочемо отримати ваш відгук."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Експериментальна функція] Увімкніть додаткову пам’ять і резервне копіювання"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"У поштовій скриньці майже не залишилося місця. Щоб звільнити його, увімкніть додаткову пам’ять, і тоді Google робитиме резервні копії вашої голосової пошти та керуватиме нею. "<b><i>"Ця функція зараз тестується, "</i></b>"і в результаті її використання голосові повідомлення може бути видалено із сервера голосової пошти. Ми не гарантуємо, що вона підтримуватиметься в майбутньому, однак хочемо отримати ваш відгук."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Увімкніть додаткову пам’ять і резервне копіювання"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"У поштовій скриньці не залишилося місця. Щоб звільнити його, увімкніть додаткову пам’ять, і тоді Google почне робити резервні копії вашої голосової пошти й керувати нею."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Увімкніть додаткову пам’ять і резервне копіювання"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"У поштовій скриньці майже не залишилося місця. Щоб звільнити його, увімкніть додаткову пам’ять, і тоді Google почне робити резервні копії вашої голосової пошти й керувати нею."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Установіть PIN-код голосової пошти"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"PIN-код буде потрібен під час кожного дзвінка на голосову пошту."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Невідома помилка"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-ur/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-ur/strings.xml
index ab640ffd1..e6fd9f7a0 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-ur/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-ur/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"اگر آپ کا ان باکس بھرا ہوا ہوگا تو آپ نئی صوتی میل موصول نہیں کر پائیں گے۔"</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"نئی صوتی میلز موصول نہیں ہو سکتی"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"آپ کا ان باکس بھرا ہوا ہے۔ نئی صوتی میل موصول کرنے کیلئے کچھ پیغامات حذف کرنے کی کوشش کریں۔"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[تجرباتی] اضافی اسٹوریج اور بیک اپ آن کریں"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"‏آپ کا میل باکس تقریبا بھرا ہوا ہے۔ جگہ خالی کرنے کیلئے، اضافی اسٹوریج آن کریں تاکہ Google آپ کے صوتی میل پیغامات کا بیک اپ اور نظم کر سکے۔ "<b><i>"یہ خصوصیت ابھی ٹیسٹ کی جا رہی ہے "</i></b>"اور ممکنہ طور پر آپ کے صوتی میل سرور پر سے آپ کی صوتی میلز کو حذف کر دے گی اور مستقبل میں اس خصوصیت کی معاونت کا ہم وعدہ نہیں کرتے۔ لیکن ہم آپ کے تاثرات کو پسند کریں گے۔"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[تجرباتی] اضافی اسٹوریج اور بیک اپ آن کریں"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"‏آپ کا میل باکس تقریبا بھرا ہوا ہے۔ جگہ خالی کرنے کیلئے، اضافی اسٹوریج آن کریں تاکہ Google آپ کے صوتی میل پیغامات کا بیک اپ اور نظم کر سکے۔ "<b><i>"یہ خصوصیت ابھی ٹیسٹ کی جا رہی ہے "</i></b>"اور ممکنہ طور پر آپ کے صوتی میل سرور پر سے آپ کی صوتی میلز کو حذف کر دے گی اور مستقبل میں اس خصوصیت کی معاونت کا ہم وعدہ نہیں کرتے۔ لیکن ہم آپ کے تاثرات کو پسند کریں گے۔"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"اضافی اسٹوریج اور بیک اپ آن کریں"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"‏آپ کا میل باکس بھر گیا ہے۔ جگہ خالی کرنے کیلئے، اضافی اسٹوریج کو آن کریں تا کہ Google آپ کے صوتی میل پیغامات کا بیک اپ اور ان کا نظم کر سکے۔"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"اضافی اسٹوریج اور بیک اپ آن کریں"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"‏آپ کا میل باکس تقریباً بھر گیا ہے۔ جگہ خالی کرنے کیلئے، اضافی اسٹوریج کو آن کریں تا کہ Google آپ کے صوتی میل پیغامات کا بیک اپ اور ان کا نظم کر سکے۔"</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"‏اپنی صوتی میل PIN سیٹ کریں"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"‏آپ جب بھی صوتی میل تک رسائی کیلئے کال کریں گے تو آپ کو صوتی میل PIN چاہئیے ہوگی۔"</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"نامعلوم خرابی"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-uz/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-uz/strings.xml
index 0cfd29c24..5583e2778 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-uz/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-uz/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Agar ovozli pochta qutisi to‘lib qolsa, yangi xabarlar qabul qilishning imkoni bo‘lmay qoladi."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Yangi ovozli pochta xabarlarini qabul qilib bo‘lmadi"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Ovozli pochta qutisi to‘lgan. Yangi xabarlar qabul qilish uchun eskilaridan bir nechtasini o‘chirib tashlang."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Tajribaviy xususiyat] Zaxiralash va saqlash uchun qo‘shimcha xotirani faollashtiring"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Pochta qutisi to‘lgan. Unda joy bo‘shatish uchun qo‘shimcha xotirani faollashtiring. Bu – Google’ga ovozli xabarlaringizni boshqarish va ularning nusxasini zaxiralashga imkon beradi. "<b><i>"Bu xususiyat ayni vaqtda sinovdan o‘tkazilmoqda."</i></b>" Sizning ovozli xabarlaringiz, ehtimol, ovozli pochta serveridan o‘chirib tashlanadi. Bu xususiyatning keyinchalik qo‘llab-quvvatlanishi kafolatlanmaydi. Shunday bo‘lsa-da, u haqda fikr-mulohaza bildirishingizni xohlaymiz."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Tajribaviy xususiyat] Zaxiralash va saqlash uchun qo‘shimcha xotirani faollashtiring"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Pochta qutisi deyarli to‘lgan. Unda joy bo‘shatish uchun qo‘shimcha xotirani faollashtiring. Bu – Google’ga ovozli xabarlaringizni boshqarish va ularning nusxasini zaxiralashga imkon beradi. "<b><i>"Bu xususiyat ayni vaqtda sinovdan o‘tkazilmoqda."</i></b>" Sizning ovozli xabarlaringiz, ehtimol, ovozli pochta serveridan o‘chirib tashlanadi. Bu xususiyatning keyinchalik qo‘llab-quvvatlanishi kafolatlanmaydi. Shunday bo‘lsa-da, u haqda fikr-mulohaza bildirishingizni xohlaymiz."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Qo‘shimcha xotira va zaxiralash xususiyatini yoqish"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Pochtangiz qutisi deyarli to‘lgan. Unda joy bo‘shatish uchun qo‘shimcha xotirani yoqing. Google esa, ovozli xabarlaringiz nusxasini zaxiralashni hamda ularni boshqarishni boshlaydi."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Qo‘shimcha xotira va zaxiralash xususiyatini yoqish"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Pochtangiz qutisi deyarli to‘lgan. Unda joy bo‘shatish uchun qo‘shimcha xotirani yoqing. Google esa, ovozli xabarlaringiz nusxasini zaxiralashni hamda ularni boshqarishni boshlaydi."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Ovozli pochta uchun PIN kod o‘rnatish"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Ovozli pochtaga har safar qo‘ng‘iroq qilinganda PIN kod so‘raladi."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Noma’lum xatolik"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-vi/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-vi/strings.xml
index 819b35161..029396e31 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-vi/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-vi/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Bạn sẽ không thể nhận được thư thoại mới nếu hộp thư đến của bạn đã đầy."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Không nhận được thư thoại mới"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Hộp thư đến của bạn đã đầy. Hãy thử xóa một vài thư để nhận thư thoại mới."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Thử nghiệm] Bật bộ nhớ và bản sao lưu bổ sung"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Hộp thư của bạn đã đầy. Để tạo thêm dung lượng, hãy bật bộ nhớ bổ sung để Google có thể quản lý và sao lưu tin nhắn thoại của bạn. "<b><i>"Tính năng này hiện đang được thử nghiệm "</i></b>"và có khả năng sẽ xóa thư thoại của bạn khỏi máy chủ thư thoại. Ngoài ra, chúng tôi không cam kết hỗ trợ tính năng này trong tương lai. Mặc dù vậy, chúng tôi vẫn mong muốn nhận được phản hồi của bạn."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Thử nghiệm] Bật bộ nhớ và bản sao lưu bổ sung"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Hộp thư của bạn sắp đầy. Để tạo thêm dung lượng, hãy bật bộ nhớ bổ sung để Google có thể quản lý và sao lưu tin nhắn thoại của bạn. "<b><i>"Tính năng này hiện đang được thử nghiệm "</i></b>"và có khả năng sẽ xóa thư thoại của bạn khỏi máy chủ thư thoại. Ngoài ra, chúng tôi không cam kết hỗ trợ tính năng này trong tương lai. Mặc dù vậy, chúng tôi vẫn mong muốn nhận được phản hồi của bạn."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Bật sao lưu và bộ nhớ bổ sung"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Hộp thư của bạn đã đầy. Để giải phóng dung lượng, hãy bật bộ nhớ bổ sung để Google có thể quản lý và sao lưu thư thoại của bạn."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Bật sao lưu và bộ nhớ bổ sung"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Hộp thư của bạn đã gần đầy. Để giải phóng dung lượng, hãy bật bộ nhớ bổ sung để Google có thể quản lý và sao lưu thư thoại của bạn."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Đặt mã PIN thư thoại của bạn"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Bạn cần có mã PIN thư thoại mỗi khi gọi để truy cập thư thoại của mình."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Lỗi không xác định"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-zh-rCN/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-zh-rCN/strings.xml
index 4efebc588..faa36dead 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-zh-rCN/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-zh-rCN/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"如果收件箱已满,您将无法接收新的语音邮件。"</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"无法接收新的语音邮件"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"您的收件箱已满。请尝试删除部分邮件,以便接收新的语音邮件。"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[试验性功能] 启用额外存储空间和备份功能"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"您的邮箱已满。要释放空间,请启用额外存储空间,以便 Google 管理和备份您的语音邮件。"<b><i>"此功能目前正处于测试阶段"</i></b>"并且可能会将语音邮件从您的语音邮件服务器上删除。我们不保证将来会支持此功能,但希望能收到您的反馈。"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[试验性功能] 启用额外存储空间和备份功能"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"您的邮箱已满。要释放空间,请启用额外存储空间,以便 Google 管理和备份您的语音邮件。"<b><i>"此功能目前正处于测试阶段"</i></b>"并且可能会将语音邮件从您的语音邮件服务器上删除。我们不保证将来会支持此功能,但希望能收到您的反馈。"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"启用额外存储空间和备份功能"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"您的邮箱已满。要释放空间,请启用额外存储空间,以便 Google 管理和备份您的语音邮件。"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"启用额外存储空间和备份功能"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"您的邮箱快满了。要释放空间,请启用额外存储空间,以便 Google 管理和备份您的语音邮件。"</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"设置语音信箱 PIN 码"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"您必须使用语音信箱 PIN 码,才能访问您的语音信箱。"</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"未知错误"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-zh-rHK/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-zh-rHK/strings.xml
index 0ef798e6a..e51a0a902 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-zh-rHK/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-zh-rHK/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"如果您的收件箱已滿,就無法接收新留言。"</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"無法接收新留言"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"您的收件箱已滿。建議您刪除部分訊息以接收新留言。"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[實驗性] 啟用額外儲存裝置和備份功能"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"您的信箱已滿。若要騰出空間,請啟用額外儲存空間,以便 Google 管理及備份您的留言訊息。"<b><i>"此功能目前處於測試階段,"</i></b>"有可能會將您的留言從留言伺服器刪除。我們不保證日後會支援此功能,但還是歡迎您提供相關意見。"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[實驗性] 啟用額外儲存裝置和備份功能"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"您的信箱將滿。若要騰出空間,請啟用額外儲存空間,以便 Google 管理及備份您的留言訊息。"<b><i>"此功能目前處於測試階段,"</i></b>"有可能會將您的留言從留言伺服器刪除。我們不保證日後會支援此功能,但還是歡迎您提供相關意見。"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"啟用額外儲存裝置和備份功能"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"您的信箱已滿。若要騰出空間,請啟用額外儲存裝置,以便 Google 管理並備份您的留言訊息。"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"啟用額外儲存裝置和備份功能"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"您的信箱快要滿了。若要騰出空間,請啟用額外儲存裝置,以便 Google 管理並備份您的留言訊息。"</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"設定留言信箱 PIN"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"您必須輸入留言信箱 PIN 才可收聽留言。"</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"不明錯誤"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-zh-rTW/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-zh-rTW/strings.xml
index 9b22c403e..7f2e1d61c 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-zh-rTW/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-zh-rTW/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"收件匣已滿時無法接收新的語音留言。"</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"無法接收新的語音留言"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"您的收件匣已滿。請刪除部分訊息,以便接收新的語音留言。"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[實驗性] 啟用額外的儲存空間和備份功能"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"你的信箱容量已滿。如要釋出空間,請啟用額外的儲存空間,方便 Google 管理及備份你的語音留言。"<b>"這項功能目前正在測試階段"<i></i></b>",可能會從你的語音信箱伺服器中刪除語音留言。我們不保證日後會支援此功能,但還是希望聽聽你的寶貴意見。"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[實驗性] 啟用額外的儲存空間和備份功能"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"你的信箱容量幾乎已滿。如要釋出空間,請啟用額外的儲存空間,方便 Google 管理及備份你的語音留言。"<b>"這項功能目前正在測試階段"<i></i></b>",可能會從你的語音信箱伺服器中刪除語音留言。我們不保證日後會支援此功能,但還是希望聽聽你的寶貴意見。"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"啟用額外的儲存空間和備份功能"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"你的信箱容量已滿。如要釋出空間,請啟用額外的儲存空間,方便 Google 管理及備份你的語音留言。"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"啟用額外的儲存空間和備份功能"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"你的信箱容量幾乎已滿。如要釋出空間,請啟用額外的儲存空間,方便 Google 管理及備份你的語音留言。"</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"設定您的語音信箱 PIN 碼"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"您必須輸入語音信箱 PIN 碼才能存取您的語音信箱。"</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"不明錯誤"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values-zu/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values-zu/strings.xml
index fa2613216..8d3cd79ea 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values-zu/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values-zu/strings.xml
@@ -44,10 +44,10 @@
<string name="voicemail_error_inbox_near_full_message" msgid="354118612203528244">"Ngeke uze ukwazi ukuthola ivoyisimeyili entsha uma ibhokisi lakho lokungenayo ligcwele."</string>
<string name="voicemail_error_inbox_full_title" msgid="249268068442046872">"Ayikwazi ukwamukela amavoyisimeyili amasha"</string>
<string name="voicemail_error_inbox_full_message" msgid="5788411018158899123">"Ibhokisi lakho lokungenayo ligcwele. Zama ukususa eminye imilayezo ukuze uthole ivoyisimeyili entsha."</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="3083779676549536189">"[Ukuhlolwa] Vula isitoreji esingeziwe nesipele"</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="4236256841748725792">"Ibhokisi lakho lemeyili ligcwele. Ukuze ukhulule isikhala, vula isitoreji esingeziwe ukuze i-Google ikwazi ukuphatha iphinde yenze isipele imilayezo yakho yevoyisimeyili. "<b><i>"Lesi sici manje siyahlolwa "</i></b>"futhi sinamandla okususa amavoyisimeyili kusukela kuseva yakho yevoyisimeyili, futhi asithembisi ukusekela lesi sici ngokuzayo. Singayijabulela impendulo yakho yize kunjalo."</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="6118464905488477869">"[Ukuhlolwa] Vula isitoreji esingeziwe nesipele"</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="7289015622668426730">"Ibhokisi lakho lemeyili selicishe ligcwele. Ukuze ukhulule isikhala, vula isitoreji esingeziwe ukuze i-Google ikwazi ukuphatha iphinde yenze isipele imilayezo yakho yevoyisimeyili. "<b><i>"Lesi sici manje siyahlolwa "</i></b>"futhi sinamandla okususa amavoyisimeyili kusukela kuseva yakho yevoyisimeyili, futhi asithembisi ukusekela lesi sici ngokuzayo. Singayijabulela impendulo yakho yize kunjalo."</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title" msgid="6209039728273651055">"Vula isitoreji esingeziwe nesipele"</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message" msgid="5203159732288749722">"Ibhokisi lakho lemeyili ligcwele. Ukuze ukhulule isikhala, vula isitoreji esingeziwe ukuze i-Google ikwazi ukuphatha futhi yenze isipele imilTo free up space, turn on extra storage so Google can manage and backup your voicemail messages."</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title" msgid="20352920357816927">"Vula isitoreji esingeziwe nesipele"</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message" msgid="9140680538578301853">"Ibhokisi lakho lemeyili cishe ligcwele. Ukuze ukhulule isikhala, vula isitoreji esingeziwe ukuze i-Google ikwazi ukuphatha nokwenza isipele imilayezo yakho yevoyisimeyili."</string>
<string name="voicemail_error_pin_not_set_title" msgid="1287168514277948082">"Setha iphini yakho yevoyisimeyili"</string>
<string name="voicemail_error_pin_not_set_message" msgid="3802375002103184625">"Udinga iphini yevoyisimeyili noma kunini uma wenza ikholi ukufinyelela ivoyisimeyili yakho."</string>
<string name="voicemail_error_unknown_title" msgid="7214482611706360680">"Iphutha elingaziwa"</string>
diff --git a/java/com/android/dialer/app/voicemail/error/res/values/dimens.xml b/java/com/android/dialer/app/voicemail/error/res/values/dimens.xml
index 20dd40a8f..090311f15 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values/dimens.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values/dimens.xml
@@ -9,4 +9,17 @@
<dimen name="alert_action_horizontal_padding">4dp</dimen>
<dimen name="alert_action_between_padding">11dp</dimen>
<dimen name="alert_line_spacing">4dp</dimen>
+
+ <!-- Dimensions for promo card -->
+ <dimen name="voicemail_promo_card_icon_size">24dp</dimen>
+ <dimen name="voicemail_promo_card_start_padding">16dp</dimen>
+ <dimen name="voicemail_promo_card_top_padding">21dp</dimen>
+ <dimen name="voicemail_promo_card_main_padding">24dp</dimen>
+ <dimen name="voicemail_promo_card_title_padding">12dp</dimen>
+ <dimen name="voicemail_promo_card_action_vertical_padding">4dp</dimen>
+ <dimen name="voicemail_promo_card_action_end_padding">4dp</dimen>
+ <dimen name="voicemail_promo_card_action_between_padding">11dp</dimen>
+ <dimen name="voicemail_promo_card_line_spacing">4dp</dimen>
+ <dimen name="voicemail_promo_card_title_text_size">16sp</dimen>
+ <dimen name="voicemail_promo_card_message_size">14sp</dimen>
</resources> \ No newline at end of file
diff --git a/java/com/android/dialer/app/voicemail/error/res/values/strings.xml b/java/com/android/dialer/app/voicemail/error/res/values/strings.xml
index d14652553..94d3dba11 100644
--- a/java/com/android/dialer/app/voicemail/error/res/values/strings.xml
+++ b/java/com/android/dialer/app/voicemail/error/res/values/strings.xml
@@ -54,11 +54,11 @@
<string name="voicemail_error_inbox_full_title">Can\'t receive new voicemails</string>
<string name="voicemail_error_inbox_full_message">Your inbox is full. Try deleting some messages to receive new voicemail.</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_title">[Experimental] Turn on extra storage and backup</string>
- <string name="voicemail_error_inbox_full_turn_archive_on_message">Your mailbox is full. To free up space, turn on extra storage so Google can manage and backup your voicemail messages. <b><i>This feature is currently being tested </i></b>and will potentially delete voicemails from your voicemail server, and we do not promise to support this feature in the future. We would love your feedback though.</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_title">Turn on extra storage and backup</string>
+ <string name="voicemail_error_inbox_full_turn_archive_on_message">Your mailbox is full. To free up space, turn on extra storage so Google can manage and backup your voicemail messages.</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_title">[Experimental] Turn on extra storage and backup</string>
- <string name="voicemail_error_inbox_almost_full_turn_archive_on_message">Your mailbox is almost full. To free up space, turn on extra storage so Google can manage and backup your voicemail messages. <b><i>This feature is currently being tested </i></b>and will potentially delete voicemails from your voicemail server, and we do not promise to support this feature in the future. We would love your feedback though.</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_title">Turn on extra storage and backup</string>
+ <string name="voicemail_error_inbox_almost_full_turn_archive_on_message">Your mailbox is almost full. To free up space, turn on extra storage so Google can manage and backup your voicemail messages.</string>
<string name="voicemail_error_pin_not_set_title">Set your voicemail PIN</string>
<string name="voicemail_error_pin_not_set_message">You\'ll need a voicemail PIN anytime you call to access your voicemail.</string>
diff --git a/java/com/android/dialer/backup/DialerBackupAgent.java b/java/com/android/dialer/backup/DialerBackupAgent.java
index 0841e82e7..27dfc29f4 100644
--- a/java/com/android/dialer/backup/DialerBackupAgent.java
+++ b/java/com/android/dialer/backup/DialerBackupAgent.java
@@ -33,12 +33,11 @@ import android.provider.VoicemailContract;
import android.provider.VoicemailContract.Voicemails;
import android.telecom.PhoneAccountHandle;
import android.util.Pair;
-import com.android.dialer.backup.nano.VoicemailInfo;
import com.android.dialer.common.Assert;
import com.android.dialer.common.ConfigProviderBindings;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
import com.android.dialer.telecom.TelecomUtil;
import java.io.File;
import java.io.IOException;
@@ -59,7 +58,7 @@ public class DialerBackupAgent extends BackupAgent {
// Voicemail Uri Column
public static final String VOICEMAIL_URI = "voicemail_uri";
// Voicemail packages to backup
- public static final String VOICEMAIL_SOURCE_PACKAGE = "com.android.phone";
+ public static final String VOICEMAIL_SOURCE_PACKAGE = "com.google.android.dialer";
private long voicemailsBackedupSoFar = 0;
private long sizeOfVoicemailsBackedupSoFar = 0;
diff --git a/java/com/android/dialer/backup/DialerBackupUtils.java b/java/com/android/dialer/backup/DialerBackupUtils.java
index 410772ff0..17e82e45d 100644
--- a/java/com/android/dialer/backup/DialerBackupUtils.java
+++ b/java/com/android/dialer/backup/DialerBackupUtils.java
@@ -30,16 +30,14 @@ import android.support.annotation.Nullable;
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
import android.util.Pair;
-import com.android.dialer.backup.nano.VoicemailInfo;
import com.android.dialer.common.Assert;
import com.android.dialer.common.ConfigProviderBindings;
import com.android.dialer.common.LogUtil;
import com.android.voicemail.VoicemailComponent;
import com.google.common.io.ByteStreams;
import com.google.common.io.Files;
-import com.google.protobuf.nano.MessageNano;
+import com.google.protobuf.ByteString;
import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@@ -66,15 +64,14 @@ public class DialerBackupUtils {
ByteStreams.copy(decodedStream, restoreStream);
}
- public static @Nullable byte[] audioStreamToByteArray(@NonNull InputStream stream)
+ public static @Nullable ByteString audioStreamToByteString(@NonNull InputStream stream)
throws IOException {
- ByteArrayOutputStream buffer = new ByteArrayOutputStream();
if (stream.available() > 0) {
- ByteStreams.copy(stream, buffer);
+ return ByteString.readFrom(stream);
} else {
LogUtil.i("DialerBackupUtils.audioStreamToByteArray", "no audio stream to backup");
}
- return buffer.toByteArray();
+ return ByteString.EMPTY;
}
public static void writeProtoToFile(@NonNull File file, @NonNull VoicemailInfo voicemailInfo)
@@ -83,7 +80,7 @@ public class DialerBackupUtils {
"DialerBackupUtils.writeProtoToFile",
"backup " + voicemailInfo + " to " + file.getAbsolutePath());
- byte[] bytes = MessageNano.toByteArray(voicemailInfo);
+ byte[] bytes = voicemailInfo.toByteArray();
Files.write(bytes, file);
}
@@ -111,7 +108,7 @@ public class DialerBackupUtils {
public static VoicemailInfo convertVoicemailCursorRowToProto(
@NonNull Cursor cursor, @NonNull ContentResolver contentResolver) throws IOException {
- VoicemailInfo voicemailInfo = new VoicemailInfo();
+ VoicemailInfo.Builder voicemailInfo = VoicemailInfo.newBuilder();
for (int i = 0; i < cursor.getColumnCount(); ++i) {
String name = cursor.getColumnName(i);
@@ -126,56 +123,56 @@ public class DialerBackupUtils {
switch (name) {
case Voicemails.DATE:
- voicemailInfo.date = value;
+ voicemailInfo.setDate(value);
break;
case Voicemails.DELETED:
- voicemailInfo.deleted = value;
+ voicemailInfo.setDeleted(value);
break;
case Voicemails.DIRTY:
- voicemailInfo.dirty = value;
+ voicemailInfo.setDirty(value);
break;
case Voicemails.DIR_TYPE:
- voicemailInfo.dirType = value;
+ voicemailInfo.setDirType(value);
break;
case Voicemails.DURATION:
- voicemailInfo.duration = value;
+ voicemailInfo.setDuration(value);
break;
case Voicemails.HAS_CONTENT:
- voicemailInfo.hasContent = value;
+ voicemailInfo.setHasContent(value);
break;
case Voicemails.IS_READ:
- voicemailInfo.isRead = value;
+ voicemailInfo.setIsRead(value);
break;
case Voicemails.ITEM_TYPE:
- voicemailInfo.itemType = value;
+ voicemailInfo.setItemType(value);
break;
case Voicemails.LAST_MODIFIED:
- voicemailInfo.lastModified = value;
+ voicemailInfo.setLastModified(value);
break;
case Voicemails.MIME_TYPE:
- voicemailInfo.mimeType = value;
+ voicemailInfo.setMimeType(value);
break;
case Voicemails.NUMBER:
- voicemailInfo.number = value;
+ voicemailInfo.setNumber(value);
break;
case Voicemails.PHONE_ACCOUNT_COMPONENT_NAME:
- voicemailInfo.phoneAccountComponentName = value;
+ voicemailInfo.setPhoneAccountComponentName(value);
break;
case Voicemails.PHONE_ACCOUNT_ID:
- voicemailInfo.phoneAccountId = value;
+ voicemailInfo.setPhoneAccountId(value);
break;
case Voicemails.SOURCE_DATA:
- voicemailInfo.sourceData = value;
+ voicemailInfo.setSourceData(value);
break;
case Voicemails.SOURCE_PACKAGE:
- voicemailInfo.sourcePackage = value;
+ voicemailInfo.setSourcePackage(value);
break;
case Voicemails.TRANSCRIPTION:
- voicemailInfo.transcription = value;
+ voicemailInfo.setTranscription(value);
break;
case DialerBackupAgent.VOICEMAIL_URI:
try (InputStream audioStream = contentResolver.openInputStream(Uri.parse(value))) {
- voicemailInfo.encodedVoicemailKey = audioStreamToByteArray(audioStream);
+ voicemailInfo.setEncodedVoicemailKey(audioStreamToByteString(audioStream));
}
break;
default:
@@ -187,7 +184,7 @@ public class DialerBackupUtils {
break;
}
}
- return voicemailInfo;
+ return voicemailInfo.build();
}
public static Pair<ContentValues, byte[]> convertVoicemailProtoFileToContentValueAndAudioBytes(
@@ -209,45 +206,45 @@ public class DialerBackupUtils {
} else {
ContentValues contentValues = new ContentValues();
- if (!voicemailInfo.date.isEmpty()) {
- contentValues.put(Voicemails.DATE, voicemailInfo.date);
+ if (voicemailInfo.hasDate()) {
+ contentValues.put(Voicemails.DATE, voicemailInfo.getDate());
}
- if (!voicemailInfo.deleted.isEmpty()) {
- contentValues.put(Voicemails.DELETED, voicemailInfo.deleted);
+ if (voicemailInfo.hasDeleted()) {
+ contentValues.put(Voicemails.DELETED, voicemailInfo.getDeleted());
}
- if (!voicemailInfo.dirty.isEmpty()) {
- contentValues.put(Voicemails.DIRTY, voicemailInfo.dirty);
+ if (!voicemailInfo.hasDirty()) {
+ contentValues.put(Voicemails.DIRTY, voicemailInfo.getDirty());
}
- if (!voicemailInfo.duration.isEmpty()) {
- contentValues.put(Voicemails.DURATION, voicemailInfo.duration);
+ if (!voicemailInfo.hasDuration()) {
+ contentValues.put(Voicemails.DURATION, voicemailInfo.getDuration());
}
- if (!voicemailInfo.isRead.isEmpty()) {
- contentValues.put(Voicemails.IS_READ, voicemailInfo.isRead);
+ if (!voicemailInfo.hasIsRead()) {
+ contentValues.put(Voicemails.IS_READ, voicemailInfo.getIsRead());
}
- if (!voicemailInfo.lastModified.isEmpty()) {
- contentValues.put(Voicemails.LAST_MODIFIED, voicemailInfo.lastModified);
+ if (!voicemailInfo.hasLastModified()) {
+ contentValues.put(Voicemails.LAST_MODIFIED, voicemailInfo.getLastModified());
}
- if (!voicemailInfo.mimeType.isEmpty()) {
- contentValues.put(Voicemails.MIME_TYPE, voicemailInfo.mimeType);
+ if (!voicemailInfo.hasMimeType()) {
+ contentValues.put(Voicemails.MIME_TYPE, voicemailInfo.getMimeType());
}
- if (!voicemailInfo.number.isEmpty()) {
- contentValues.put(Voicemails.NUMBER, voicemailInfo.number);
+ if (!voicemailInfo.hasNumber()) {
+ contentValues.put(Voicemails.NUMBER, voicemailInfo.getNumber());
}
- if (!voicemailInfo.phoneAccountComponentName.isEmpty()) {
+ if (!voicemailInfo.hasPhoneAccountComponentName()) {
contentValues.put(
- Voicemails.PHONE_ACCOUNT_COMPONENT_NAME, voicemailInfo.phoneAccountComponentName);
+ Voicemails.PHONE_ACCOUNT_COMPONENT_NAME, voicemailInfo.getPhoneAccountComponentName());
}
- if (!voicemailInfo.phoneAccountId.isEmpty()) {
- contentValues.put(Voicemails.PHONE_ACCOUNT_ID, voicemailInfo.phoneAccountId);
+ if (!voicemailInfo.hasPhoneAccountId()) {
+ contentValues.put(Voicemails.PHONE_ACCOUNT_ID, voicemailInfo.getPhoneAccountId());
}
- if (!voicemailInfo.sourceData.isEmpty()) {
- contentValues.put(Voicemails.SOURCE_DATA, voicemailInfo.sourceData);
+ if (!voicemailInfo.hasSourceData()) {
+ contentValues.put(Voicemails.SOURCE_DATA, voicemailInfo.getSourceData());
}
- if (!voicemailInfo.sourcePackage.isEmpty()) {
- contentValues.put(Voicemails.SOURCE_PACKAGE, voicemailInfo.sourcePackage);
+ if (!voicemailInfo.hasSourcePackage()) {
+ contentValues.put(Voicemails.SOURCE_PACKAGE, voicemailInfo.getSourcePackage());
}
- if (!voicemailInfo.transcription.isEmpty()) {
- contentValues.put(Voicemails.TRANSCRIPTION, voicemailInfo.transcription);
+ if (!voicemailInfo.hasTranscription()) {
+ contentValues.put(Voicemails.TRANSCRIPTION, voicemailInfo.getTranscription());
}
contentValues.put(VoicemailContract.Voicemails.HAS_CONTENT, 1);
contentValues.put(RESTORED_COLUMN, "1");
@@ -257,7 +254,7 @@ public class DialerBackupUtils {
"DialerBackupUtils.convertVoicemailProtoFileToContentValueAndEncodedAudio",
"cv: " + contentValues);
- return Pair.create(contentValues, voicemailInfo.encodedVoicemailKey);
+ return Pair.create(contentValues, voicemailInfo.getEncodedVoicemailKey().toByteArray());
}
}
@@ -276,7 +273,7 @@ public class DialerBackupUtils {
}
if (ConfigProviderBindings.get(context)
.getBoolean("voicemail_restore_check_archive_for_source_package", true)) {
- if ("1".equals(voicemailInfo.archived)) {
+ if ("1".equals(voicemailInfo.getArchived())) {
LogUtil.i(
"DialerBackupUtils.getSourcePackage",
"voicemail was archived, using app source package");
@@ -312,7 +309,9 @@ public class DialerBackupUtils {
String.format(
"(%s = ? AND %s = ? AND %s = ?)",
Voicemails.NUMBER, Voicemails.DATE, Voicemails.DURATION),
- new String[] {voicemailInfo.number, voicemailInfo.date, voicemailInfo.duration},
+ new String[] {
+ voicemailInfo.getNumber(), voicemailInfo.getDate(), voicemailInfo.getDuration()
+ },
null,
null)) {
if (cursor.moveToFirst()
diff --git a/java/com/android/dialer/backup/nano/VoicemailInfo.java b/java/com/android/dialer/backup/nano/VoicemailInfo.java
deleted file mode 100644
index f11595ec2..000000000
--- a/java/com/android/dialer/backup/nano/VoicemailInfo.java
+++ /dev/null
@@ -1,399 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Generated by the protocol buffer compiler. DO NOT EDIT!
-
-package com.android.dialer.backup.nano;
-
-/** This file is autogenerated, but javadoc required. */
-@SuppressWarnings("hiding")
-public final class VoicemailInfo
- extends com.google.protobuf.nano.ExtendableMessageNano<VoicemailInfo> {
-
- private static volatile VoicemailInfo[] _emptyArray;
-
- public static VoicemailInfo[] emptyArray() {
- // Lazily initializes the empty array
- if (_emptyArray == null) {
- synchronized (com.google.protobuf.nano.InternalNano.LAZY_INIT_LOCK) {
- if (_emptyArray == null) {
- _emptyArray = new VoicemailInfo[0];
- }
- }
- }
- return _emptyArray;
- }
-
- // optional string date = 1;
- public java.lang.String date;
-
- // optional string deleted = 2;
- public java.lang.String deleted;
-
- // optional string dirty = 3;
- public java.lang.String dirty;
-
- // optional string dir_type = 4;
- public java.lang.String dirType;
-
- // optional string duration = 5;
- public java.lang.String duration;
-
- // optional string has_content = 6;
- public java.lang.String hasContent;
-
- // optional string is_read = 7;
- public java.lang.String isRead;
-
- // optional string item_type = 8;
- public java.lang.String itemType;
-
- // optional string last_modified = 9;
- public java.lang.String lastModified;
-
- // optional string mime_type = 10;
- public java.lang.String mimeType;
-
- // optional string number = 11;
- public java.lang.String number;
-
- // optional string phone_account_component_name = 12;
- public java.lang.String phoneAccountComponentName;
-
- // optional string phone_account_id = 13;
- public java.lang.String phoneAccountId;
-
- // optional string source_data = 14;
- public java.lang.String sourceData;
-
- // optional string source_package = 15;
- public java.lang.String sourcePackage;
-
- // optional string transcription = 16;
- public java.lang.String transcription;
-
- // optional string voicemail_uri = 17;
- public java.lang.String voicemailUri;
-
- // optional bytes encoded_voicemail_key = 18;
- public byte[] encodedVoicemailKey;
-
- // optional string archived = 19;
- public java.lang.String archived;
-
- // @@protoc_insertion_point(class_scope:com.android.dialer.backup.VoicemailInfo)
-
- public VoicemailInfo() {
- clear();
- }
-
- public VoicemailInfo clear() {
- date = "";
- deleted = "";
- dirty = "";
- dirType = "";
- duration = "";
- hasContent = "";
- isRead = "";
- itemType = "";
- lastModified = "";
- mimeType = "";
- number = "";
- phoneAccountComponentName = "";
- phoneAccountId = "";
- sourceData = "";
- sourcePackage = "";
- transcription = "";
- voicemailUri = "";
- encodedVoicemailKey = com.google.protobuf.nano.WireFormatNano.EMPTY_BYTES;
- archived = "";
- unknownFieldData = null;
- cachedSize = -1;
- return this;
- }
-
- @Override
- public void writeTo(com.google.protobuf.nano.CodedOutputByteBufferNano output)
- throws java.io.IOException {
- if (this.date != null && !this.date.equals("")) {
- output.writeString(1, this.date);
- }
- if (this.deleted != null && !this.deleted.equals("")) {
- output.writeString(2, this.deleted);
- }
- if (this.dirty != null && !this.dirty.equals("")) {
- output.writeString(3, this.dirty);
- }
- if (this.dirType != null && !this.dirType.equals("")) {
- output.writeString(4, this.dirType);
- }
- if (this.duration != null && !this.duration.equals("")) {
- output.writeString(5, this.duration);
- }
- if (this.hasContent != null && !this.hasContent.equals("")) {
- output.writeString(6, this.hasContent);
- }
- if (this.isRead != null && !this.isRead.equals("")) {
- output.writeString(7, this.isRead);
- }
- if (this.itemType != null && !this.itemType.equals("")) {
- output.writeString(8, this.itemType);
- }
- if (this.lastModified != null && !this.lastModified.equals("")) {
- output.writeString(9, this.lastModified);
- }
- if (this.mimeType != null && !this.mimeType.equals("")) {
- output.writeString(10, this.mimeType);
- }
- if (this.number != null && !this.number.equals("")) {
- output.writeString(11, this.number);
- }
- if (this.phoneAccountComponentName != null && !this.phoneAccountComponentName.equals("")) {
- output.writeString(12, this.phoneAccountComponentName);
- }
- if (this.phoneAccountId != null && !this.phoneAccountId.equals("")) {
- output.writeString(13, this.phoneAccountId);
- }
- if (this.sourceData != null && !this.sourceData.equals("")) {
- output.writeString(14, this.sourceData);
- }
- if (this.sourcePackage != null && !this.sourcePackage.equals("")) {
- output.writeString(15, this.sourcePackage);
- }
- if (this.transcription != null && !this.transcription.equals("")) {
- output.writeString(16, this.transcription);
- }
- if (this.voicemailUri != null && !this.voicemailUri.equals("")) {
- output.writeString(17, this.voicemailUri);
- }
- if (!java.util.Arrays.equals(
- this.encodedVoicemailKey, com.google.protobuf.nano.WireFormatNano.EMPTY_BYTES)) {
- output.writeBytes(18, this.encodedVoicemailKey);
- }
- if (this.archived != null && !this.archived.equals("")) {
- output.writeString(19, this.archived);
- }
- super.writeTo(output);
- }
-
- @Override
- protected int computeSerializedSize() {
- int size = super.computeSerializedSize();
- if (this.date != null && !this.date.equals("")) {
- size += com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(1, this.date);
- }
- if (this.deleted != null && !this.deleted.equals("")) {
- size += com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(2, this.deleted);
- }
- if (this.dirty != null && !this.dirty.equals("")) {
- size += com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(3, this.dirty);
- }
- if (this.dirType != null && !this.dirType.equals("")) {
- size += com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(4, this.dirType);
- }
- if (this.duration != null && !this.duration.equals("")) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(5, this.duration);
- }
- if (this.hasContent != null && !this.hasContent.equals("")) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(6, this.hasContent);
- }
- if (this.isRead != null && !this.isRead.equals("")) {
- size += com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(7, this.isRead);
- }
- if (this.itemType != null && !this.itemType.equals("")) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(8, this.itemType);
- }
- if (this.lastModified != null && !this.lastModified.equals("")) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(
- 9, this.lastModified);
- }
- if (this.mimeType != null && !this.mimeType.equals("")) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(10, this.mimeType);
- }
- if (this.number != null && !this.number.equals("")) {
- size += com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(11, this.number);
- }
- if (this.phoneAccountComponentName != null && !this.phoneAccountComponentName.equals("")) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(
- 12, this.phoneAccountComponentName);
- }
- if (this.phoneAccountId != null && !this.phoneAccountId.equals("")) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(
- 13, this.phoneAccountId);
- }
- if (this.sourceData != null && !this.sourceData.equals("")) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(14, this.sourceData);
- }
- if (this.sourcePackage != null && !this.sourcePackage.equals("")) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(
- 15, this.sourcePackage);
- }
- if (this.transcription != null && !this.transcription.equals("")) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(
- 16, this.transcription);
- }
- if (this.voicemailUri != null && !this.voicemailUri.equals("")) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(
- 17, this.voicemailUri);
- }
- if (!java.util.Arrays.equals(
- this.encodedVoicemailKey, com.google.protobuf.nano.WireFormatNano.EMPTY_BYTES)) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeBytesSize(
- 18, this.encodedVoicemailKey);
- }
- if (this.archived != null && !this.archived.equals("")) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(19, this.archived);
- }
- return size;
- }
-
- @Override
- public VoicemailInfo mergeFrom(com.google.protobuf.nano.CodedInputByteBufferNano input)
- throws java.io.IOException {
- while (true) {
- int tag = input.readTag();
- switch (tag) {
- case 0:
- return this;
- default:
- {
- if (!super.storeUnknownField(input, tag)) {
- return this;
- }
- break;
- }
- case 10:
- {
- this.date = input.readString();
- break;
- }
- case 18:
- {
- this.deleted = input.readString();
- break;
- }
- case 26:
- {
- this.dirty = input.readString();
- break;
- }
- case 34:
- {
- this.dirType = input.readString();
- break;
- }
- case 42:
- {
- this.duration = input.readString();
- break;
- }
- case 50:
- {
- this.hasContent = input.readString();
- break;
- }
- case 58:
- {
- this.isRead = input.readString();
- break;
- }
- case 66:
- {
- this.itemType = input.readString();
- break;
- }
- case 74:
- {
- this.lastModified = input.readString();
- break;
- }
- case 82:
- {
- this.mimeType = input.readString();
- break;
- }
- case 90:
- {
- this.number = input.readString();
- break;
- }
- case 98:
- {
- this.phoneAccountComponentName = input.readString();
- break;
- }
- case 106:
- {
- this.phoneAccountId = input.readString();
- break;
- }
- case 114:
- {
- this.sourceData = input.readString();
- break;
- }
- case 122:
- {
- this.sourcePackage = input.readString();
- break;
- }
- case 130:
- {
- this.transcription = input.readString();
- break;
- }
- case 138:
- {
- this.voicemailUri = input.readString();
- break;
- }
- case 146:
- {
- this.encodedVoicemailKey = input.readBytes();
- break;
- }
- case 154:
- {
- this.archived = input.readString();
- break;
- }
- }
- }
- }
-
- public static VoicemailInfo parseFrom(byte[] data)
- throws com.google.protobuf.nano.InvalidProtocolBufferNanoException {
- return com.google.protobuf.nano.MessageNano.mergeFrom(new VoicemailInfo(), data);
- }
-
- public static VoicemailInfo parseFrom(com.google.protobuf.nano.CodedInputByteBufferNano input)
- throws java.io.IOException {
- return new VoicemailInfo().mergeFrom(input);
- }
-}
diff --git a/java/com/android/dialer/backup/proto/voicemail_info.proto b/java/com/android/dialer/backup/proto/voicemail_info.proto
new file mode 100644
index 000000000..b74cce954
--- /dev/null
+++ b/java/com/android/dialer/backup/proto/voicemail_info.proto
@@ -0,0 +1,30 @@
+syntax = "proto2";
+
+option java_package = "com.android.dialer.backup";
+option java_multiple_files = true;
+option optimize_for = LITE_RUNTIME;
+
+package com.android.dialer.backup;
+
+// Next id: 20
+message VoicemailInfo {
+ optional string date = 1;
+ optional string deleted = 2;
+ optional string dirty = 3;
+ optional string dir_type = 4;
+ optional string duration = 5;
+ optional string has_content = 6;
+ optional string is_read = 7;
+ optional string item_type = 8;
+ optional string last_modified = 9;
+ optional string mime_type = 10;
+ optional string number = 11;
+ optional string phone_account_component_name = 12;
+ optional string phone_account_id = 13;
+ optional string source_data = 14;
+ optional string source_package = 15;
+ optional string transcription = 16;
+ optional string voicemail_uri = 17;
+ optional bytes encoded_voicemail_key = 18;
+ optional string archived = 19;
+}
diff --git a/java/com/android/dialer/binary/aosp/AospDialerRootComponent.java b/java/com/android/dialer/binary/aosp/AospDialerRootComponent.java
index 3a2f3cf9a..595401c70 100644
--- a/java/com/android/dialer/binary/aosp/AospDialerRootComponent.java
+++ b/java/com/android/dialer/binary/aosp/AospDialerRootComponent.java
@@ -17,6 +17,7 @@
package com.android.dialer.binary.aosp;
import com.android.dialer.binary.basecomponent.BaseDialerRootComponent;
+import com.android.dialer.calllog.CallLogModule;
import com.android.dialer.enrichedcall.stub.StubEnrichedCallModule;
import com.android.dialer.inject.ContextModule;
import com.android.dialer.lightbringer.stub.StubLightbringerModule;
@@ -31,6 +32,7 @@ import javax.inject.Singleton;
@Singleton
@Component(
modules = {
+ CallLogModule.class,
ContextModule.class,
SimulatorModule.class,
StubCallLocationModule.class,
diff --git a/java/com/android/dialer/binary/basecomponent/BaseDialerRootComponent.java b/java/com/android/dialer/binary/basecomponent/BaseDialerRootComponent.java
index e8962c248..2deb7fdc4 100644
--- a/java/com/android/dialer/binary/basecomponent/BaseDialerRootComponent.java
+++ b/java/com/android/dialer/binary/basecomponent/BaseDialerRootComponent.java
@@ -16,6 +16,7 @@
package com.android.dialer.binary.basecomponent;
+import com.android.dialer.calllog.CallLogComponent;
import com.android.dialer.enrichedcall.EnrichedCallComponent;
import com.android.dialer.lightbringer.LightbringerComponent;
import com.android.dialer.simulator.SimulatorComponent;
@@ -24,11 +25,12 @@ import com.android.incallui.maps.MapsComponent;
import com.android.voicemail.VoicemailComponent;
/**
- * Base class for the core application-wide {@link Component}. All variants of the Dialer app should
- * extend from this component.
+ * Base class for the core application-wide component. All variants of the Dialer app should extend
+ * from this component.
*/
public interface BaseDialerRootComponent
extends CallLocationComponent.HasComponent,
+ CallLogComponent.HasComponent,
EnrichedCallComponent.HasComponent,
MapsComponent.HasComponent,
SimulatorComponent.HasComponent,
diff --git a/java/com/android/dialer/binary/common/DialerApplication.java b/java/com/android/dialer/binary/common/DialerApplication.java
index 352c4eba9..b4ee75cd4 100644
--- a/java/com/android/dialer/binary/common/DialerApplication.java
+++ b/java/com/android/dialer/binary/common/DialerApplication.java
@@ -23,6 +23,7 @@ import android.support.annotation.NonNull;
import com.android.dialer.blocking.BlockedNumbersAutoMigrator;
import com.android.dialer.blocking.FilteredNumberAsyncQueryHandler;
import com.android.dialer.buildtype.BuildType;
+import com.android.dialer.calllog.CallLogComponent;
import com.android.dialer.common.concurrent.DefaultDialerExecutorFactory;
import com.android.dialer.inject.HasRootComponent;
import com.android.dialer.persistentlog.PersistentLogger;
@@ -44,6 +45,7 @@ public abstract class DialerApplication extends Application implements HasRootCo
new FilteredNumberAsyncQueryHandler(this),
new DefaultDialerExecutorFactory())
.asyncAutoMigrate();
+ CallLogComponent.get(this).callLogFramework().registerContentObservers(getApplicationContext());
PersistentLogger.initialize(this);
Trace.endSection();
}
diff --git a/java/com/android/dialer/blocking/BlockNumberDialogFragment.java b/java/com/android/dialer/blocking/BlockNumberDialogFragment.java
index c405b2fe7..7ef77c4b6 100644
--- a/java/com/android/dialer/blocking/BlockNumberDialogFragment.java
+++ b/java/com/android/dialer/blocking/BlockNumberDialogFragment.java
@@ -33,8 +33,8 @@ import android.widget.Toast;
import com.android.contacts.common.util.ContactDisplayUtils;
import com.android.dialer.blocking.FilteredNumberAsyncQueryHandler.OnBlockNumberListener;
import com.android.dialer.blocking.FilteredNumberAsyncQueryHandler.OnUnblockNumberListener;
+import com.android.dialer.logging.InteractionEvent;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.InteractionEvent;
import com.android.dialer.voicemailstatus.VisualVoicemailEnabledChecker;
/**
diff --git a/java/com/android/dialer/blocking/FilteredNumbersUtil.java b/java/com/android/dialer/blocking/FilteredNumbersUtil.java
index 8908238ea..cbef73ca5 100644
--- a/java/com/android/dialer/blocking/FilteredNumbersUtil.java
+++ b/java/com/android/dialer/blocking/FilteredNumbersUtil.java
@@ -34,8 +34,8 @@ import com.android.dialer.blocking.FilteredNumberAsyncQueryHandler.OnHasBlockedN
import com.android.dialer.common.LogUtil;
import com.android.dialer.database.FilteredNumberContract.FilteredNumber;
import com.android.dialer.database.FilteredNumberContract.FilteredNumberColumns;
+import com.android.dialer.logging.InteractionEvent;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.InteractionEvent;
import com.android.dialer.notification.NotificationChannelManager;
import com.android.dialer.notification.NotificationChannelManager.Channel;
import com.android.dialer.util.PermissionsUtil;
diff --git a/java/com/android/dialer/blocking/res/drawable-hdpi/ic_block_24dp.png b/java/com/android/dialer/blocking/res/drawable-hdpi/ic_block_24dp.png
new file mode 100644
index 000000000..2ccc89d24
--- /dev/null
+++ b/java/com/android/dialer/blocking/res/drawable-hdpi/ic_block_24dp.png
Binary files differ
diff --git a/java/com/android/dialer/blocking/res/drawable-hdpi/ic_report_24dp.png b/java/com/android/dialer/blocking/res/drawable-hdpi/ic_report_24dp.png
new file mode 100644
index 000000000..dc0c995c1
--- /dev/null
+++ b/java/com/android/dialer/blocking/res/drawable-hdpi/ic_report_24dp.png
Binary files differ
diff --git a/java/com/android/dialer/blocking/res/drawable-hdpi/ic_report_white_36dp.png b/java/com/android/dialer/blocking/res/drawable-hdpi/ic_report_white_36dp.png
new file mode 100644
index 000000000..919a872e0
--- /dev/null
+++ b/java/com/android/dialer/blocking/res/drawable-hdpi/ic_report_white_36dp.png
Binary files differ
diff --git a/java/com/android/dialer/blocking/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/blocking/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..238dde0bf
--- /dev/null
+++ b/java/com/android/dialer/blocking/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2016 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="migrate_blocked_numbers_dialog_title" msgid="7823962296457673809">"Novo, jednostavnije blokiranje"</string>
+ <string name="migrate_blocked_numbers_dialog_message" msgid="8309736147266462485">"Telefon treba da promeni način na koji blokiranje funkcioniše da bi vam pružio bolju zaštitu. Sa blokiranih brojeva više nećete primati ni pozive ni SMS-ove, ali možete da ih delite sa drugim aplikacijama."</string>
+ <string name="migrate_blocked_numbers_dialog_allow_button" msgid="5192836471557751367">"Dozvoli"</string>
+ <string name="block_number_confirmation_title" msgid="2699521227461376076">"Želite li da blokirate <xliff:g id="NUMBER">%1$s</xliff:g>?"</string>
+ <string name="block_number_confirmation_message_vvm" msgid="6501105244172290939">"Pozivi sa ovog broja će biti blokirani i poruke govorne pošte će se automatski brisati."</string>
+ <string name="block_number_confirmation_message_no_vvm" msgid="8236641245709649882">"Pozivi sa ovog broja će biti blokirani, ali pozivalac i dalje može da vam ostavlja poruke govorne pošte."</string>
+ <string name="block_number_confirmation_message_new_filtering" msgid="8487449683723062644">"Više nećete primati pozive ni SMS-ove sa ovog broja."</string>
+ <string name="block_number_ok" msgid="739786082788038932">"BLOKIRAJ"</string>
+ <string name="unblock_number_confirmation_title" msgid="7897778825085659941">"Želite li da deblokirate <xliff:g id="NUMBER">%1$s</xliff:g>?"</string>
+ <string name="unblock_number_ok" msgid="5089057152966269355">"DEBLOKIRAJ"</string>
+ <string name="invalidNumber" msgid="6270918250761754967">"<xliff:g id="NUMBER">%1$s</xliff:g> je nevažeći."</string>
+ <string name="snackbar_number_blocked" msgid="5760234822413921845">"<xliff:g id="NUMBER">%1$s</xliff:g> je blokiran"</string>
+ <string name="snackbar_number_unblocked" msgid="7941296274123990585">"<xliff:g id="NUMBER">%1$s</xliff:g> je deblokiran"</string>
+ <string name="block_number_undo" msgid="5158120911892491697">"OPOZOVI"</string>
+ <string name="send_to_voicemail_import_failed" msgid="1012752662074208237">"Uvoz nije uspeo"</string>
+ <string name="call_blocking_disabled_notification_title" msgid="7211352205255347489">"Blokiranje poziva je onemogućeno na 48 sati"</string>
+ <string name="call_blocking_disabled_notification_text" msgid="141384084865180722">"Onemogućeno je zato što je upućen hitan poziv."</string>
+ <string name="block_report_number_alert_title" msgid="2740581989824959611">"Želite li da blokirate <xliff:g id="NUMBER">%1$s</xliff:g>?"</string>
+ <string name="block_report_number_alert_details" msgid="2652479394593143562">"Više nećete primati pozive sa ovog broja."</string>
+ <string name="block_number_alert_details" msgid="715942751312046429">"<xliff:g id="TEXT">%1$s</xliff:g> Prijavićemo ovaj poziv kao nepoželjan."</string>
+ <string name="unblock_number_alert_details" msgid="8696070817026870606">"Deblokiraćemo broj i prijaviti da nije nepoželjan. Budući pozivi neće biti označavani kao nepoželjni."</string>
+ <string name="unblock_report_number_alert_title" msgid="2221901995393696882">"Želite li da deblokirate <xliff:g id="NUMBER">%1$s</xliff:g>?"</string>
+ <string name="report_not_spam_alert_button" msgid="3244953565919894995">"Prijavi"</string>
+ <string name="report_not_spam_alert_title" msgid="395961923213504916">"Želite da prijavite grešku?"</string>
+ <string name="report_not_spam_alert_details" msgid="4463730683530824797">"Budući pozivi sa <xliff:g id="NUMBER">%1$s</xliff:g> više neće biti označavani kao nepoželjni."</string>
+ <string name="checkbox_report_as_spam_action" msgid="1549159682170273798">"Prijavi poziv kao nepoželjan"</string>
+</resources>
diff --git a/java/com/android/dialer/callcomposer/CallComposerActivity.java b/java/com/android/dialer/callcomposer/CallComposerActivity.java
index 3c0beb101..e8ca72e97 100644
--- a/java/com/android/dialer/callcomposer/CallComposerActivity.java
+++ b/java/com/android/dialer/callcomposer/CallComposerActivity.java
@@ -25,7 +25,6 @@ import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.net.Uri;
-import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.content.ContextCompat;
@@ -50,28 +49,25 @@ import android.widget.RelativeLayout;
import android.widget.TextView;
import com.android.contacts.common.ContactPhotoManager;
import com.android.dialer.callcomposer.CallComposerFragment.CallComposerListener;
-import com.android.dialer.callcomposer.nano.CallComposerContact;
-import com.android.dialer.callcomposer.util.CopyAndResizeImageTask;
-import com.android.dialer.callcomposer.util.CopyAndResizeImageTask.Callback;
+import com.android.dialer.callintent.CallInitiationType;
import com.android.dialer.callintent.CallIntentBuilder;
-import com.android.dialer.callintent.nano.CallInitiationType;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.UiUtil;
+import com.android.dialer.common.concurrent.DialerExecutors;
import com.android.dialer.constants.Constants;
import com.android.dialer.enrichedcall.EnrichedCallComponent;
import com.android.dialer.enrichedcall.EnrichedCallManager;
import com.android.dialer.enrichedcall.EnrichedCallManager.State;
import com.android.dialer.enrichedcall.Session;
import com.android.dialer.enrichedcall.extensions.StateExtension;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
import com.android.dialer.multimedia.MultimediaData;
-import com.android.dialer.protos.ProtoParsers;
import com.android.dialer.telecom.TelecomUtil;
import com.android.dialer.util.ViewUtil;
import com.android.dialer.widget.DialerToolbar;
-import com.google.protobuf.nano.InvalidProtocolBufferNanoException;
+import com.google.protobuf.InvalidProtocolBufferException;
import java.io.File;
/**
@@ -133,7 +129,7 @@ public class CallComposerActivity extends AppCompatActivity
public static Intent newIntent(Context context, CallComposerContact contact) {
Intent intent = new Intent(context, CallComposerActivity.class);
- ProtoParsers.put(intent, ARG_CALL_COMPOSER_CONTACT, contact);
+ intent.putExtra(ARG_CALL_COMPOSER_CONTACT, contact.toByteArray());
return intent;
}
@@ -195,7 +191,7 @@ public class CallComposerActivity extends AppCompatActivity
runEntranceAnimation();
});
- setMediaIconSelected(0);
+ setMediaIconSelected(currentIndex);
}
@Override
@@ -204,11 +200,11 @@ public class CallComposerActivity extends AppCompatActivity
getEnrichedCallManager().registerStateChangedListener(this);
if (sessionId == Session.NO_SESSION_ID) {
LogUtil.i("CallComposerActivity.onResume", "creating new session");
- sessionId = getEnrichedCallManager().startCallComposerSession(contact.number);
+ sessionId = getEnrichedCallManager().startCallComposerSession(contact.getNumber());
} else if (getEnrichedCallManager().getSession(sessionId) == null) {
LogUtil.i(
"CallComposerActivity.onResume", "session closed while activity paused, creating new");
- sessionId = getEnrichedCallManager().startCallComposerSession(contact.number);
+ sessionId = getEnrichedCallManager().startCallComposerSession(contact.getNumber());
} else {
LogUtil.i("CallComposerActivity.onResume", "session still open, using old");
}
@@ -294,29 +290,28 @@ public class CallComposerActivity extends AppCompatActivity
GalleryComposerFragment galleryComposerFragment = (GalleryComposerFragment) fragment;
// If the current data is not a copy, make one.
if (!galleryComposerFragment.selectedDataIsCopy()) {
- new CopyAndResizeImageTask(
- CallComposerActivity.this,
- galleryComposerFragment.getGalleryData().getFileUri(),
- new Callback() {
- @Override
- public void onCopySuccessful(File file, String mimeType) {
- Uri shareableUri =
- FileProvider.getUriForFile(
- CallComposerActivity.this,
- Constants.get().getFileProviderAuthority(),
- file);
-
- builder.setImage(grantUriPermission(shareableUri), mimeType);
- placeRCSCall(builder);
- }
-
- @Override
- public void onCopyFailed(Throwable throwable) {
- // TODO(b/34279096) - gracefully handle message failure
- LogUtil.e("CallComposerActivity.onCopyFailed", "copy Failed", throwable);
- }
+ DialerExecutors.createUiTaskBuilder(
+ getFragmentManager(),
+ "copyAndResizeImageToSend",
+ new CopyAndResizeImageWorker(this.getApplicationContext()))
+ .onSuccess(
+ output -> {
+ Uri shareableUri =
+ FileProvider.getUriForFile(
+ CallComposerActivity.this,
+ Constants.get().getFileProviderAuthority(),
+ output.first);
+
+ builder.setImage(grantUriPermission(shareableUri), output.second);
+ placeRCSCall(builder);
+ })
+ .onFailure(
+ throwable -> {
+ // TODO(b/34279096) - gracefully handle message failure
+ LogUtil.e("CallComposerActivity.onCopyFailed", "copy Failed", throwable);
})
- .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ .build()
+ .executeParallel(galleryComposerFragment.getGalleryData().getFileUri());
} else {
Uri shareableUri =
FileProvider.getUriForFile(
@@ -355,7 +350,8 @@ public class CallComposerActivity extends AppCompatActivity
Logger.get(this).logImpression(DialerImpression.Type.CALL_COMPOSER_ACTIVITY_PLACE_RCS_CALL);
getEnrichedCallManager().sendCallComposerData(sessionId, builder.build());
TelecomUtil.placeCall(
- this, new CallIntentBuilder(contact.number, CallInitiationType.Type.CALL_COMPOSER).build());
+ this,
+ new CallIntentBuilder(contact.getNumber(), CallInitiationType.Type.CALL_COMPOSER).build());
setResult(RESULT_OK);
finish();
}
@@ -461,13 +457,15 @@ public class CallComposerActivity extends AppCompatActivity
byte[] bytes = Base64.decode(arguments.getString(ARG_CALL_COMPOSER_CONTACT), Base64.DEFAULT);
try {
contact = CallComposerContact.parseFrom(bytes);
- } catch (InvalidProtocolBufferNanoException e) {
+ } catch (InvalidProtocolBufferException e) {
Assert.fail(e.toString());
}
} else {
- contact =
- ProtoParsers.getFromInstanceState(
- arguments, ARG_CALL_COMPOSER_CONTACT, new CallComposerContact());
+ try {
+ contact = CallComposerContact.parseFrom(arguments.getByteArray(ARG_CALL_COMPOSER_CONTACT));
+ } catch (InvalidProtocolBufferException e) {
+ throw Assert.createIllegalStateFailException(e.toString());
+ }
}
updateContactInfo();
}
@@ -480,22 +478,24 @@ public class CallComposerActivity extends AppCompatActivity
/** Populates the contact info fields based on the current contact information. */
private void updateContactInfo() {
ContactPhotoManager.getInstance(this)
- .loadDialerThumbnail(
+ .loadDialerThumbnailOrPhoto(
contactPhoto,
- contact.contactUri == null ? null : Uri.parse(contact.contactUri),
- contact.photoId,
- contact.nameOrNumber,
- contact.contactType);
-
- nameView.setText(contact.nameOrNumber);
- toolbar.setTitle(contact.nameOrNumber);
- if (!TextUtils.isEmpty(contact.numberLabel) && !TextUtils.isEmpty(contact.displayNumber)) {
+ contact.hasContactUri() ? Uri.parse(contact.getContactUri()) : null,
+ contact.getPhotoId(),
+ contact.hasPhotoUri() ? Uri.parse(contact.getPhotoUri()) : null,
+ contact.getNameOrNumber(),
+ contact.getContactType());
+
+ nameView.setText(contact.getNameOrNumber());
+ toolbar.setTitle(contact.getNameOrNumber());
+ if (!TextUtils.isEmpty(contact.getNumberLabel())
+ && !TextUtils.isEmpty(contact.getDisplayNumber())) {
numberView.setVisibility(View.VISIBLE);
String secondaryInfo =
getString(
com.android.contacts.common.R.string.call_subject_type_and_number,
- contact.numberLabel,
- contact.displayNumber);
+ contact.getNumberLabel(),
+ contact.getDisplayNumber());
numberView.setText(secondaryInfo);
toolbar.setSubtitle(secondaryInfo);
} else {
@@ -663,7 +663,8 @@ public class CallComposerActivity extends AppCompatActivity
}
private void setFailedResultAndFinish() {
- setResult(RESULT_FIRST_USER, new Intent().putExtra(KEY_CONTACT_NAME, contact.nameOrNumber));
+ setResult(
+ RESULT_FIRST_USER, new Intent().putExtra(KEY_CONTACT_NAME, contact.getNameOrNumber()));
finish();
}
diff --git a/java/com/android/dialer/callcomposer/CameraComposerFragment.java b/java/com/android/dialer/callcomposer/CameraComposerFragment.java
index ceefc068e..f65207fa3 100644
--- a/java/com/android/dialer/callcomposer/CameraComposerFragment.java
+++ b/java/com/android/dialer/callcomposer/CameraComposerFragment.java
@@ -48,8 +48,8 @@ import com.android.dialer.callcomposer.camera.camerafocus.RenderOverlay;
import com.android.dialer.callcomposer.cameraui.CameraMediaChooserView;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
import com.android.dialer.util.PermissionsUtil;
/** Fragment used to compose call with image from the user's camera. */
diff --git a/java/com/android/dialer/callcomposer/CopyAndResizeImageWorker.java b/java/com/android/dialer/callcomposer/CopyAndResizeImageWorker.java
new file mode 100644
index 000000000..aeb8e0388
--- /dev/null
+++ b/java/com/android/dialer/callcomposer/CopyAndResizeImageWorker.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.dialer.callcomposer;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.Bitmap.CompressFormat;
+import android.graphics.BitmapFactory;
+import android.net.Uri;
+import android.os.Build.VERSION_CODES;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.util.Pair;
+import com.android.dialer.callcomposer.util.BitmapResizer;
+import com.android.dialer.common.Assert;
+import com.android.dialer.common.concurrent.DialerExecutor.Worker;
+import com.android.dialer.util.DialerUtils;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+/** Task for copying and resizing images to be shared with RCS process. */
+@TargetApi(VERSION_CODES.M)
+class CopyAndResizeImageWorker implements Worker<Uri, Pair<File, String>> {
+ private static final String MIME_TYPE = "image/jpeg";
+
+ private final Context context;
+
+ CopyAndResizeImageWorker(@NonNull Context context) {
+ this.context = Assert.isNotNull(context);
+ }
+
+ /**
+ * @param input The input Uri is expected to be a image openable by {@link
+ * android.content.ContentResolver#openInputStream(Uri)}.
+ * @return a Pair where the File contains the resized image, and the String is the result File's
+ * MIME type.
+ */
+ @Nullable
+ @Override
+ public Pair<File, String> doInBackground(@Nullable Uri input) throws Throwable {
+ try (InputStream inputStream = context.getContentResolver().openInputStream(input)) {
+ Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
+ bitmap = BitmapResizer.resizeForEnrichedCalling(bitmap);
+
+ File outputFile = DialerUtils.createShareableFile(context);
+ try (OutputStream outputStream = new FileOutputStream(outputFile)) {
+ // Encode images to jpeg as it is better for camera pictures which we expect to be sending
+ bitmap.compress(CompressFormat.JPEG, 80, outputStream);
+ return new Pair<>(outputFile, MIME_TYPE);
+ }
+ }
+ }
+}
diff --git a/java/com/android/dialer/callcomposer/GalleryComposerFragment.java b/java/com/android/dialer/callcomposer/GalleryComposerFragment.java
index 1d684a2d3..01e067440 100644
--- a/java/com/android/dialer/callcomposer/GalleryComposerFragment.java
+++ b/java/com/android/dialer/callcomposer/GalleryComposerFragment.java
@@ -28,6 +28,7 @@ import android.os.Parcelable;
import android.provider.Settings;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.ContextCompat;
import android.support.v4.content.CursorLoader;
@@ -39,13 +40,14 @@ import android.view.ViewGroup;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
-import com.android.dialer.callcomposer.util.CopyAndResizeImageTask;
-import com.android.dialer.callcomposer.util.CopyAndResizeImageTask.Callback;
+import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.common.concurrent.DefaultDialerExecutorFactory;
+import com.android.dialer.common.concurrent.DialerExecutor;
+import com.android.dialer.common.concurrent.DialerExecutorFactory;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
import com.android.dialer.util.PermissionsUtil;
-import java.io.File;
import java.util.ArrayList;
import java.util.List;
@@ -60,6 +62,8 @@ public class GalleryComposerFragment extends CallComposerFragment
private static final int RESULT_LOAD_IMAGE = 1;
private static final int RESULT_OPEN_SETTINGS = 2;
+ private DialerExecutorFactory executorFactory = new DefaultDialerExecutorFactory();
+
private GalleryGridAdapter adapter;
private GridView galleryGridView;
private View permissionView;
@@ -71,10 +75,17 @@ public class GalleryComposerFragment extends CallComposerFragment
private boolean selectedDataIsCopy;
private List<GalleryGridItemData> insertedImages = new ArrayList<>();
+ private DialerExecutor<Uri> copyAndResizeImage;
+
public static GalleryComposerFragment newInstance() {
return new GalleryComposerFragment();
}
+ @VisibleForTesting
+ void setExecutorFactory(@NonNull DialerExecutorFactory executorFactory) {
+ this.executorFactory = Assert.isNotNull(executorFactory);
+ }
+
@Nullable
@Override
public View onCreateView(
@@ -107,6 +118,32 @@ public class GalleryComposerFragment extends CallComposerFragment
return view;
}
+ @Override
+ public void onActivityCreated(@Nullable Bundle bundle) {
+ super.onActivityCreated(bundle);
+
+ copyAndResizeImage =
+ executorFactory
+ .createUiTaskBuilder(
+ getActivity().getFragmentManager(),
+ "copyAndResizeImage",
+ new CopyAndResizeImageWorker(getActivity().getApplicationContext()))
+ .onSuccess(
+ output -> {
+ GalleryGridItemData data1 =
+ adapter.insertEntry(output.first.getAbsolutePath(), output.second);
+ insertedImages.add(0, data1);
+ setSelected(data1, true);
+ })
+ .onFailure(
+ throwable -> {
+ // TODO(b/34279096) - gracefully handle message failure
+ LogUtil.e(
+ "GalleryComposerFragment.onFailure", "data preparation failed", throwable);
+ })
+ .build();
+ }
+
private void setupGallery() {
adapter = new GalleryGridAdapter(getContext(), null, this);
galleryGridView.setAdapter(adapter);
@@ -264,25 +301,7 @@ public class GalleryComposerFragment extends CallComposerFragment
// This should never happen, but just in case..
// Guard against null uri cases for when the activity returns a null/invalid intent.
if (url != null) {
- new CopyAndResizeImageTask(
- getContext(),
- Uri.parse(url),
- new Callback() {
- @Override
- public void onCopySuccessful(File file, String mimeType) {
- GalleryGridItemData data = adapter.insertEntry(file.getAbsolutePath(), mimeType);
- insertedImages.add(0, data);
- setSelected(data, true);
- }
-
- @Override
- public void onCopyFailed(Throwable throwable) {
- // TODO(b/34279096) - gracefully handle message failure
- LogUtil.e(
- "GalleryComposerFragment.onFailure", "Data preparation failed", throwable);
- }
- })
- .execute();
+ copyAndResizeImage.executeParallel(Uri.parse(url));
} else {
// TODO(b/34279096) - gracefully handle message failure
}
diff --git a/java/com/android/dialer/callcomposer/camera/ImagePersistTask.java b/java/com/android/dialer/callcomposer/camera/ImagePersistTask.java
index 80921cdd8..31751e536 100644
--- a/java/com/android/dialer/callcomposer/camera/ImagePersistTask.java
+++ b/java/com/android/dialer/callcomposer/camera/ImagePersistTask.java
@@ -27,7 +27,7 @@ import android.os.Build.VERSION_CODES;
import android.support.v4.content.FileProvider;
import com.android.dialer.callcomposer.camera.exif.ExifInterface;
import com.android.dialer.callcomposer.camera.exif.ExifTag;
-import com.android.dialer.callcomposer.util.CopyAndResizeImageTask;
+import com.android.dialer.callcomposer.util.BitmapResizer;
import com.android.dialer.common.Assert;
import com.android.dialer.common.concurrent.FallibleAsyncTask;
import com.android.dialer.constants.Constants;
@@ -75,7 +75,7 @@ public class ImagePersistTask extends FallibleAsyncTask<Void, Void, Uri> {
writeClippedBitmap(outputStream);
} else {
Bitmap bitmap = BitmapFactory.decodeByteArray(mBytes, 0, mBytes.length);
- bitmap = CopyAndResizeImageTask.resizeForEnrichedCalling(bitmap);
+ bitmap = BitmapResizer.resizeForEnrichedCalling(bitmap);
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, outputStream);
}
}
@@ -131,7 +131,7 @@ public class ImagePersistTask extends FallibleAsyncTask<Void, Void, Uri> {
matrix.postTranslate(-offsetLeft, -offsetTop);
clippedBitmapCanvas.drawBitmap(bitmap, matrix, null /* paint */);
clippedBitmapCanvas.save();
- clippedBitmap = CopyAndResizeImageTask.resizeForEnrichedCalling(clippedBitmap);
+ clippedBitmap = BitmapResizer.resizeForEnrichedCalling(clippedBitmap);
// EXIF data can take a big chunk of the file size and is often cleared by the
// carrier, only store orientation since that's critical
final ExifTag orientationTag = exifInterface.getTag(ExifInterface.TAG_ORIENTATION);
diff --git a/java/com/android/dialer/callcomposer/cameraui/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/callcomposer/cameraui/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..aad8d9dd8
--- /dev/null
+++ b/java/com/android/dialer/callcomposer/cameraui/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="camera_switch_full_screen" msgid="8940026902611470063">"Pređite na prikaz kamere preko celog ekrana"</string>
+ <string name="camera_switch_camera_facing" msgid="6965029101223590384">"Dugme sad aktivira prednju kameru"</string>
+ <string name="camera_switch_camera_rear" msgid="2518207979995455566">"Dugme sad aktivira zadnju kameru"</string>
+ <string name="camera_cancel_recording" msgid="1957458244979306869">"Zaustavite snimanje videa"</string>
+ <string name="using_front_camera" msgid="6734227994972108992">"Koristimo prednju kameru"</string>
+ <string name="using_back_camera" msgid="2143070243242164971">"Koristimo zadnju kameru"</string>
+ <string name="camera_take_picture" msgid="2366908858042883376">"Snimite sliku"</string>
+</resources>
diff --git a/java/com/android/dialer/callcomposer/nano/CallComposerContact.java b/java/com/android/dialer/callcomposer/nano/CallComposerContact.java
deleted file mode 100644
index dcda571e2..000000000
--- a/java/com/android/dialer/callcomposer/nano/CallComposerContact.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Generated by the protocol buffer compiler. DO NOT EDIT!
-
-package com.android.dialer.callcomposer.nano;
-
-/** This file is autogenerated, but javadoc required. */
-@SuppressWarnings("hiding")
-public final class CallComposerContact
- extends com.google.protobuf.nano.ExtendableMessageNano<CallComposerContact> {
-
- private static volatile CallComposerContact[] _emptyArray;
- public static CallComposerContact[] emptyArray() {
- // Lazily initializes the empty array
- if (_emptyArray == null) {
- synchronized (com.google.protobuf.nano.InternalNano.LAZY_INIT_LOCK) {
- if (_emptyArray == null) {
- _emptyArray = new CallComposerContact[0];
- }
- }
- }
- return _emptyArray;
- }
-
- // optional fixed64 photo_id = 1;
- public long photoId;
-
- // optional string photo_uri = 2;
- public java.lang.String photoUri;
-
- // optional string contact_uri = 3;
- public java.lang.String contactUri;
-
- // optional string name_or_number = 4;
- public java.lang.String nameOrNumber;
-
- // optional string number = 6;
- public java.lang.String number;
-
- // optional string display_number = 7;
- public java.lang.String displayNumber;
-
- // optional string number_label = 8;
- public java.lang.String numberLabel;
-
- // optional int32 contact_type = 9;
- public int contactType;
-
- // @@protoc_insertion_point(class_scope:com.android.dialer.callcomposer.CallComposerContact)
-
- public CallComposerContact() {
- clear();
- }
-
- public CallComposerContact clear() {
- photoId = 0L;
- photoUri = "";
- contactUri = "";
- nameOrNumber = "";
- number = "";
- displayNumber = "";
- numberLabel = "";
- contactType = 0;
- unknownFieldData = null;
- cachedSize = -1;
- return this;
- }
-
- @Override
- public void writeTo(com.google.protobuf.nano.CodedOutputByteBufferNano output)
- throws java.io.IOException {
- if (this.photoId != 0L) {
- output.writeFixed64(1, this.photoId);
- }
- if (this.photoUri != null && !this.photoUri.equals("")) {
- output.writeString(2, this.photoUri);
- }
- if (this.contactUri != null && !this.contactUri.equals("")) {
- output.writeString(3, this.contactUri);
- }
- if (this.nameOrNumber != null && !this.nameOrNumber.equals("")) {
- output.writeString(4, this.nameOrNumber);
- }
- if (this.number != null && !this.number.equals("")) {
- output.writeString(6, this.number);
- }
- if (this.displayNumber != null && !this.displayNumber.equals("")) {
- output.writeString(7, this.displayNumber);
- }
- if (this.numberLabel != null && !this.numberLabel.equals("")) {
- output.writeString(8, this.numberLabel);
- }
- if (this.contactType != 0) {
- output.writeInt32(9, this.contactType);
- }
- super.writeTo(output);
- }
-
- @Override
- protected int computeSerializedSize() {
- int size = super.computeSerializedSize();
- if (this.photoId != 0L) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeFixed64Size(1, this.photoId);
- }
- if (this.photoUri != null && !this.photoUri.equals("")) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(2, this.photoUri);
- }
- if (this.contactUri != null && !this.contactUri.equals("")) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(3, this.contactUri);
- }
- if (this.nameOrNumber != null && !this.nameOrNumber.equals("")) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(
- 4, this.nameOrNumber);
- }
- if (this.number != null && !this.number.equals("")) {
- size += com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(6, this.number);
- }
- if (this.displayNumber != null && !this.displayNumber.equals("")) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(
- 7, this.displayNumber);
- }
- if (this.numberLabel != null && !this.numberLabel.equals("")) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(8, this.numberLabel);
- }
- if (this.contactType != 0) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeInt32Size(9, this.contactType);
- }
- return size;
- }
-
- @Override
- public CallComposerContact mergeFrom(com.google.protobuf.nano.CodedInputByteBufferNano input)
- throws java.io.IOException {
- while (true) {
- int tag = input.readTag();
- switch (tag) {
- case 0:
- return this;
- default:
- {
- if (!super.storeUnknownField(input, tag)) {
- return this;
- }
- break;
- }
- case 9:
- {
- this.photoId = input.readFixed64();
- break;
- }
- case 18:
- {
- this.photoUri = input.readString();
- break;
- }
- case 26:
- {
- this.contactUri = input.readString();
- break;
- }
- case 34:
- {
- this.nameOrNumber = input.readString();
- break;
- }
- case 50:
- {
- this.number = input.readString();
- break;
- }
- case 58:
- {
- this.displayNumber = input.readString();
- break;
- }
- case 66:
- {
- this.numberLabel = input.readString();
- break;
- }
- case 72:
- {
- this.contactType = input.readInt32();
- break;
- }
- }
- }
- }
-
- public static CallComposerContact parseFrom(byte[] data)
- throws com.google.protobuf.nano.InvalidProtocolBufferNanoException {
- return com.google.protobuf.nano.MessageNano.mergeFrom(new CallComposerContact(), data);
- }
-
- public static CallComposerContact parseFrom(
- com.google.protobuf.nano.CodedInputByteBufferNano input) throws java.io.IOException {
- return new CallComposerContact().mergeFrom(input);
- }
-}
diff --git a/java/com/android/dialer/callcomposer/proto/call_composer_contact.proto b/java/com/android/dialer/callcomposer/proto/call_composer_contact.proto
new file mode 100644
index 000000000..99766aac5
--- /dev/null
+++ b/java/com/android/dialer/callcomposer/proto/call_composer_contact.proto
@@ -0,0 +1,18 @@
+syntax = "proto2";
+
+option java_package = "com.android.dialer.callcomposer";
+option java_multiple_files = true;
+option optimize_for = LITE_RUNTIME;
+
+package com.android.dialer.callcomposer;
+
+message CallComposerContact {
+ optional fixed64 photo_id = 1;
+ optional string photo_uri = 2;
+ optional string contact_uri = 3;
+ optional string name_or_number = 4;
+ optional string number = 6;
+ optional string display_number = 7;
+ optional string number_label = 8;
+ optional int32 contact_type = 9;
+}
diff --git a/java/com/android/dialer/callcomposer/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/callcomposer/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..c357d506f
--- /dev/null
+++ b/java/com/android/dialer/callcomposer/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2016 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="urgent" msgid="5271653973625093934">"Hitno je! Javi se!"</string>
+ <string name="want_to_chat" msgid="847333669248949914">"Želiš da ćaskaš?"</string>
+ <string name="quick_question" msgid="3501160802390214092">"Kratko pitanje…"</string>
+ <string name="message_composer_custom_message_hint" msgid="2061100708804604835">"Napišite prilagođenu poruku"</string>
+ <string name="send_and_call" msgid="3749091015058610762">"Pošalji i pozovi"</string>
+ <string name="share_and_call" msgid="8934144481838868674">"Deli i pozovi"</string>
+ <string name="gallery_item_description" msgid="7600601724204579471">"slika, <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
+ <string name="gallery_item_description_no_date" msgid="2059198895441426838">"slika"</string>
+ <string name="camera_switch_to_still_mode" msgid="1881982437979592567">"Slikajte"</string>
+ <string name="camera_media_failure" msgid="8979549551450965882">"Učitavanje slike sa kamere nije uspelo"</string>
+ <string name="allow" msgid="8637148297403066623">"Dozvoli"</string>
+ <string name="camera_permission_text" msgid="7863231776480341614">"Odobrite pristup Kameri da biste snimili sliku"</string>
+ <string name="gallery_permission_text" msgid="4102566850658919346">"Odobrite pristup Medijima da biste delili sliku"</string>
+</resources>
diff --git a/java/com/android/dialer/callcomposer/util/BitmapResizer.java b/java/com/android/dialer/callcomposer/util/BitmapResizer.java
new file mode 100644
index 000000000..658462def
--- /dev/null
+++ b/java/com/android/dialer/callcomposer/util/BitmapResizer.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.dialer.callcomposer.util;
+
+import android.graphics.Bitmap;
+import android.support.annotation.VisibleForTesting;
+import com.android.dialer.common.Assert;
+import com.android.dialer.common.LogUtil;
+
+/** Utility class for resizing images before sending them as enriched call attachments. */
+public final class BitmapResizer {
+ @VisibleForTesting static final int MAX_OUTPUT_RESOLUTION = 640;
+
+ /**
+ * Returns a bitmap that is a resized version of the parameter image. The image will only be
+ * resized down and sized to be appropriate for an enriched call.
+ */
+ public static Bitmap resizeForEnrichedCalling(Bitmap image) {
+ Assert.isWorkerThread();
+
+ int width = image.getWidth();
+ int height = image.getHeight();
+
+ LogUtil.i(
+ "BitmapResizer.resizeForEnrichedCalling", "starting height: %d, width: %d", height, width);
+
+ if (width <= MAX_OUTPUT_RESOLUTION && height <= MAX_OUTPUT_RESOLUTION) {
+ LogUtil.i("BitmapResizer.resizeForEnrichedCalling", "no resizing needed");
+ return image;
+ }
+
+ if (width > height) {
+ // landscape
+ float ratio = width / (float) MAX_OUTPUT_RESOLUTION;
+ width = MAX_OUTPUT_RESOLUTION;
+ height = (int) (height / ratio);
+ } else if (height > width) {
+ // portrait
+ float ratio = height / (float) MAX_OUTPUT_RESOLUTION;
+ height = MAX_OUTPUT_RESOLUTION;
+ width = (int) (width / ratio);
+ } else {
+ // square
+ height = MAX_OUTPUT_RESOLUTION;
+ width = MAX_OUTPUT_RESOLUTION;
+ }
+
+ LogUtil.i(
+ "BitmapResizer.resizeForEnrichedCalling", "ending height: %d, width: %d", height, width);
+
+ return Bitmap.createScaledBitmap(image, width, height, true);
+ }
+}
diff --git a/java/com/android/dialer/callcomposer/util/CopyAndResizeImageTask.java b/java/com/android/dialer/callcomposer/util/CopyAndResizeImageTask.java
deleted file mode 100644
index 81511d274..000000000
--- a/java/com/android/dialer/callcomposer/util/CopyAndResizeImageTask.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.dialer.callcomposer.util;
-
-import android.annotation.TargetApi;
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.Bitmap.CompressFormat;
-import android.graphics.BitmapFactory;
-import android.net.Uri;
-import android.os.Build.VERSION_CODES;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import com.android.dialer.common.Assert;
-import com.android.dialer.common.LogUtil;
-import com.android.dialer.common.concurrent.FallibleAsyncTask;
-import com.android.dialer.util.DialerUtils;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.OutputStream;
-
-/** Task for copying and resizing images to be shared with RCS process. */
-@TargetApi(VERSION_CODES.M)
-public class CopyAndResizeImageTask extends FallibleAsyncTask<Void, Void, File> {
- public static final int MAX_OUTPUT_RESOLUTION = 640;
- private static final String MIME_TYPE = "image/jpeg";
-
- private final Context context;
- private final Uri uri;
- private final Callback callback;
-
- public CopyAndResizeImageTask(
- @NonNull Context context, @NonNull Uri uri, @NonNull Callback callback) {
- this.context = Assert.isNotNull(context);
- this.uri = Assert.isNotNull(uri);
- this.callback = Assert.isNotNull(callback);
- }
-
- @Nullable
- @Override
- protected File doInBackgroundFallible(Void... params) throws Throwable {
- Bitmap bitmap = BitmapFactory.decodeStream(context.getContentResolver().openInputStream(uri));
- bitmap = resizeForEnrichedCalling(bitmap);
-
- File outputFile = DialerUtils.createShareableFile(context);
- try (OutputStream outputStream = new FileOutputStream(outputFile)) {
- // Encode images to jpeg as it is better for camera pictures which we expect to be sending
- bitmap.compress(CompressFormat.JPEG, 80, outputStream);
- return outputFile;
- }
- }
-
- @Override
- protected void onPostExecute(FallibleTaskResult<File> result) {
- if (result.isFailure()) {
- callback.onCopyFailed(result.getThrowable());
- } else {
- callback.onCopySuccessful(result.getResult(), MIME_TYPE);
- }
- }
-
- public static Bitmap resizeForEnrichedCalling(Bitmap image) {
- Assert.isWorkerThread();
-
- int width = image.getWidth();
- int height = image.getHeight();
-
- LogUtil.i(
- "CopyAndResizeImageTask.resizeForEnrichedCalling",
- "starting height: %d, width: %d",
- height,
- width);
-
- if (width <= MAX_OUTPUT_RESOLUTION && height <= MAX_OUTPUT_RESOLUTION) {
- LogUtil.i("CopyAndResizeImageTask.resizeForEnrichedCalling", "no resizing needed");
- return image;
- }
-
- if (width > height) {
- // landscape
- float ratio = width / (float) MAX_OUTPUT_RESOLUTION;
- width = MAX_OUTPUT_RESOLUTION;
- height = (int) (height / ratio);
- } else if (height > width) {
- // portrait
- float ratio = height / (float) MAX_OUTPUT_RESOLUTION;
- height = MAX_OUTPUT_RESOLUTION;
- width = (int) (width / ratio);
- } else {
- // square
- height = MAX_OUTPUT_RESOLUTION;
- width = MAX_OUTPUT_RESOLUTION;
- }
-
- LogUtil.i(
- "CopyAndResizeImageTask.resizeForEnrichedCalling",
- "ending height: %d, width: %d",
- height,
- width);
-
- return Bitmap.createScaledBitmap(image, width, height, true);
- }
-
- /** Callback for callers to know when the task has finished */
- public interface Callback {
- void onCopySuccessful(File file, String mimeType);
-
- void onCopyFailed(Throwable throwable);
- }
-}
diff --git a/java/com/android/dialer/calldetails/CallDetailsActivity.java b/java/com/android/dialer/calldetails/CallDetailsActivity.java
index 757c6eed2..41d176562 100644
--- a/java/com/android/dialer/calldetails/CallDetailsActivity.java
+++ b/java/com/android/dialer/calldetails/CallDetailsActivity.java
@@ -29,14 +29,14 @@ import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.support.v7.widget.Toolbar.OnMenuItemClickListener;
import android.view.MenuItem;
-import com.android.dialer.callcomposer.nano.CallComposerContact;
-import com.android.dialer.calldetails.nano.CallDetailsEntries;
-import com.android.dialer.calldetails.nano.CallDetailsEntries.CallDetailsEntry;
+import com.android.dialer.callcomposer.CallComposerContact;
+import com.android.dialer.calldetails.CallDetailsEntries.CallDetailsEntry;
import com.android.dialer.common.Assert;
import com.android.dialer.common.concurrent.AsyncTaskExecutors;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
-import com.android.dialer.protos.ProtoParsers;
+import com.google.protobuf.InvalidProtocolBufferException;
+import java.util.List;
/** Displays the details of a specific call log entry. */
public class CallDetailsActivity extends AppCompatActivity implements OnMenuItemClickListener {
@@ -45,7 +45,7 @@ public class CallDetailsActivity extends AppCompatActivity implements OnMenuItem
private static final String EXTRA_CONTACT = "contact";
private static final String TASK_DELETE = "task_delete";
- private CallDetailsEntry[] entries;
+ private List<CallDetailsEntry> entries;
public static Intent newInstance(
Context context, @NonNull CallDetailsEntries details, @NonNull CallComposerContact contact) {
@@ -53,8 +53,8 @@ public class CallDetailsActivity extends AppCompatActivity implements OnMenuItem
Assert.isNotNull(contact);
Intent intent = new Intent(context, CallDetailsActivity.class);
- ProtoParsers.put(intent, EXTRA_CONTACT, contact);
- ProtoParsers.put(intent, EXTRA_CALL_DETAILS_ENTRIES, details);
+ intent.putExtra(EXTRA_CONTACT, contact.toByteArray());
+ intent.putExtra(EXTRA_CALL_DETAILS_ENTRIES, details.toByteArray());
return intent;
}
@@ -77,12 +77,15 @@ public class CallDetailsActivity extends AppCompatActivity implements OnMenuItem
private void onHandleIntent(Intent intent) {
Bundle arguments = intent.getExtras();
- CallComposerContact contact =
- ProtoParsers.getFromInstanceState(arguments, EXTRA_CONTACT, new CallComposerContact());
- entries =
- ProtoParsers.getFromInstanceState(
- arguments, EXTRA_CALL_DETAILS_ENTRIES, new CallDetailsEntries())
- .entries;
+ CallComposerContact contact = CallComposerContact.getDefaultInstance();
+ try {
+ contact = CallComposerContact.parseFrom(arguments.getByteArray(EXTRA_CONTACT));
+ entries =
+ CallDetailsEntries.parseFrom(arguments.getByteArray(EXTRA_CALL_DETAILS_ENTRIES))
+ .getEntriesList();
+ } catch (InvalidProtocolBufferException e) {
+ throw Assert.createIllegalStateFailException(e.toString());
+ }
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(new CallDetailsAdapter(this, contact, entries));
@@ -110,7 +113,7 @@ public class CallDetailsActivity extends AppCompatActivity implements OnMenuItem
if (callIds.length() != 0) {
callIds.append(",");
}
- callIds.append(entry.callId);
+ callIds.append(entry.getCallId());
}
this.callIds = callIds.toString();
}
diff --git a/java/com/android/dialer/calldetails/CallDetailsAdapter.java b/java/com/android/dialer/calldetails/CallDetailsAdapter.java
index 7471c9c1e..725077965 100644
--- a/java/com/android/dialer/calldetails/CallDetailsAdapter.java
+++ b/java/com/android/dialer/calldetails/CallDetailsAdapter.java
@@ -17,14 +17,16 @@
package com.android.dialer.calldetails;
import android.content.Context;
+import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.ViewHolder;
import android.view.LayoutInflater;
import android.view.ViewGroup;
-import com.android.dialer.callcomposer.nano.CallComposerContact;
-import com.android.dialer.calldetails.nano.CallDetailsEntries.CallDetailsEntry;
+import com.android.dialer.callcomposer.CallComposerContact;
+import com.android.dialer.calldetails.CallDetailsEntries.CallDetailsEntry;
import com.android.dialer.calllogutils.CallTypeHelper;
import com.android.dialer.common.Assert;
+import java.util.List;
/** Adapter for RecyclerView in {@link CallDetailsActivity}. */
public class CallDetailsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
@@ -34,13 +36,15 @@ public class CallDetailsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
private static final int FOOTER_VIEW_TYPE = 3;
private final CallComposerContact contact;
- private final CallDetailsEntry[] callDetailsEntries;
+ private final List<CallDetailsEntry> callDetailsEntries;
private final CallTypeHelper callTypeHelper;
public CallDetailsAdapter(
- Context context, CallComposerContact contact, CallDetailsEntry[] callDetailsEntries) {
+ Context context,
+ @NonNull CallComposerContact contact,
+ @NonNull List<CallDetailsEntry> callDetailsEntries) {
this.contact = Assert.isNotNull(contact);
- this.callDetailsEntries = Assert.isNotNull(callDetailsEntries);
+ this.callDetailsEntries = callDetailsEntries;
callTypeHelper = new CallTypeHelper(context.getResources());
}
@@ -68,15 +72,15 @@ public class CallDetailsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
if (position == 0) { // Header
((CallDetailsHeaderViewHolder) holder).updateContactInfo(contact);
} else if (position == getItemCount() - 1) {
- ((CallDetailsFooterViewHolder) holder).setPhoneNumber(contact.number);
+ ((CallDetailsFooterViewHolder) holder).setPhoneNumber(contact.getNumber());
} else {
CallDetailsEntryViewHolder viewHolder = (CallDetailsEntryViewHolder) holder;
- CallDetailsEntry entry = callDetailsEntries[position - 1];
+ CallDetailsEntry entry = callDetailsEntries.get(position - 1);
viewHolder.setCallDetails(
- contact.number,
+ contact.getNumber(),
entry,
callTypeHelper,
- entry.historyResults.length > 0 && position != getItemCount() - 2);
+ !entry.getHistoryResultsList().isEmpty() && position != getItemCount() - 2);
}
}
@@ -93,6 +97,6 @@ public class CallDetailsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
@Override
public int getItemCount() {
- return callDetailsEntries.length + 2; // Header + footer
+ return callDetailsEntries.size() + 2; // Header + footer
}
}
diff --git a/java/com/android/dialer/calldetails/CallDetailsEntryViewHolder.java b/java/com/android/dialer/calldetails/CallDetailsEntryViewHolder.java
index a8958d911..156fa4255 100644
--- a/java/com/android/dialer/calldetails/CallDetailsEntryViewHolder.java
+++ b/java/com/android/dialer/calldetails/CallDetailsEntryViewHolder.java
@@ -27,14 +27,14 @@ import android.text.TextUtils;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
-import com.android.dialer.calldetails.nano.CallDetailsEntries.CallDetailsEntry;
+import com.android.dialer.calldetails.CallDetailsEntries.CallDetailsEntry;
import com.android.dialer.calllogutils.CallEntryFormatter;
import com.android.dialer.calllogutils.CallTypeHelper;
import com.android.dialer.calllogutils.CallTypeIconsView;
import com.android.dialer.common.LogUtil;
import com.android.dialer.compat.AppCompatConstants;
-import com.android.dialer.enrichedcall.historyquery.proto.nano.HistoryResult;
-import com.android.dialer.enrichedcall.historyquery.proto.nano.HistoryResult.Type;
+import com.android.dialer.enrichedcall.historyquery.proto.HistoryResult;
+import com.android.dialer.enrichedcall.historyquery.proto.HistoryResult.Type;
import com.android.dialer.oem.MotorolaUtils;
import com.android.dialer.util.CallUtil;
import com.android.dialer.util.DialerUtils;
@@ -87,40 +87,46 @@ public class CallDetailsEntryViewHolder extends ViewHolder {
CallDetailsEntry entry,
CallTypeHelper callTypeHelper,
boolean showMultimediaDivider) {
- int callType = entry.callType;
+ int callType = entry.getCallType();
boolean isVideoCall =
- (entry.features & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO
+ (entry.getFeatures() & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO
&& CallUtil.isVideoEnabled(context);
boolean isPulledCall =
- (entry.features & Calls.FEATURES_PULLED_EXTERNALLY) == Calls.FEATURES_PULLED_EXTERNALLY;
+ (entry.getFeatures() & Calls.FEATURES_PULLED_EXTERNALLY)
+ == Calls.FEATURES_PULLED_EXTERNALLY;
callTime.setTextColor(getColorForCallType(context, callType));
callTypeIcon.clear();
callTypeIcon.add(callType);
- callTypeIcon.setShowVideo((entry.features & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO);
- callTypeIcon.setShowHd(MotorolaUtils.shouldShowHdIconInCallLog(context, entry.features));
- callTypeIcon.setShowWifi(MotorolaUtils.shouldShowWifiIconInCallLog(context, entry.features));
+ callTypeIcon.setShowVideo((entry.getFeatures() & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO);
+ callTypeIcon.setShowHd(MotorolaUtils.shouldShowHdIconInCallLog(context, entry.getFeatures()));
+ callTypeIcon.setShowWifi(
+ MotorolaUtils.shouldShowWifiIconInCallLog(context, entry.getFeatures()));
callTypeText.setText(callTypeHelper.getCallTypeText(callType, isVideoCall, isPulledCall));
- callTime.setText(CallEntryFormatter.formatDate(context, entry.date));
+ callTime.setText(CallEntryFormatter.formatDate(context, entry.getDate()));
if (CallTypeHelper.isMissedCallType(callType)) {
callDuration.setVisibility(View.GONE);
} else {
callDuration.setVisibility(View.VISIBLE);
callDuration.setText(
- CallEntryFormatter.formatDurationAndDataUsage(context, entry.duration, entry.dataUsage));
+ CallEntryFormatter.formatDurationAndDataUsage(
+ context, entry.getDuration(), entry.getDataUsage(), false /* a11y */));
+ callDuration.setContentDescription(
+ CallEntryFormatter.formatDurationAndDataUsage(
+ context, entry.getDuration(), entry.getDataUsage(), true /* a11y */));
}
setMultimediaDetails(number, entry, showMultimediaDivider);
}
private void setMultimediaDetails(String number, CallDetailsEntry entry, boolean showDivider) {
multimediaDivider.setVisibility(showDivider ? View.VISIBLE : View.GONE);
- if (entry.historyResults == null || entry.historyResults.length <= 0) {
+ if (entry.getHistoryResultsList().isEmpty()) {
LogUtil.i("CallDetailsEntryViewHolder.setMultimediaDetails", "no data, hiding UI");
multimediaDetailsContainer.setVisibility(View.GONE);
} else {
- HistoryResult historyResult = entry.historyResults[0];
+ HistoryResult historyResult = entry.getHistoryResults(0);
multimediaDetailsContainer.setVisibility(View.VISIBLE);
multimediaDetailsContainer.setOnClickListener(
(v) -> {
@@ -128,10 +134,10 @@ public class CallDetailsEntryViewHolder extends ViewHolder {
});
multimediaImageContainer.setClipToOutline(true);
- if (!TextUtils.isEmpty(historyResult.imageUri)) {
+ if (!TextUtils.isEmpty(historyResult.getImageUri())) {
LogUtil.i("CallDetailsEntryViewHolder.setMultimediaDetails", "setting image");
multimediaImageContainer.setVisibility(View.VISIBLE);
- multimediaImage.setImageURI(Uri.parse(historyResult.imageUri));
+ multimediaImage.setImageURI(Uri.parse(historyResult.getImageUri()));
multimediaDetails.setText(
isIncoming(historyResult) ? R.string.received_a_photo : R.string.sent_a_photo);
} else {
@@ -139,19 +145,20 @@ public class CallDetailsEntryViewHolder extends ViewHolder {
}
// Set text after image to overwrite the received/sent a photo text
- if (!TextUtils.isEmpty(historyResult.text)) {
+ if (!TextUtils.isEmpty(historyResult.getText())) {
LogUtil.i("CallDetailsEntryViewHolder.setMultimediaDetails", "showing text");
multimediaDetails.setText(
- context.getString(R.string.message_in_quotes, historyResult.text));
+ context.getString(R.string.message_in_quotes, historyResult.getText()));
} else {
LogUtil.i("CallDetailsEntryViewHolder.setMultimediaDetails", "no text");
}
- if (entry.historyResults.length > 1 && !TextUtils.isEmpty(entry.historyResults[1].text)) {
+ if (entry.getHistoryResultsList().size() > 1
+ && !TextUtils.isEmpty(entry.getHistoryResults(1).getText())) {
LogUtil.i("CallDetailsEntryViewHolder.setMultimediaDetails", "showing post call note");
postCallNote.setVisibility(View.VISIBLE);
postCallNote.setText(
- context.getString(R.string.message_in_quotes, entry.historyResults[1].text));
+ context.getString(R.string.message_in_quotes, entry.getHistoryResults(1).getText()));
} else {
LogUtil.i("CallDetailsEntryViewHolder.setMultimediaDetails", "no post call note");
}
@@ -159,8 +166,8 @@ public class CallDetailsEntryViewHolder extends ViewHolder {
}
private static boolean isIncoming(@NonNull HistoryResult historyResult) {
- return historyResult.type == Type.INCOMING_POST_CALL
- || historyResult.type == Type.INCOMING_CALL_COMPOSER;
+ return historyResult.getType() == Type.INCOMING_POST_CALL
+ || historyResult.getType() == Type.INCOMING_CALL_COMPOSER;
}
private static @ColorInt int getColorForCallType(Context context, int callType) {
diff --git a/java/com/android/dialer/calldetails/CallDetailsFooterViewHolder.java b/java/com/android/dialer/calldetails/CallDetailsFooterViewHolder.java
index 36662bab9..3f894366f 100644
--- a/java/com/android/dialer/calldetails/CallDetailsFooterViewHolder.java
+++ b/java/com/android/dialer/calldetails/CallDetailsFooterViewHolder.java
@@ -19,12 +19,13 @@ package com.android.dialer.calldetails;
import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import com.android.contacts.common.ClipboardUtils;
import com.android.dialer.common.Assert;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
import com.android.dialer.util.CallUtil;
import com.android.dialer.util.DialerUtils;
@@ -32,6 +33,7 @@ import com.android.dialer.util.DialerUtils;
public class CallDetailsFooterViewHolder extends RecyclerView.ViewHolder
implements OnClickListener {
+ private final View container;
private final View copy;
private final View edit;
@@ -39,6 +41,7 @@ public class CallDetailsFooterViewHolder extends RecyclerView.ViewHolder
public CallDetailsFooterViewHolder(View view) {
super(view);
+ container = view.findViewById(R.id.footer_container);
copy = view.findViewById(R.id.call_detail_action_copy);
edit = view.findViewById(R.id.call_detail_action_edit_before_call);
@@ -48,6 +51,9 @@ public class CallDetailsFooterViewHolder extends RecyclerView.ViewHolder
public void setPhoneNumber(String number) {
this.number = number;
+ if (TextUtils.isEmpty(number)) {
+ container.setVisibility(View.GONE);
+ }
}
@Override
diff --git a/java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java b/java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java
index 416c521a2..437c2602c 100644
--- a/java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java
+++ b/java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java
@@ -25,12 +25,12 @@ import android.view.View.OnClickListener;
import android.widget.QuickContactBadge;
import android.widget.TextView;
import com.android.contacts.common.ContactPhotoManager;
-import com.android.dialer.callcomposer.nano.CallComposerContact;
+import com.android.dialer.callcomposer.CallComposerContact;
+import com.android.dialer.callintent.CallInitiationType;
import com.android.dialer.callintent.CallIntentBuilder;
-import com.android.dialer.callintent.nano.CallInitiationType;
import com.android.dialer.common.Assert;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
import com.android.dialer.util.DialerUtils;
/** ViewHolder for Header/Contact in {@link CallDetailsActivity}. */
@@ -56,29 +56,37 @@ public class CallDetailsHeaderViewHolder extends RecyclerView.ViewHolder
}
/** Populates the contact info fields based on the current contact information. */
- public void updateContactInfo(CallComposerContact contact) {
+ void updateContactInfo(CallComposerContact contact) {
this.contact = contact;
ContactPhotoManager.getInstance(context)
- .loadDialerThumbnail(
+ .loadDialerThumbnailOrPhoto(
contactPhoto,
- contact.contactUri == null ? null : Uri.parse(contact.contactUri),
- contact.photoId,
- contact.nameOrNumber,
- contact.contactType);
+ contact.hasContactUri() ? Uri.parse(contact.getContactUri()) : null,
+ contact.getPhotoId(),
+ contact.hasPhotoUri() ? Uri.parse(contact.getPhotoUri()) : null,
+ contact.getNameOrNumber(),
+ contact.getContactType());
- nameView.setText(contact.nameOrNumber);
- if (!TextUtils.isEmpty(contact.numberLabel) && !TextUtils.isEmpty(contact.displayNumber)) {
+ contactPhoto.setContentDescription(
+ context.getString(R.string.description_contact_photo_details, contact.getNameOrNumber()));
+ nameView.setText(contact.getNameOrNumber());
+ if (!TextUtils.isEmpty(contact.getNumberLabel())
+ && !TextUtils.isEmpty(contact.getDisplayNumber())) {
numberView.setVisibility(View.VISIBLE);
String secondaryInfo =
context.getString(
com.android.contacts.common.R.string.call_subject_type_and_number,
- contact.numberLabel,
- contact.displayNumber);
+ contact.getNumberLabel(),
+ contact.getDisplayNumber());
numberView.setText(secondaryInfo);
} else {
numberView.setVisibility(View.GONE);
numberView.setText(null);
}
+
+ if (TextUtils.isEmpty(contact.getNumber())) {
+ callBackButton.setVisibility(View.GONE);
+ }
}
@Override
@@ -87,7 +95,7 @@ public class CallDetailsHeaderViewHolder extends RecyclerView.ViewHolder
Logger.get(view.getContext()).logImpression(DialerImpression.Type.CALL_DETAILS_CALL_BACK);
DialerUtils.startActivityWithErrorToast(
view.getContext(),
- new CallIntentBuilder(contact.number, CallInitiationType.Type.CALL_DETAILS).build());
+ new CallIntentBuilder(contact.getNumber(), CallInitiationType.Type.CALL_DETAILS).build());
} else {
Assert.fail("View OnClickListener not implemented: " + view);
}
diff --git a/java/com/android/dialer/calldetails/nano/CallDetailsEntries.java b/java/com/android/dialer/calldetails/nano/CallDetailsEntries.java
deleted file mode 100644
index aee8f3652..000000000
--- a/java/com/android/dialer/calldetails/nano/CallDetailsEntries.java
+++ /dev/null
@@ -1,440 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Generated by the protocol buffer compiler. DO NOT EDIT!
-
-package com.android.dialer.calldetails.nano;
-
-/** This file is autogenerated, but javadoc required. */
-@SuppressWarnings("hiding")
-public final class CallDetailsEntries
- extends com.google.protobuf.nano.ExtendableMessageNano<CallDetailsEntries> {
-
- /** This file is autogenerated, but javadoc required. */
- public static final class CallDetailsEntry
- extends com.google.protobuf.nano.ExtendableMessageNano<CallDetailsEntry> {
-
- private static volatile CallDetailsEntry[] _emptyArray;
- public static CallDetailsEntry[] emptyArray() {
- // Lazily initializes the empty array
- if (_emptyArray == null) {
- synchronized (com.google.protobuf.nano.InternalNano.LAZY_INIT_LOCK) {
- if (_emptyArray == null) {
- _emptyArray = new CallDetailsEntry[0];
- }
- }
- }
- return _emptyArray;
- }
-
- // optional int64 call_id = 1;
- public long callId;
-
- // optional int32 call_type = 2;
- public int callType;
-
- // optional int32 features = 3;
- public int features;
-
- // optional int64 date = 4;
- public long date;
-
- // optional int64 duration = 5;
- public long duration;
-
- // optional int64 data_usage = 6;
- public long dataUsage;
-
- // repeated .com.android.dialer.enrichedcall.historyquery.proto.
- // HistoryResult history_results = 7;
- public com.android.dialer.enrichedcall.historyquery.proto.nano.HistoryResult[] historyResults;
-
- // @@protoc_insertion_point(class_scope:com.android.dialer.calldetails.CallDetailsEntries.CallDetailsEntry)
-
- public CallDetailsEntry() {
- clear();
- }
-
- public CallDetailsEntry clear() {
- callId = 0L;
- callType = 0;
- features = 0;
- date = 0L;
- duration = 0L;
- dataUsage = 0L;
- historyResults =
- com.android.dialer.enrichedcall.historyquery.proto.nano.HistoryResult.emptyArray();
- unknownFieldData = null;
- cachedSize = -1;
- return this;
- }
-
- @Override
- public boolean equals(Object o) {
- if (o == this) {
- return true;
- }
- if (!(o instanceof CallDetailsEntry)) {
- return false;
- }
- CallDetailsEntry other = (CallDetailsEntry) o;
- if (this.callId != other.callId) {
- return false;
- }
- if (this.callType != other.callType) {
- return false;
- }
- if (this.features != other.features) {
- return false;
- }
- if (this.date != other.date) {
- return false;
- }
- if (this.duration != other.duration) {
- return false;
- }
- if (this.dataUsage != other.dataUsage) {
- return false;
- }
- if (!com.google.protobuf.nano.InternalNano.equals(
- this.historyResults, other.historyResults)) {
- return false;
- }
- if (unknownFieldData == null || unknownFieldData.isEmpty()) {
- return other.unknownFieldData == null || other.unknownFieldData.isEmpty();
- } else {
- return unknownFieldData.equals(other.unknownFieldData);
- }
- }
-
- @Override
- public int hashCode() {
- int result = 17;
- result = 31 * result + getClass().getName().hashCode();
- result = 31 * result + (int) (this.callId ^ (this.callId >>> 32));
- result = 31 * result + this.callType;
- result = 31 * result + this.features;
- result = 31 * result + (int) (this.date ^ (this.date >>> 32));
- result = 31 * result + (int) (this.duration ^ (this.duration >>> 32));
- result = 31 * result + (int) (this.dataUsage ^ (this.dataUsage >>> 32));
- result = 31 * result + com.google.protobuf.nano.InternalNano.hashCode(this.historyResults);
- result =
- 31 * result
- + (unknownFieldData == null || unknownFieldData.isEmpty()
- ? 0
- : unknownFieldData.hashCode());
- return result;
- }
-
- @Override
- public void writeTo(com.google.protobuf.nano.CodedOutputByteBufferNano output)
- throws java.io.IOException {
- if (this.callId != 0L) {
- output.writeInt64(1, this.callId);
- }
- if (this.callType != 0) {
- output.writeInt32(2, this.callType);
- }
- if (this.features != 0) {
- output.writeInt32(3, this.features);
- }
- if (this.date != 0L) {
- output.writeInt64(4, this.date);
- }
- if (this.duration != 0L) {
- output.writeInt64(5, this.duration);
- }
- if (this.dataUsage != 0L) {
- output.writeInt64(6, this.dataUsage);
- }
- if (this.historyResults != null && this.historyResults.length > 0) {
- for (int i = 0; i < this.historyResults.length; i++) {
- com.android.dialer.enrichedcall.historyquery.proto.nano.HistoryResult element =
- this.historyResults[i];
- if (element != null) {
- output.writeMessage(7, element);
- }
- }
- }
- super.writeTo(output);
- }
-
- @Override
- protected int computeSerializedSize() {
- int size = super.computeSerializedSize();
- if (this.callId != 0L) {
- size += com.google.protobuf.nano.CodedOutputByteBufferNano.computeInt64Size(1, this.callId);
- }
- if (this.callType != 0) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeInt32Size(2, this.callType);
- }
- if (this.features != 0) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeInt32Size(3, this.features);
- }
- if (this.date != 0L) {
- size += com.google.protobuf.nano.CodedOutputByteBufferNano.computeInt64Size(4, this.date);
- }
- if (this.duration != 0L) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeInt64Size(5, this.duration);
- }
- if (this.dataUsage != 0L) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeInt64Size(6, this.dataUsage);
- }
- if (this.historyResults != null && this.historyResults.length > 0) {
- for (int i = 0; i < this.historyResults.length; i++) {
- com.android.dialer.enrichedcall.historyquery.proto.nano.HistoryResult element =
- this.historyResults[i];
- if (element != null) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeMessageSize(7, element);
- }
- }
- }
- return size;
- }
-
- @Override
- public CallDetailsEntry mergeFrom(com.google.protobuf.nano.CodedInputByteBufferNano input)
- throws java.io.IOException {
- while (true) {
- int tag = input.readTag();
- switch (tag) {
- case 0:
- return this;
- default:
- {
- if (!super.storeUnknownField(input, tag)) {
- return this;
- }
- break;
- }
- case 8:
- {
- this.callId = input.readInt64();
- break;
- }
- case 16:
- {
- this.callType = input.readInt32();
- break;
- }
- case 24:
- {
- this.features = input.readInt32();
- break;
- }
- case 32:
- {
- this.date = input.readInt64();
- break;
- }
- case 40:
- {
- this.duration = input.readInt64();
- break;
- }
- case 48:
- {
- this.dataUsage = input.readInt64();
- break;
- }
- case 58:
- {
- int arrayLength =
- com.google.protobuf.nano.WireFormatNano.getRepeatedFieldArrayLength(input, 58);
- int i = this.historyResults == null ? 0 : this.historyResults.length;
- com.android.dialer.enrichedcall.historyquery.proto.nano.HistoryResult[] newArray =
- new com.android.dialer.enrichedcall.historyquery.proto.nano.HistoryResult
- [i + arrayLength];
- if (i != 0) {
- java.lang.System.arraycopy(this.historyResults, 0, newArray, 0, i);
- }
- for (; i < newArray.length - 1; i++) {
- newArray[i] =
- new com.android.dialer.enrichedcall.historyquery.proto.nano.HistoryResult();
- input.readMessage(newArray[i]);
- input.readTag();
- }
- // Last one without readTag.
- newArray[i] =
- new com.android.dialer.enrichedcall.historyquery.proto.nano.HistoryResult();
- input.readMessage(newArray[i]);
- this.historyResults = newArray;
- break;
- }
- }
- }
- }
-
- public static CallDetailsEntry parseFrom(byte[] data)
- throws com.google.protobuf.nano.InvalidProtocolBufferNanoException {
- return com.google.protobuf.nano.MessageNano.mergeFrom(new CallDetailsEntry(), data);
- }
-
- public static CallDetailsEntry parseFrom(
- com.google.protobuf.nano.CodedInputByteBufferNano input) throws java.io.IOException {
- return new CallDetailsEntry().mergeFrom(input);
- }
- }
-
- private static volatile CallDetailsEntries[] _emptyArray;
- public static CallDetailsEntries[] emptyArray() {
- // Lazily initializes the empty array
- if (_emptyArray == null) {
- synchronized (com.google.protobuf.nano.InternalNano.LAZY_INIT_LOCK) {
- if (_emptyArray == null) {
- _emptyArray = new CallDetailsEntries[0];
- }
- }
- }
- return _emptyArray;
- }
-
- // repeated .com.android.dialer.calldetails.CallDetailsEntries.CallDetailsEntry entries = 1;
- public com.android.dialer.calldetails.nano.CallDetailsEntries.CallDetailsEntry[] entries;
-
- // @@protoc_insertion_point(class_scope:com.android.dialer.calldetails.CallDetailsEntries)
-
- public CallDetailsEntries() {
- clear();
- }
-
- public CallDetailsEntries clear() {
- entries = com.android.dialer.calldetails.nano.CallDetailsEntries.CallDetailsEntry.emptyArray();
- unknownFieldData = null;
- cachedSize = -1;
- return this;
- }
-
- @Override
- public boolean equals(Object o) {
- if (o == this) {
- return true;
- }
- if (!(o instanceof CallDetailsEntries)) {
- return false;
- }
- CallDetailsEntries other = (CallDetailsEntries) o;
- if (!com.google.protobuf.nano.InternalNano.equals(this.entries, other.entries)) {
- return false;
- }
- if (unknownFieldData == null || unknownFieldData.isEmpty()) {
- return other.unknownFieldData == null || other.unknownFieldData.isEmpty();
- } else {
- return unknownFieldData.equals(other.unknownFieldData);
- }
- }
-
- @Override
- public int hashCode() {
- int result = 17;
- result = 31 * result + getClass().getName().hashCode();
- result = 31 * result + com.google.protobuf.nano.InternalNano.hashCode(this.entries);
- result =
- 31 * result
- + (unknownFieldData == null || unknownFieldData.isEmpty()
- ? 0
- : unknownFieldData.hashCode());
- return result;
- }
-
- @Override
- public void writeTo(com.google.protobuf.nano.CodedOutputByteBufferNano output)
- throws java.io.IOException {
- if (this.entries != null && this.entries.length > 0) {
- for (int i = 0; i < this.entries.length; i++) {
- com.android.dialer.calldetails.nano.CallDetailsEntries.CallDetailsEntry element =
- this.entries[i];
- if (element != null) {
- output.writeMessage(1, element);
- }
- }
- }
- super.writeTo(output);
- }
-
- @Override
- protected int computeSerializedSize() {
- int size = super.computeSerializedSize();
- if (this.entries != null && this.entries.length > 0) {
- for (int i = 0; i < this.entries.length; i++) {
- com.android.dialer.calldetails.nano.CallDetailsEntries.CallDetailsEntry element =
- this.entries[i];
- if (element != null) {
- size += com.google.protobuf.nano.CodedOutputByteBufferNano.computeMessageSize(1, element);
- }
- }
- }
- return size;
- }
-
- @Override
- public CallDetailsEntries mergeFrom(com.google.protobuf.nano.CodedInputByteBufferNano input)
- throws java.io.IOException {
- while (true) {
- int tag = input.readTag();
- switch (tag) {
- case 0:
- return this;
- default:
- {
- if (!super.storeUnknownField(input, tag)) {
- return this;
- }
- break;
- }
- case 10:
- {
- int arrayLength =
- com.google.protobuf.nano.WireFormatNano.getRepeatedFieldArrayLength(input, 10);
- int i = this.entries == null ? 0 : this.entries.length;
- com.android.dialer.calldetails.nano.CallDetailsEntries.CallDetailsEntry[] newArray =
- new com.android.dialer.calldetails.nano.CallDetailsEntries.CallDetailsEntry
- [i + arrayLength];
- if (i != 0) {
- java.lang.System.arraycopy(this.entries, 0, newArray, 0, i);
- }
- for (; i < newArray.length - 1; i++) {
- newArray[i] =
- new com.android.dialer.calldetails.nano.CallDetailsEntries.CallDetailsEntry();
- input.readMessage(newArray[i]);
- input.readTag();
- }
- // Last one without readTag.
- newArray[i] =
- new com.android.dialer.calldetails.nano.CallDetailsEntries.CallDetailsEntry();
- input.readMessage(newArray[i]);
- this.entries = newArray;
- break;
- }
- }
- }
- }
-
- public static CallDetailsEntries parseFrom(byte[] data)
- throws com.google.protobuf.nano.InvalidProtocolBufferNanoException {
- return com.google.protobuf.nano.MessageNano.mergeFrom(new CallDetailsEntries(), data);
- }
-
- public static CallDetailsEntries parseFrom(
- com.google.protobuf.nano.CodedInputByteBufferNano input) throws java.io.IOException {
- return new CallDetailsEntries().mergeFrom(input);
- }
-}
diff --git a/java/com/android/dialer/calldetails/proto/call_details_entries.proto b/java/com/android/dialer/calldetails/proto/call_details_entries.proto
new file mode 100644
index 000000000..e254b7713
--- /dev/null
+++ b/java/com/android/dialer/calldetails/proto/call_details_entries.proto
@@ -0,0 +1,23 @@
+syntax = "proto2";
+
+option java_package = "com.android.dialer.calldetails";
+option java_multiple_files = true;
+option optimize_for = LITE_RUNTIME;
+
+import "java/com/android/dialer/enrichedcall/historyquery/proto/history_result.proto";
+
+package com.android.dialer.calldetails;
+
+message CallDetailsEntries {
+ message CallDetailsEntry {
+ optional int64 call_id = 1;
+ optional int32 call_type = 2;
+ optional int32 features = 3;
+ optional int64 date = 4;
+ optional int64 duration = 5;
+ optional int64 data_usage = 6;
+ repeated enrichedcall.historyquery.proto.HistoryResult history_results = 7;
+ }
+
+ repeated CallDetailsEntry entries = 1;
+}
diff --git a/java/com/android/dialer/calldetails/res/layout/call_details_footer.xml b/java/com/android/dialer/calldetails/res/layout/call_details_footer.xml
index 885cb0989..ccfa4e7ac 100644
--- a/java/com/android/dialer/calldetails/res/layout/call_details_footer.xml
+++ b/java/com/android/dialer/calldetails/res/layout/call_details_footer.xml
@@ -14,6 +14,7 @@
limitations under the License.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/footer_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
diff --git a/java/com/android/dialer/calldetails/res/layout/contact_container.xml b/java/com/android/dialer/calldetails/res/layout/contact_container.xml
index bcda55e11..daf465b2c 100644
--- a/java/com/android/dialer/calldetails/res/layout/contact_container.xml
+++ b/java/com/android/dialer/calldetails/res/layout/contact_container.xml
@@ -20,14 +20,19 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/call_details_top_margin"
android:gravity="center_vertical"
- android:padding="@dimen/contact_container_padding">
+ android:paddingTop="@dimen/contact_container_padding_top_start"
+ android:paddingStart="@dimen/contact_container_padding_top_start"
+ android:paddingBottom="@dimen/contact_container_padding_bottom_end"
+ android:paddingEnd="@dimen/contact_container_padding_bottom_end">
<QuickContactBadge
android:id="@+id/quick_contact_photo"
android:layout_width="@dimen/call_details_contact_photo_size"
android:layout_height="@dimen/call_details_contact_photo_size"
android:layout_marginTop="2dp"
- android:focusable="true"/>
+ android:padding="@dimen/call_details_contact_photo_padding"
+ android:focusable="true"
+ android:contentDescription="@string/description_quick_contact_for"/>
<LinearLayout
android:orientation="vertical"
@@ -60,6 +65,7 @@
android:layout_centerVertical="true"
android:background="?android:attr/selectableItemBackgroundBorderless"
android:contentDescription="@string/description_call_log_call_action"
+ android:scaleType="center"
android:src="@drawable/quantum_ic_call_white_24"
android:tint="@color/secondary_text_color"/>
</RelativeLayout> \ No newline at end of file
diff --git a/java/com/android/dialer/calldetails/res/values-af/strings.xml b/java/com/android/dialer/calldetails/res/values-af/strings.xml
index 674ea2d9f..86bef4b9a 100644
--- a/java/com/android/dialer/calldetails/res/values-af/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-af/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Het \'n foto gestuur"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Het \'n foto ontvang"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Kontakbesonderhede vir <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-am/strings.xml b/java/com/android/dialer/calldetails/res/values-am/strings.xml
index e9c597b9a..2a23945fe 100644
--- a/java/com/android/dialer/calldetails/res/values-am/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-am/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"አንድ ፎቶ ተልኳል"</string>
<string name="received_a_photo" msgid="3528953225576480505">"አንድ ፎቶ ደርሷል"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"«<xliff:g id="MESSAGE">%1$s</xliff:g>»"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"የ<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> የእውቂያ ዝርዝሮች"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-ar/strings.xml b/java/com/android/dialer/calldetails/res/values-ar/strings.xml
index 12dfed80d..6b0d8a773 100644
--- a/java/com/android/dialer/calldetails/res/values-ar/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-ar/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"تم إرسال صورة"</string>
<string name="received_a_photo" msgid="3528953225576480505">"تم تلقي صورة"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"تفاصيل الاتصال بالمستخدم <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-az/strings.xml b/java/com/android/dialer/calldetails/res/values-az/strings.xml
index 282e7c907..479837c34 100644
--- a/java/com/android/dialer/calldetails/res/values-az/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-az/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Foto göndərildi"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Foto alındı"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> üçün kontakt detalları"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/calldetails/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..01141ffa4
--- /dev/null
+++ b/java/com/android/dialer/calldetails/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="call_details" msgid="5063658079729839605">"Detalji poziva"</string>
+ <string name="delete" msgid="2141020674108406737">"Izbriši"</string>
+ <string name="call_details_copy_number" msgid="4265479408878990796">"Kopiraj broj"</string>
+ <string name="call_details_edit_number" msgid="8718476514903513624">"Izmenite broj pre poziva"</string>
+ <string name="description_call_log_call_action" msgid="1421313064764221900">"Pozovi"</string>
+ <string name="sent_a_photo" msgid="3978670717462979502">"Slika je poslata"</string>
+ <string name="received_a_photo" msgid="3528953225576480505">"Slika je primljena"</string>
+ <string name="message_in_quotes" msgid="3270574830115828365">"„<xliff:g id="MESSAGE">%1$s</xliff:g>“"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Kontakt informacije za <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-be/strings.xml b/java/com/android/dialer/calldetails/res/values-be/strings.xml
index 27f07a043..683f29bb2 100644
--- a/java/com/android/dialer/calldetails/res/values-be/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-be/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Адпраўлена фота"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Атрымана фота"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Кантактныя даныя абанента <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-bg/strings.xml b/java/com/android/dialer/calldetails/res/values-bg/strings.xml
index b4378eb24..9cd70e2f6 100644
--- a/java/com/android/dialer/calldetails/res/values-bg/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-bg/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Изпратена бе снимка"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Получена бе снимка"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"„<xliff:g id="MESSAGE">%1$s</xliff:g>“"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Подробности за контакта за <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-bn/strings.xml b/java/com/android/dialer/calldetails/res/values-bn/strings.xml
index c96159f57..148f61aba 100644
--- a/java/com/android/dialer/calldetails/res/values-bn/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-bn/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"একটি ফটো পাঠিয়েছেন"</string>
<string name="received_a_photo" msgid="3528953225576480505">"একটি ফটো পেয়েছেন"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> পরিচিতির বিশদ বিবরণ"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-bs/strings.xml b/java/com/android/dialer/calldetails/res/values-bs/strings.xml
index 01b5f9b82..6f164b228 100644
--- a/java/com/android/dialer/calldetails/res/values-bs/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-bs/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Fotografija poslana"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Fotografija primljena"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Detalji o kontaktu <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-ca/strings.xml b/java/com/android/dialer/calldetails/res/values-ca/strings.xml
index 0974303a0..0e33e60e7 100644
--- a/java/com/android/dialer/calldetails/res/values-ca/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-ca/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"S\'ha enviat una foto"</string>
<string name="received_a_photo" msgid="3528953225576480505">"S\'ha rebut una foto"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"<xliff:g id="MESSAGE">%1$s</xliff:g>"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Dades de contacte de: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-cs/strings.xml b/java/com/android/dialer/calldetails/res/values-cs/strings.xml
index 6eebd1456..9747ee139 100644
--- a/java/com/android/dialer/calldetails/res/values-cs/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-cs/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Byla poslána fotka"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Byla přijata fotka"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"„<xliff:g id="MESSAGE">%1$s</xliff:g>“"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Podrobnosti kontaktu <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-da/strings.xml b/java/com/android/dialer/calldetails/res/values-da/strings.xml
index b7ebdb045..41bc25254 100644
--- a/java/com/android/dialer/calldetails/res/values-da/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-da/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Der blev sendt et billede"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Der blev modtaget et billede"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Kontaktoplysninger for <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-de/strings.xml b/java/com/android/dialer/calldetails/res/values-de/strings.xml
index 14d16ae2e..014666b3f 100644
--- a/java/com/android/dialer/calldetails/res/values-de/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-de/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Hat ein Foto gesendet"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Hat ein Foto empfangen"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Kontaktdetails für <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-el/strings.xml b/java/com/android/dialer/calldetails/res/values-el/strings.xml
index e12b09f3b..6b51fc71d 100644
--- a/java/com/android/dialer/calldetails/res/values-el/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-el/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Έγινε αποστολή φωτογραφίας"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Έγινε λήψη φωτογραφίας"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Στοιχεία επικοινωνίας επαφής <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-en-rAU/strings.xml b/java/com/android/dialer/calldetails/res/values-en-rAU/strings.xml
index 0f69f1ed1..2d5210e8c 100644
--- a/java/com/android/dialer/calldetails/res/values-en-rAU/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-en-rAU/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Sent a photo"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Received a photo"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Contact details for <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-en-rGB/strings.xml b/java/com/android/dialer/calldetails/res/values-en-rGB/strings.xml
index 0f69f1ed1..2d5210e8c 100644
--- a/java/com/android/dialer/calldetails/res/values-en-rGB/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-en-rGB/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Sent a photo"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Received a photo"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Contact details for <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-en-rIN/strings.xml b/java/com/android/dialer/calldetails/res/values-en-rIN/strings.xml
index 0f69f1ed1..2d5210e8c 100644
--- a/java/com/android/dialer/calldetails/res/values-en-rIN/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-en-rIN/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Sent a photo"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Received a photo"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Contact details for <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-es-rUS/strings.xml b/java/com/android/dialer/calldetails/res/values-es-rUS/strings.xml
index 9c4649c36..d9db2825c 100644
--- a/java/com/android/dialer/calldetails/res/values-es-rUS/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-es-rUS/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Enviaste una foto"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Recibiste una foto"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Datos de contacto de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-es/strings.xml b/java/com/android/dialer/calldetails/res/values-es/strings.xml
index 33889f2fe..e72e898b4 100644
--- a/java/com/android/dialer/calldetails/res/values-es/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-es/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Se ha enviado una foto"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Se ha recibido una foto"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Información de contacto de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-et/strings.xml b/java/com/android/dialer/calldetails/res/values-et/strings.xml
index c1c2f6e81..496459d6b 100644
--- a/java/com/android/dialer/calldetails/res/values-et/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-et/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Saatis foto"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Sai foto"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"„<xliff:g id="MESSAGE">%1$s</xliff:g>”"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Kontakti <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> üksikasjad"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-eu/strings.xml b/java/com/android/dialer/calldetails/res/values-eu/strings.xml
index 3cd78e0a9..913082fb8 100644
--- a/java/com/android/dialer/calldetails/res/values-eu/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-eu/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Argazki bat bidali duzu"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Argazki bat jaso duzu"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> kontaktuaren xehetasunak"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-fa/strings.xml b/java/com/android/dialer/calldetails/res/values-fa/strings.xml
index 700c4ffcb..cad85a265 100644
--- a/java/com/android/dialer/calldetails/res/values-fa/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-fa/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"عکسی ارسال کرد"</string>
<string name="received_a_photo" msgid="3528953225576480505">"عکسی دریافت کرد"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"«<xliff:g id="MESSAGE">%1$s</xliff:g>»"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"جزئیات تماس <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-fi/strings.xml b/java/com/android/dialer/calldetails/res/values-fi/strings.xml
index 5443236b9..c16110d58 100644
--- a/java/com/android/dialer/calldetails/res/values-fi/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-fi/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Lähetetty kuva"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Vastaanotettu kuva"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Yhteystiedot: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-fr-rCA/strings.xml b/java/com/android/dialer/calldetails/res/values-fr-rCA/strings.xml
index 6433de7a8..676861f3f 100644
--- a/java/com/android/dialer/calldetails/res/values-fr-rCA/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-fr-rCA/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Photo envoyée"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Photo reçue"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"« <xliff:g id="MESSAGE">%1$s</xliff:g> »"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Coordonnées de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-fr/strings.xml b/java/com/android/dialer/calldetails/res/values-fr/strings.xml
index 180b52b45..606cb1095 100644
--- a/java/com/android/dialer/calldetails/res/values-fr/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-fr/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Envoi d\'une photo"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Réception d\'une photo"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Coordonnées associées à <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-gl/strings.xml b/java/com/android/dialer/calldetails/res/values-gl/strings.xml
index a3eb9abd8..aa5ff14dd 100644
--- a/java/com/android/dialer/calldetails/res/values-gl/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-gl/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Enviouse unha foto"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Recibiuse unha foto"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Detalles de contacto de: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-gu/strings.xml b/java/com/android/dialer/calldetails/res/values-gu/strings.xml
index 71ced2427..ccb8755b3 100644
--- a/java/com/android/dialer/calldetails/res/values-gu/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-gu/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"એક ફોટો મોકલ્યો"</string>
<string name="received_a_photo" msgid="3528953225576480505">"એક ફોટો પ્રાપ્ત કર્યો"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> માટે સંપર્ક વિગતો"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-hi/strings.xml b/java/com/android/dialer/calldetails/res/values-hi/strings.xml
index e4596c02b..517fbe52d 100644
--- a/java/com/android/dialer/calldetails/res/values-hi/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-hi/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"फ़ोटो भेजी गई"</string>
<string name="received_a_photo" msgid="3528953225576480505">"फ़ोटो मिली"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> का संपर्क विवरण"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-hr/strings.xml b/java/com/android/dialer/calldetails/res/values-hr/strings.xml
index 84149fc16..687a65e2b 100644
--- a/java/com/android/dialer/calldetails/res/values-hr/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-hr/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Šalje fotografiju"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Prima fotografiju"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Pojedinosti o kontaktu <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-hu/strings.xml b/java/com/android/dialer/calldetails/res/values-hu/strings.xml
index b6c38e3e2..66863e87d 100644
--- a/java/com/android/dialer/calldetails/res/values-hu/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-hu/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Küldött egy fotót"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Kapott egy fotót"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"„<xliff:g id="MESSAGE">%1$s</xliff:g>”"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> részletes adatai."</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-hy/strings.xml b/java/com/android/dialer/calldetails/res/values-hy/strings.xml
index 8d90cf842..a1e84e955 100644
--- a/java/com/android/dialer/calldetails/res/values-hy/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-hy/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Ուղարկվել է լուսանկար"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Ստացվել է լուսանկար"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"«<xliff:g id="MESSAGE">%1$s</xliff:g>»"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-ի կոնտակտային տվյալները"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-in/strings.xml b/java/com/android/dialer/calldetails/res/values-in/strings.xml
index 811cf0517..ba58ba01c 100644
--- a/java/com/android/dialer/calldetails/res/values-in/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-in/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Mengirim foto"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Menerima foto"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Detail kontak <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-is/strings.xml b/java/com/android/dialer/calldetails/res/values-is/strings.xml
index 1d92d4c5f..0770814df 100644
--- a/java/com/android/dialer/calldetails/res/values-is/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-is/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Sendi mynd"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Tók á móti mynd"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"„<xliff:g id="MESSAGE">%1$s</xliff:g>“"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Tengiliðaupplýsingar um <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-it/strings.xml b/java/com/android/dialer/calldetails/res/values-it/strings.xml
index aef76a451..97af25168 100644
--- a/java/com/android/dialer/calldetails/res/values-it/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-it/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Foto inviata"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Foto ricevuta"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Dettagli contatto <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-iw/strings.xml b/java/com/android/dialer/calldetails/res/values-iw/strings.xml
index 934edd103..329eded62 100644
--- a/java/com/android/dialer/calldetails/res/values-iw/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-iw/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"נשלחה תמונה"</string>
<string name="received_a_photo" msgid="3528953225576480505">"התקבלה תמונה"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"פרטי ההתקשרות של <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-ja/strings.xml b/java/com/android/dialer/calldetails/res/values-ja/strings.xml
index 4c308e081..7aef345fd 100644
--- a/java/com/android/dialer/calldetails/res/values-ja/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-ja/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"写真を送信しました"</string>
<string name="received_a_photo" msgid="3528953225576480505">"写真を受信しました"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"「<xliff:g id="MESSAGE">%1$s</xliff:g>」"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>の連絡先の詳細"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-ka/strings.xml b/java/com/android/dialer/calldetails/res/values-ka/strings.xml
index b181aa485..1cd7bc219 100644
--- a/java/com/android/dialer/calldetails/res/values-ka/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-ka/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"ფოტო გაიგზავნა"</string>
<string name="received_a_photo" msgid="3528953225576480505">"მიღებულია ფოტო"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"„<xliff:g id="MESSAGE">%1$s</xliff:g>“"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-ის საკონტაქტო დეტალები"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-kk/strings.xml b/java/com/android/dialer/calldetails/res/values-kk/strings.xml
index 2608945c6..1923cf79b 100644
--- a/java/com/android/dialer/calldetails/res/values-kk/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-kk/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Сурет жіберілді"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Сурет қабылданды"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> контакт деректері"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-km/strings.xml b/java/com/android/dialer/calldetails/res/values-km/strings.xml
index 045503408..e0472796f 100644
--- a/java/com/android/dialer/calldetails/res/values-km/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-km/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"បានផ្ញើរូបថត"</string>
<string name="received_a_photo" msgid="3528953225576480505">"បាន​ទទួល​រូបថត"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"ព័ត៌មាន​ទំនាក់​ទំនង​លម្អិត​សម្រាប់ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-kn/strings.xml b/java/com/android/dialer/calldetails/res/values-kn/strings.xml
index 0f9e0f860..66c0d6349 100644
--- a/java/com/android/dialer/calldetails/res/values-kn/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-kn/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"ಫೋಟೋ ಕಳುಹಿಸಲಾಗಿದೆ"</string>
<string name="received_a_photo" msgid="3528953225576480505">"ಫೋಟೋ ಸ್ವೀಕರಿಸಲಾಗಿದೆ"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> ಗೆ ಸಂಪರ್ಕ ವಿವರಗಳು"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-ko/strings.xml b/java/com/android/dialer/calldetails/res/values-ko/strings.xml
index aec06cbb6..35c503858 100644
--- a/java/com/android/dialer/calldetails/res/values-ko/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-ko/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"사진 전송됨"</string>
<string name="received_a_photo" msgid="3528953225576480505">"사진 수신됨"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\'<xliff:g id="MESSAGE">%1$s</xliff:g>\'"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>의 연락처 세부정보"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-ky/strings.xml b/java/com/android/dialer/calldetails/res/values-ky/strings.xml
index 2f87e2409..fe37b33bd 100644
--- a/java/com/android/dialer/calldetails/res/values-ky/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-ky/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Сүрөт жөнөтүлдү"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Сүрөт алынды"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> байланыш маалыматтары"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-lo/strings.xml b/java/com/android/dialer/calldetails/res/values-lo/strings.xml
index 864bbf6b9..85b636acd 100644
--- a/java/com/android/dialer/calldetails/res/values-lo/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-lo/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"ສົ່ງຮູບພາບ"</string>
<string name="received_a_photo" msgid="3528953225576480505">"ໄດ້ຮັບຮູບພາບແລ້ວ"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"ລາຍລະອຽດ​ການຕິດຕໍ່​ສຳລັບ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-lt/strings.xml b/java/com/android/dialer/calldetails/res/values-lt/strings.xml
index 084eb5100..9c8ad7b7f 100644
--- a/java/com/android/dialer/calldetails/res/values-lt/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-lt/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Išsiuntė nuotrauką"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Gavo nuotrauką"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"„<xliff:g id="MESSAGE">%1$s</xliff:g>“"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Išsami kontaktinė informacija: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-lv/strings.xml b/java/com/android/dialer/calldetails/res/values-lv/strings.xml
index 53880a638..d8783935b 100644
--- a/java/com/android/dialer/calldetails/res/values-lv/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-lv/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Nosūtīja fotoattēlu"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Saņēma fotoattēlu"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"“<xliff:g id="MESSAGE">%1$s</xliff:g>”"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Kontaktpersonas informācija: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-mk/strings.xml b/java/com/android/dialer/calldetails/res/values-mk/strings.xml
index 394ab2772..9388ae070 100644
--- a/java/com/android/dialer/calldetails/res/values-mk/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-mk/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Испрати фотографија"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Прими фотографија"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"„<xliff:g id="MESSAGE">%1$s</xliff:g>“"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Детали за контакт за <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-ml/strings.xml b/java/com/android/dialer/calldetails/res/values-ml/strings.xml
index 7767ef48c..d29691159 100644
--- a/java/com/android/dialer/calldetails/res/values-ml/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-ml/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"ഒരു ഫോട്ടോ അയച്ചു"</string>
<string name="received_a_photo" msgid="3528953225576480505">"ഒരു ഫോട്ടോ ലഭിച്ചു"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> എന്നതിന്റെ കോൺ‌ടാക്റ്റ് വിശദാംശങ്ങൾ"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-mn/strings.xml b/java/com/android/dialer/calldetails/res/values-mn/strings.xml
index 1a02f1c28..cb264e016 100644
--- a/java/com/android/dialer/calldetails/res/values-mn/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-mn/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Зураг илгээсэн"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Зураг хүлээн авсан"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-н харилцагчийн мэдээлэл"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-mr/strings.xml b/java/com/android/dialer/calldetails/res/values-mr/strings.xml
index d76dec429..5c31e361e 100644
--- a/java/com/android/dialer/calldetails/res/values-mr/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-mr/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"एक फोटो पाठविला"</string>
<string name="received_a_photo" msgid="3528953225576480505">"एक फोटो प्राप्त झाला"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> साठी संपर्क तपशील"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-ms/strings.xml b/java/com/android/dialer/calldetails/res/values-ms/strings.xml
index d9dbfc679..da17d6edb 100644
--- a/java/com/android/dialer/calldetails/res/values-ms/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-ms/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Menghantar foto"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Foto diterima"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Butiran hubungan untuk <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-my/strings.xml b/java/com/android/dialer/calldetails/res/values-my/strings.xml
index dc3cc5ada..75508d8d4 100644
--- a/java/com/android/dialer/calldetails/res/values-my/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-my/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"ဓာတ်ပုံ ပို့လိုက်သည်"</string>
<string name="received_a_photo" msgid="3528953225576480505">"ဓာတ်ပုံ လက်ခံရရှိသည်"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> ၏ အဆက်အသွယ် အသေးစိတ်"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-nb/strings.xml b/java/com/android/dialer/calldetails/res/values-nb/strings.xml
index a391f15c3..022025fa3 100644
--- a/java/com/android/dialer/calldetails/res/values-nb/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-nb/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Et bilde ble sendt"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Et bilde ble mottatt"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"«<xliff:g id="MESSAGE">%1$s</xliff:g>»"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Kontaktinformasjon for <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-ne/strings.xml b/java/com/android/dialer/calldetails/res/values-ne/strings.xml
index 7ceb86660..8fe355ba6 100644
--- a/java/com/android/dialer/calldetails/res/values-ne/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-ne/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"एउटा तस्बिर पठाइयो"</string>
<string name="received_a_photo" msgid="3528953225576480505">"एउटा तस्बिर प्राप्त भयो"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> का सम्पर्क विवरणहरू"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-nl/strings.xml b/java/com/android/dialer/calldetails/res/values-nl/strings.xml
index 449875310..71657b813 100644
--- a/java/com/android/dialer/calldetails/res/values-nl/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-nl/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Foto verzonden"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Foto ontvangen"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\'<xliff:g id="MESSAGE">%1$s</xliff:g>\'"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Contactgegevens voor <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-no/strings.xml b/java/com/android/dialer/calldetails/res/values-no/strings.xml
index a391f15c3..022025fa3 100644
--- a/java/com/android/dialer/calldetails/res/values-no/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-no/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Et bilde ble sendt"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Et bilde ble mottatt"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"«<xliff:g id="MESSAGE">%1$s</xliff:g>»"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Kontaktinformasjon for <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-pa/strings.xml b/java/com/android/dialer/calldetails/res/values-pa/strings.xml
index 9bf3ed016..d4f175943 100644
--- a/java/com/android/dialer/calldetails/res/values-pa/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-pa/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"ਇੱਕ ਫ਼ੋਟੋ ਭੇਜੀ ਗਈ"</string>
<string name="received_a_photo" msgid="3528953225576480505">"ਇੱਕ ਫ਼ੋਟੋ ਪ੍ਰਾਪਤ ਹੋਈ"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> ਲਈ ਸੰਪਰਕ ਵੇਰਵੇ"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-pl/strings.xml b/java/com/android/dialer/calldetails/res/values-pl/strings.xml
index 55cc159a6..96446005d 100644
--- a/java/com/android/dialer/calldetails/res/values-pl/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-pl/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Wysłano zdjęcie"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Odebrano zdjęcie"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"„<xliff:g id="MESSAGE">%1$s</xliff:g>”"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Informacje kontaktowe: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-pt-rBR/strings.xml b/java/com/android/dialer/calldetails/res/values-pt-rBR/strings.xml
index 6dd975057..467973d55 100644
--- a/java/com/android/dialer/calldetails/res/values-pt-rBR/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-pt-rBR/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Enviou uma foto"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Recebeu uma foto"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Detalhes de contato para <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-pt-rPT/strings.xml b/java/com/android/dialer/calldetails/res/values-pt-rPT/strings.xml
index 01726342b..cfbbc0240 100644
--- a/java/com/android/dialer/calldetails/res/values-pt-rPT/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-pt-rPT/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Enviou uma foto"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Recebeu uma foto"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Detalhes de contacto de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-pt/strings.xml b/java/com/android/dialer/calldetails/res/values-pt/strings.xml
index 6dd975057..467973d55 100644
--- a/java/com/android/dialer/calldetails/res/values-pt/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-pt/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Enviou uma foto"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Recebeu uma foto"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Detalhes de contato para <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-ro/strings.xml b/java/com/android/dialer/calldetails/res/values-ro/strings.xml
index 7d0eec922..e9281ae66 100644
--- a/java/com/android/dialer/calldetails/res/values-ro/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-ro/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"A fost trimisă o fotografie."</string>
<string name="received_a_photo" msgid="3528953225576480505">"A fost primită o fotografie."</string>
<string name="message_in_quotes" msgid="3270574830115828365">"„<xliff:g id="MESSAGE">%1$s</xliff:g>”"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Detalii de contact pentru <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-ru/strings.xml b/java/com/android/dialer/calldetails/res/values-ru/strings.xml
index 7ce2a9b06..bf981e293 100644
--- a/java/com/android/dialer/calldetails/res/values-ru/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-ru/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Отправлена фотография"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Получена фотография"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Сведения о контакте <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-si/strings.xml b/java/com/android/dialer/calldetails/res/values-si/strings.xml
index a2dfc36ed..5fdca0d52 100644
--- a/java/com/android/dialer/calldetails/res/values-si/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-si/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"ඡායාරූපයක් යැවිණි"</string>
<string name="received_a_photo" msgid="3528953225576480505">"ඡායාරූපයක් ලැබිණි"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> සඳහා සම්බන්ධතා විස්තර"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-sk/strings.xml b/java/com/android/dialer/calldetails/res/values-sk/strings.xml
index 4c6e68d49..db0478713 100644
--- a/java/com/android/dialer/calldetails/res/values-sk/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-sk/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Bola odoslaná fotka"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Bola prijatá fotka"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"„<xliff:g id="MESSAGE">%1$s</xliff:g>“"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> – podrobnosti kontaktu"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-sl/strings.xml b/java/com/android/dialer/calldetails/res/values-sl/strings.xml
index 7ff432254..98975f406 100644
--- a/java/com/android/dialer/calldetails/res/values-sl/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-sl/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Poslana fotografija"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Prejeta fotografija"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"»<xliff:g id="MESSAGE">%1$s</xliff:g>«"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Podrobnosti stika za <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-sq/strings.xml b/java/com/android/dialer/calldetails/res/values-sq/strings.xml
index cd90c5cb4..dd9915da5 100644
--- a/java/com/android/dialer/calldetails/res/values-sq/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-sq/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"U dërgua një fotografi"</string>
<string name="received_a_photo" msgid="3528953225576480505">"U mor një fotografi"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Detajet e kontaktit për <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-sr/strings.xml b/java/com/android/dialer/calldetails/res/values-sr/strings.xml
index cdb68350f..7f4005d78 100644
--- a/java/com/android/dialer/calldetails/res/values-sr/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-sr/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Слика је послата"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Слика је примљена"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"„<xliff:g id="MESSAGE">%1$s</xliff:g>“"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Контакт информације за <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-sv/strings.xml b/java/com/android/dialer/calldetails/res/values-sv/strings.xml
index b33a46800..3967b4ff3 100644
--- a/java/com/android/dialer/calldetails/res/values-sv/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-sv/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Skickade ett foto"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Tog emot ett foto"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"<xliff:g id="MESSAGE">%1$s</xliff:g>"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Kontaktuppgifter för <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-sw/strings.xml b/java/com/android/dialer/calldetails/res/values-sw/strings.xml
index 976d1f890..e5df8230a 100644
--- a/java/com/android/dialer/calldetails/res/values-sw/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-sw/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Picha imetumwa"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Picha imepokelewa"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Maelezo ya <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-ta/strings.xml b/java/com/android/dialer/calldetails/res/values-ta/strings.xml
index abff58fd8..840ad8790 100644
--- a/java/com/android/dialer/calldetails/res/values-ta/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-ta/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"படம் அனுப்பப்பட்டது"</string>
<string name="received_a_photo" msgid="3528953225576480505">"படம் பெறப்பட்டது"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>க்கான தொடர்பு விவரங்கள்"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-te/strings.xml b/java/com/android/dialer/calldetails/res/values-te/strings.xml
index 9a098005e..3054444ac 100644
--- a/java/com/android/dialer/calldetails/res/values-te/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-te/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"ఫోటో పంపబడింది"</string>
<string name="received_a_photo" msgid="3528953225576480505">"ఫోటో స్వీకరించబడింది"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> యొక్క సంప్రదింపు వివరాలు"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-th/strings.xml b/java/com/android/dialer/calldetails/res/values-th/strings.xml
index aacebbb44..e22aec76d 100644
--- a/java/com/android/dialer/calldetails/res/values-th/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-th/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"ส่งรูปภาพแล้ว"</string>
<string name="received_a_photo" msgid="3528953225576480505">"ได้รับรูปภาพแล้ว"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"รายละเอียดรายชื่อติดต่อ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-tl/strings.xml b/java/com/android/dialer/calldetails/res/values-tl/strings.xml
index 74ec6bf9a..81c148e6b 100644
--- a/java/com/android/dialer/calldetails/res/values-tl/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-tl/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Nagpadala ng larawan"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Nakatanggap ng larawan"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Mga detalye sa pakikipag-ugnayan para kay/sa <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-tr/strings.xml b/java/com/android/dialer/calldetails/res/values-tr/strings.xml
index 35a5ecffd..ade401843 100644
--- a/java/com/android/dialer/calldetails/res/values-tr/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-tr/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Bir fotoğraf gönderildi"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Bir fotoğraf alındı"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> için kişi ayrıntıları"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-uk/strings.xml b/java/com/android/dialer/calldetails/res/values-uk/strings.xml
index 6ef6fc2a1..6538d664d 100644
--- a/java/com/android/dialer/calldetails/res/values-uk/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-uk/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Надіслано фотографію"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Отримано фотографію"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Відомості про контакт <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-ur/strings.xml b/java/com/android/dialer/calldetails/res/values-ur/strings.xml
index 8188abeba..90c3a590a 100644
--- a/java/com/android/dialer/calldetails/res/values-ur/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-ur/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"ایک تصویر بھیجی"</string>
<string name="received_a_photo" msgid="3528953225576480505">"ایک تصویر موصول ہوئی"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> کیلئے رابطہ کی تفصیلات"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-uz/strings.xml b/java/com/android/dialer/calldetails/res/values-uz/strings.xml
index 91f2a70ac..7b443ca2e 100644
--- a/java/com/android/dialer/calldetails/res/values-uz/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-uz/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Rasm yuborildi"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Rasm qabul qilindi"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"“<xliff:g id="MESSAGE">%1$s</xliff:g>”"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> kontakt ma’lumotlari"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-vi/strings.xml b/java/com/android/dialer/calldetails/res/values-vi/strings.xml
index 7446e23aa..7a950216d 100644
--- a/java/com/android/dialer/calldetails/res/values-vi/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-vi/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Đã gửi một ảnh"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Đã nhận một ảnh"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Chi tiết liên hệ cho <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-zh-rCN/strings.xml b/java/com/android/dialer/calldetails/res/values-zh-rCN/strings.xml
index c083136d3..aad695a73 100644
--- a/java/com/android/dialer/calldetails/res/values-zh-rCN/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-zh-rCN/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"发送了一张照片"</string>
<string name="received_a_photo" msgid="3528953225576480505">"收到了一张照片"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"“<xliff:g id="MESSAGE">%1$s</xliff:g>”"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>的详细联系信息"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-zh-rHK/strings.xml b/java/com/android/dialer/calldetails/res/values-zh-rHK/strings.xml
index a7cbe9038..eb5b606b7 100644
--- a/java/com/android/dialer/calldetails/res/values-zh-rHK/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-zh-rHK/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"已傳送相片"</string>
<string name="received_a_photo" msgid="3528953225576480505">"已收到相片"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"「<xliff:g id="MESSAGE">%1$s</xliff:g>」"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」的聯絡人詳細資料"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-zh-rTW/strings.xml b/java/com/android/dialer/calldetails/res/values-zh-rTW/strings.xml
index 3f2b3822b..fd426c0fa 100644
--- a/java/com/android/dialer/calldetails/res/values-zh-rTW/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-zh-rTW/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"傳送了 1 張相片"</string>
<string name="received_a_photo" msgid="3528953225576480505">"收到了 1 張相片"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"「<xliff:g id="MESSAGE">%1$s</xliff:g>」"</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」的聯絡詳細資料"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values-zu/strings.xml b/java/com/android/dialer/calldetails/res/values-zu/strings.xml
index a4fe447a7..d41d1f5cb 100644
--- a/java/com/android/dialer/calldetails/res/values-zu/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-zu/strings.xml
@@ -25,4 +25,5 @@
<string name="sent_a_photo" msgid="3978670717462979502">"Uthumele isithombe"</string>
<string name="received_a_photo" msgid="3528953225576480505">"Uthole isithombe"</string>
<string name="message_in_quotes" msgid="3270574830115828365">"\"<xliff:g id="MESSAGE">%1$s</xliff:g>\""</string>
+ <string name="description_contact_photo_details" msgid="3035869307063629315">"Imininingwane yokuxhumana ka-<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calldetails/res/values/dimens.xml b/java/com/android/dialer/calldetails/res/values/dimens.xml
index 2ca7ea83a..054cd6975 100644
--- a/java/com/android/dialer/calldetails/res/values/dimens.xml
+++ b/java/com/android/dialer/calldetails/res/values/dimens.xml
@@ -20,10 +20,12 @@
<dimen name="call_details_top_margin">6dp</dimen>
<!-- contact container -->
- <dimen name="contact_container_padding">16dp</dimen>
- <dimen name="call_details_contact_photo_size">40dp</dimen>
- <dimen name="photo_text_margin">16dp</dimen>
- <dimen name="call_back_button_size">24dp</dimen>
+ <dimen name="contact_container_padding_bottom_end">16dp</dimen>
+ <dimen name="contact_container_padding_top_start">12dp</dimen>
+ <dimen name="call_details_contact_photo_size">48dp</dimen>
+ <dimen name="call_details_contact_photo_padding">4dp</dimen>
+ <dimen name="photo_text_margin">12dp</dimen>
+ <dimen name="call_back_button_size">48dp</dimen>
<!-- call entry container -->
<dimen name="call_entry_icon_size">24dp</dimen>
diff --git a/java/com/android/dialer/calldetails/res/values/strings.xml b/java/com/android/dialer/calldetails/res/values/strings.xml
index 8a7cc4cfc..4471605f6 100644
--- a/java/com/android/dialer/calldetails/res/values/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values/strings.xml
@@ -39,4 +39,11 @@
<!-- Messages shown to the user are wrapped in quotes, e.g. the user would see "Some text" -->
<string name="message_in_quotes">\"<xliff:g id="message">%1$s</xliff:g>\"</string>
+
+ <!-- String describing the button to access the contact details for a name or number.
+
+ Note: AccessibilityServices use this attribute to announce what the view represents.
+ This is especially valuable for views without textual representation like ImageView.
+ -->
+ <string name="description_contact_photo_details">Contact details for <xliff:g id="nameOrNumber">%1$s</xliff:g></string>
</resources>
diff --git a/java/com/android/dialer/callintent/CallIntentBuilder.java b/java/com/android/dialer/callintent/CallIntentBuilder.java
index a2fb564ab..6066f6654 100644
--- a/java/com/android/dialer/callintent/CallIntentBuilder.java
+++ b/java/com/android/dialer/callintent/CallIntentBuilder.java
@@ -26,8 +26,6 @@ import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
import android.telecom.VideoProfile;
import android.text.TextUtils;
-import com.android.dialer.callintent.nano.CallInitiationType;
-import com.android.dialer.callintent.nano.CallSpecificAppData;
import com.android.dialer.common.Assert;
import com.android.dialer.util.CallUtil;
@@ -43,10 +41,10 @@ public class CallIntentBuilder {
this.uri = Assert.isNotNull(uri);
this.callSpecificAppData = Assert.isNotNull(callSpecificAppData);
Assert.checkArgument(
- callSpecificAppData.callInitiationType != CallInitiationType.Type.UNKNOWN_INITIATION);
+ callSpecificAppData.getCallInitiationType() != CallInitiationType.Type.UNKNOWN_INITIATION);
}
- public CallIntentBuilder(@NonNull Uri uri, int callInitiationType) {
+ public CallIntentBuilder(@NonNull Uri uri, CallInitiationType.Type callInitiationType) {
this(uri, createCallSpecificAppData(callInitiationType));
}
@@ -55,7 +53,7 @@ public class CallIntentBuilder {
this(CallUtil.getCallUri(Assert.isNotNull(number)), callSpecificAppData);
}
- public CallIntentBuilder(@NonNull String number, int callInitiationType) {
+ public CallIntentBuilder(@NonNull String number, CallInitiationType.Type callInitiationType) {
this(CallUtil.getCallUri(Assert.isNotNull(number)), callInitiationType);
}
@@ -100,9 +98,10 @@ public class CallIntentBuilder {
return intent;
}
- private static @NonNull CallSpecificAppData createCallSpecificAppData(int callInitiationType) {
- CallSpecificAppData callSpecificAppData = new CallSpecificAppData();
- callSpecificAppData.callInitiationType = callInitiationType;
+ private static @NonNull CallSpecificAppData createCallSpecificAppData(
+ CallInitiationType.Type callInitiationType) {
+ CallSpecificAppData callSpecificAppData =
+ CallSpecificAppData.newBuilder().setCallInitiationType(callInitiationType).build();
return callSpecificAppData;
}
}
diff --git a/java/com/android/dialer/callintent/CallIntentParser.java b/java/com/android/dialer/callintent/CallIntentParser.java
index 40c8ee348..b54f7c78b 100644
--- a/java/com/android/dialer/callintent/CallIntentParser.java
+++ b/java/com/android/dialer/callintent/CallIntentParser.java
@@ -19,10 +19,8 @@ package com.android.dialer.callintent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-import com.android.dialer.callintent.nano.CallSpecificAppData;
import com.android.dialer.common.Assert;
-import com.google.protobuf.nano.InvalidProtocolBufferNanoException;
-import com.google.protobuf.nano.MessageNano;
+import com.google.protobuf.InvalidProtocolBufferException;
/** Parses data for a call extra to get any dialer specific app data. */
public class CallIntentParser {
@@ -38,7 +36,7 @@ public class CallIntentParser {
}
try {
return CallSpecificAppData.parseFrom(flatArray);
- } catch (InvalidProtocolBufferNanoException e) {
+ } catch (InvalidProtocolBufferException e) {
Assert.fail("unexpected exception: " + e);
return null;
}
@@ -46,8 +44,7 @@ public class CallIntentParser {
public static void putCallSpecificAppData(
@NonNull Bundle extras, @NonNull CallSpecificAppData callSpecificAppData) {
- extras.putByteArray(
- Constants.EXTRA_CALL_SPECIFIC_APP_DATA, MessageNano.toByteArray(callSpecificAppData));
+ extras.putByteArray(Constants.EXTRA_CALL_SPECIFIC_APP_DATA, callSpecificAppData.toByteArray());
}
private CallIntentParser() {}
diff --git a/java/com/android/dialer/callintent/call_initiation_type.proto b/java/com/android/dialer/callintent/call_initiation_type.proto
new file mode 100644
index 000000000..994399fd9
--- /dev/null
+++ b/java/com/android/dialer/callintent/call_initiation_type.proto
@@ -0,0 +1,60 @@
+syntax = "proto2";
+
+option java_package = "com.android.dialer.callintent";
+option java_multiple_files = true;
+option optimize_for = LITE_RUNTIME;
+
+package com.android.dialer.callintent;
+
+
+// Different ways a call can be initiated.
+message CallInitiationType {
+ enum Type {
+ // Initiation type unknown
+ UNKNOWN_INITIATION = 0;
+
+ // Incoming call initiated by Telecom.
+ INCOMING_INITIATION = 1;
+
+ DIALPAD = 2;
+
+ SPEED_DIAL = 3;
+
+ REMOTE_DIRECTORY = 4;
+
+ // Call placed via a search result returned by typing into the dialpad.
+ SMART_DIAL = 5;
+
+ // Call placed via a search result returned by typing into the search box.
+ REGULAR_SEARCH = 6;
+
+ // Call placed via the call log fragment displayed in the main Dialer
+ // activity.
+ CALL_LOG = 7;
+
+ // Call placed via a call log fragment displaying a filtered list of
+ // voicemails.
+ CALL_LOG_FILTER = 8;
+
+ // Call placed via the call log fragment containing voicemails only.
+ VOICEMAIL_LOG = 9;
+
+ // Call placed via the call details screen
+ CALL_DETAILS = 10;
+
+ // Call placed via the quick contacts card
+ QUICK_CONTACTS = 11;
+
+ // Call was placed from outside the Dialer (e.g. CALL intent sent
+ // via third party app)
+ EXTERNAL_INITIATION = 12;
+
+ LAUNCHER_SHORTCUT = 13;
+
+ CALL_COMPOSER = 14;
+
+ MISSED_CALL_NOTIFICATION = 15;
+
+ CALL_SUBJECT_DIALOG = 16;
+ }
+}
diff --git a/java/com/android/dialer/callintent/call_specific_app_data.proto b/java/com/android/dialer/callintent/call_specific_app_data.proto
new file mode 100644
index 000000000..20ffc1ff4
--- /dev/null
+++ b/java/com/android/dialer/callintent/call_specific_app_data.proto
@@ -0,0 +1,20 @@
+syntax = "proto2";
+
+option java_package = "com.android.dialer.callintent";
+option java_multiple_files = true;
+option optimize_for = LITE_RUNTIME;
+
+package com.android.dialer.callintent;
+
+import "java/com/android/dialer/callintent/call_initiation_type.proto";
+
+// Miscellaneous data that's included in a new outgoing call initiated by
+// Dialer. The system will pass this data to the InCallUi which can use it
+// for logging or for something else.
+message CallSpecificAppData {
+ optional CallInitiationType.Type call_initiation_type = 1;
+
+ optional int32 position_of_selected_search_result = 2;
+
+ optional int32 characters_in_search_string = 3;
+}
diff --git a/java/com/android/dialer/callintent/nano/CallInitiationType.java b/java/com/android/dialer/callintent/nano/CallInitiationType.java
deleted file mode 100644
index 1dddb6ce8..000000000
--- a/java/com/android/dialer/callintent/nano/CallInitiationType.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Generated by the protocol buffer compiler. DO NOT EDIT!
-
-package com.android.dialer.callintent.nano;
-
-/** This file is autogenerated, but javadoc required. */
-@SuppressWarnings("hiding")
-public final class CallInitiationType
- extends com.google.protobuf.nano.ExtendableMessageNano<CallInitiationType> {
-
- /** This file is autogenerated, but javadoc required. */
- // enum Type
- public interface Type {
- public static final int UNKNOWN_INITIATION = 0;
- public static final int INCOMING_INITIATION = 1;
- public static final int DIALPAD = 2;
- public static final int SPEED_DIAL = 3;
- public static final int REMOTE_DIRECTORY = 4;
- public static final int SMART_DIAL = 5;
- public static final int REGULAR_SEARCH = 6;
- public static final int CALL_LOG = 7;
- public static final int CALL_LOG_FILTER = 8;
- public static final int VOICEMAIL_LOG = 9;
- public static final int CALL_DETAILS = 10;
- public static final int QUICK_CONTACTS = 11;
- public static final int EXTERNAL_INITIATION = 12;
- public static final int LAUNCHER_SHORTCUT = 13;
- public static final int CALL_COMPOSER = 14;
- public static final int MISSED_CALL_NOTIFICATION = 15;
- public static final int CALL_SUBJECT_DIALOG = 16;
- }
-
- private static volatile CallInitiationType[] _emptyArray;
-
- public static CallInitiationType[] emptyArray() {
- // Lazily initializes the empty array
- if (_emptyArray == null) {
- synchronized (com.google.protobuf.nano.InternalNano.LAZY_INIT_LOCK) {
- if (_emptyArray == null) {
- _emptyArray = new CallInitiationType[0];
- }
- }
- }
- return _emptyArray;
- }
-
- // @@protoc_insertion_point(class_scope:com.android.dialer.callintent.CallInitiationType)
-
- public CallInitiationType() {
- clear();
- }
-
- public CallInitiationType clear() {
- unknownFieldData = null;
- cachedSize = -1;
- return this;
- }
-
- @Override
- public CallInitiationType mergeFrom(com.google.protobuf.nano.CodedInputByteBufferNano input)
- throws java.io.IOException {
- while (true) {
- int tag = input.readTag();
- switch (tag) {
- case 0:
- return this;
- default:
- {
- if (!super.storeUnknownField(input, tag)) {
- return this;
- }
- break;
- }
- }
- }
- }
-
- public static CallInitiationType parseFrom(byte[] data)
- throws com.google.protobuf.nano.InvalidProtocolBufferNanoException {
- return com.google.protobuf.nano.MessageNano.mergeFrom(new CallInitiationType(), data);
- }
-
- public static CallInitiationType parseFrom(
- com.google.protobuf.nano.CodedInputByteBufferNano input) throws java.io.IOException {
- return new CallInitiationType().mergeFrom(input);
- }
-}
diff --git a/java/com/android/dialer/callintent/nano/CallSpecificAppData.java b/java/com/android/dialer/callintent/nano/CallSpecificAppData.java
deleted file mode 100644
index fd00b0a68..000000000
--- a/java/com/android/dialer/callintent/nano/CallSpecificAppData.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Generated by the protocol buffer compiler. DO NOT EDIT!
-
-package com.android.dialer.callintent.nano;
-
-/** This file is autogenerated, but javadoc required. */
-@SuppressWarnings("hiding")
-public final class CallSpecificAppData
- extends com.google.protobuf.nano.ExtendableMessageNano<CallSpecificAppData> {
-
- private static volatile CallSpecificAppData[] _emptyArray;
-
- public static CallSpecificAppData[] emptyArray() {
- // Lazily initializes the empty array
- if (_emptyArray == null) {
- synchronized (com.google.protobuf.nano.InternalNano.LAZY_INIT_LOCK) {
- if (_emptyArray == null) {
- _emptyArray = new CallSpecificAppData[0];
- }
- }
- }
- return _emptyArray;
- }
-
- // optional int32 call_initiation_type = 1;
- public int callInitiationType;
-
- // optional int32 position_of_selected_search_result = 2;
- public int positionOfSelectedSearchResult;
-
- // optional int32 characters_in_search_string = 3;
- public int charactersInSearchString;
-
- // @@protoc_insertion_point(class_scope:com.android.dialer.callintent.CallSpecificAppData)
-
- public CallSpecificAppData() {
- clear();
- }
-
- public CallSpecificAppData clear() {
- callInitiationType = 0;
- positionOfSelectedSearchResult = 0;
- charactersInSearchString = 0;
- unknownFieldData = null;
- cachedSize = -1;
- return this;
- }
-
- @Override
- public void writeTo(com.google.protobuf.nano.CodedOutputByteBufferNano output)
- throws java.io.IOException {
- if (this.callInitiationType != 0) {
- output.writeInt32(1, this.callInitiationType);
- }
- if (this.positionOfSelectedSearchResult != 0) {
- output.writeInt32(2, this.positionOfSelectedSearchResult);
- }
- if (this.charactersInSearchString != 0) {
- output.writeInt32(3, this.charactersInSearchString);
- }
- super.writeTo(output);
- }
-
- @Override
- protected int computeSerializedSize() {
- int size = super.computeSerializedSize();
- if (this.callInitiationType != 0) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeInt32Size(
- 1, this.callInitiationType);
- }
- if (this.positionOfSelectedSearchResult != 0) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeInt32Size(
- 2, this.positionOfSelectedSearchResult);
- }
- if (this.charactersInSearchString != 0) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeInt32Size(
- 3, this.charactersInSearchString);
- }
- return size;
- }
-
- @Override
- public CallSpecificAppData mergeFrom(com.google.protobuf.nano.CodedInputByteBufferNano input)
- throws java.io.IOException {
- while (true) {
- int tag = input.readTag();
- switch (tag) {
- case 0:
- return this;
- default:
- {
- if (!super.storeUnknownField(input, tag)) {
- return this;
- }
- break;
- }
- case 8:
- {
- this.callInitiationType = input.readInt32();
- break;
- }
- case 16:
- {
- this.positionOfSelectedSearchResult = input.readInt32();
- break;
- }
- case 24:
- {
- this.charactersInSearchString = input.readInt32();
- break;
- }
- }
- }
- }
-
- public static CallSpecificAppData parseFrom(byte[] data)
- throws com.google.protobuf.nano.InvalidProtocolBufferNanoException {
- return com.google.protobuf.nano.MessageNano.mergeFrom(new CallSpecificAppData(), data);
- }
-
- public static CallSpecificAppData parseFrom(
- com.google.protobuf.nano.CodedInputByteBufferNano input) throws java.io.IOException {
- return new CallSpecificAppData().mergeFrom(input);
- }
-}
diff --git a/java/com/android/dialer/calllog/CallLogComponent.java b/java/com/android/dialer/calllog/CallLogComponent.java
new file mode 100644
index 000000000..5cdd2b4d0
--- /dev/null
+++ b/java/com/android/dialer/calllog/CallLogComponent.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+package com.android.dialer.calllog;
+
+import android.content.Context;
+import com.android.dialer.inject.HasRootComponent;
+import dagger.Subcomponent;
+
+/** Dagger component for the call log package. */
+@Subcomponent
+public abstract class CallLogComponent {
+
+ public abstract CallLogFramework callLogFramework();
+
+ public static CallLogComponent get(Context context) {
+ return ((HasComponent) ((HasRootComponent) context.getApplicationContext()).component())
+ .callLogComponent();
+ }
+
+ /** Used to refer to the root application component. */
+ public interface HasComponent {
+ CallLogComponent callLogComponent();
+ }
+}
diff --git a/java/com/android/dialer/calllog/CallLogFramework.java b/java/com/android/dialer/calllog/CallLogFramework.java
new file mode 100644
index 000000000..508413b14
--- /dev/null
+++ b/java/com/android/dialer/calllog/CallLogFramework.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.dialer.calllog;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+import android.support.annotation.MainThread;
+import android.support.annotation.Nullable;
+import com.android.dialer.calllog.datasources.CallLogDataSource;
+import com.android.dialer.common.Assert;
+import com.android.dialer.common.ConfigProviderBindings;
+import com.android.dialer.common.LogUtil;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+/**
+ * Coordinates work across CallLog data sources to detect if the annotated call log is out of date
+ * ("dirty") and update it if necessary.
+ *
+ * <p>All methods should be called on the main thread.
+ */
+@Singleton
+public final class CallLogFramework implements CallLogDataSource.ContentObserverCallbacks {
+
+ static final String PREF_FORCE_REBUILD = "callLogFrameworkForceRebuild";
+ static final String PREF_LAST_REBUILD_TIMESTAMP_MILLIS = "callLogFrameworkLastRebuild";
+
+ private final DataSources dataSources;
+
+ @Nullable private CallLogUi ui;
+
+ @Inject
+ CallLogFramework(DataSources dataSources) {
+ this.dataSources = dataSources;
+ }
+
+ public boolean isNewCallLogEnabled(Context context) {
+ return ConfigProviderBindings.get(context).getBoolean("enable_new_call_log_tab", false);
+ }
+
+ /** Registers the content observers for all data sources. */
+ public void registerContentObservers(Context appContext) {
+ LogUtil.enterBlock("CallLogFramework.registerContentObservers");
+
+ if (!isNewCallLogEnabled(appContext)) {
+ return;
+ }
+
+ for (CallLogDataSource dataSource : dataSources.getDataSourcesIncludingSystemCallLog()) {
+ dataSource.registerContentObservers(appContext, this);
+ }
+ }
+
+ /**
+ * Attach a UI component to the framework so that it may be notified of changes to the annotated
+ * call log.
+ */
+ public void attachUi(CallLogUi ui) {
+ LogUtil.enterBlock("CallLogFramework.attachUi");
+ this.ui = ui;
+ }
+
+ /**
+ * Detaches the UI from the framework. This should be called when the UI is hidden or destroyed
+ * and no longer needs to be notified of changes to the annotated call log.
+ */
+ public void detachUi() {
+ LogUtil.enterBlock("CallLogFramework.detachUi");
+ this.ui = null;
+ }
+
+ /**
+ * Marks the call log as dirty and notifies any attached UI components. If there are no UI
+ * components currently attached, this is an efficient operation since it is just writing a shared
+ * pref.
+ *
+ * <p>We don't want to actually force a rebuild when there is no UI running because we don't want
+ * to be constantly rebuilding the database when the device is sitting on a desk and receiving a
+ * lot of calls, for example.
+ */
+ @Override
+ @MainThread
+ public void markDirtyAndNotify(Context appContext) {
+ Assert.isMainThread();
+ LogUtil.enterBlock("CallLogFramework.markDirtyAndNotify");
+
+ SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(appContext);
+ sharedPreferences.edit().putBoolean(PREF_FORCE_REBUILD, true).apply();
+
+ if (ui != null) {
+ ui.invalidateUi();
+ }
+ }
+
+ /** Callbacks invoked on listening UI components. */
+ public interface CallLogUi {
+
+ /** Notifies the call log UI that the annotated call log is out of date. */
+ @MainThread
+ void invalidateUi();
+ }
+}
diff --git a/java/com/android/dialer/calllog/CallLogModule.java b/java/com/android/dialer/calllog/CallLogModule.java
new file mode 100644
index 000000000..d7473a75e
--- /dev/null
+++ b/java/com/android/dialer/calllog/CallLogModule.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.dialer.calllog;
+
+import com.android.dialer.calllog.datasources.CallLogDataSource;
+import com.android.dialer.calllog.datasources.contacts.ContactsDataSource;
+import com.android.dialer.calllog.datasources.systemcalllog.SystemCallLogDataSource;
+import com.android.dialer.common.concurrent.DefaultDialerExecutorFactory;
+import com.android.dialer.common.concurrent.DialerExecutorFactory;
+import dagger.Binds;
+import dagger.Module;
+import dagger.Provides;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/** Dagger module which satisfies call log dependencies. */
+@Module
+public abstract class CallLogModule {
+
+ @Binds
+ abstract DialerExecutorFactory bindDialerExecutorFactory(
+ DefaultDialerExecutorFactory defaultDialerExecutorFactory);
+
+ @Provides
+ static DataSources provideCallLogDataSources(
+ SystemCallLogDataSource systemCallLogDataSource, ContactsDataSource contactsDataSource) {
+ // System call log must be first, see getDataSourcesExcludingSystemCallLog below.
+ List<CallLogDataSource> allDataSources =
+ Collections.unmodifiableList(Arrays.asList(systemCallLogDataSource, contactsDataSource));
+ return new DataSources() {
+ @Override
+ public SystemCallLogDataSource getSystemCallLogDataSource() {
+ return systemCallLogDataSource;
+ }
+
+ @Override
+ public List<CallLogDataSource> getDataSourcesIncludingSystemCallLog() {
+ return allDataSources;
+ }
+
+ @Override
+ public List<CallLogDataSource> getDataSourcesExcludingSystemCallLog() {
+ return allDataSources.subList(1, allDataSources.size());
+ }
+ };
+ }
+}
diff --git a/java/com/android/dialer/calllog/DataSources.java b/java/com/android/dialer/calllog/DataSources.java
new file mode 100644
index 000000000..21d190167
--- /dev/null
+++ b/java/com/android/dialer/calllog/DataSources.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.dialer.calllog;
+
+import com.android.dialer.calllog.datasources.CallLogDataSource;
+import com.android.dialer.calllog.datasources.systemcalllog.SystemCallLogDataSource;
+import java.util.List;
+
+/** Immutable lists of data sources used to populate the annotated call log. */
+interface DataSources {
+
+ SystemCallLogDataSource getSystemCallLogDataSource();
+
+ List<CallLogDataSource> getDataSourcesIncludingSystemCallLog();
+
+ List<CallLogDataSource> getDataSourcesExcludingSystemCallLog();
+}
diff --git a/java/com/android/dialer/calllog/RefreshAnnotatedCallLogWorker.java b/java/com/android/dialer/calllog/RefreshAnnotatedCallLogWorker.java
new file mode 100644
index 000000000..f9f0c9935
--- /dev/null
+++ b/java/com/android/dialer/calllog/RefreshAnnotatedCallLogWorker.java
@@ -0,0 +1,183 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.dialer.calllog;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.database.sqlite.SQLiteDatabase;
+import android.os.Build;
+import android.preference.PreferenceManager;
+import android.support.annotation.WorkerThread;
+import com.android.dialer.calllog.database.AnnotatedCallLog;
+import com.android.dialer.calllog.database.CallLogMutations;
+import com.android.dialer.calllog.datasources.CallLogDataSource;
+import com.android.dialer.common.Assert;
+import com.android.dialer.common.LogUtil;
+import com.android.dialer.common.concurrent.DialerExecutor.Worker;
+import javax.inject.Inject;
+
+/**
+ * Worker which brings the annotated call log up to date, if necessary.
+ *
+ * <p>Accepts a boolean which indicates if the dirty check should be skipped, and returns true if
+ * the annotated call log was updated.
+ */
+public class RefreshAnnotatedCallLogWorker implements Worker<Boolean, Boolean> {
+
+ private final Context appContext;
+ private final DataSources dataSources;
+
+ @Inject
+ public RefreshAnnotatedCallLogWorker(Context appContext, DataSources dataSources) {
+ this.appContext = appContext;
+ this.dataSources = dataSources;
+ }
+
+ @Override
+ public Boolean doInBackground(Boolean skipDirtyCheck) {
+ LogUtil.enterBlock("RefreshAnnotatedCallLogWorker.doInBackgroundFallible");
+
+ long startTime = System.currentTimeMillis();
+ boolean annotatedCallLogUpdated = checkDirtyAndRebuildIfNecessary(appContext, skipDirtyCheck);
+ LogUtil.i(
+ "RefreshAnnotatedCallLogWorker.doInBackgroundFallible",
+ "updated? %s, took %dms",
+ annotatedCallLogUpdated,
+ System.currentTimeMillis() - startTime);
+ return annotatedCallLogUpdated;
+ }
+
+ @WorkerThread
+ private boolean checkDirtyAndRebuildIfNecessary(Context appContext, boolean skipDirtyCheck) {
+ Assert.isWorkerThread();
+
+ long startTime = System.currentTimeMillis();
+
+ SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(appContext);
+ long lastRebuildTimeMillis =
+ sharedPreferences.getLong(CallLogFramework.PREF_LAST_REBUILD_TIMESTAMP_MILLIS, 0);
+ if (lastRebuildTimeMillis == 0) {
+ LogUtil.i(
+ "RefreshAnnotatedCallLogWorker.checkDirtyAndRebuildIfNecessary",
+ "annotated call log has never been built, marking it dirty");
+ }
+ boolean forceRebuildPrefValue =
+ sharedPreferences.getBoolean(CallLogFramework.PREF_FORCE_REBUILD, false);
+ if (forceRebuildPrefValue) {
+ LogUtil.i(
+ "RefreshAnnotatedCallLogWorker.checkDirtyAndRebuildIfNecessary",
+ "call log has been marked dirty");
+ }
+
+ boolean isDirty =
+ lastRebuildTimeMillis == 0
+ || skipDirtyCheck
+ || forceRebuildPrefValue
+ || isDirty(appContext);
+ LogUtil.i(
+ "RefreshAnnotatedCallLogWorker.checkDirtyAndRebuildIfNecessary",
+ "isDirty took: %dms",
+ System.currentTimeMillis() - startTime);
+ if (isDirty) {
+ startTime = System.currentTimeMillis();
+ rebuild(appContext, lastRebuildTimeMillis);
+ LogUtil.i(
+ "RefreshAnnotatedCallLogWorker.checkDirtyAndRebuildIfNecessary",
+ "rebuild took: %dms",
+ System.currentTimeMillis() - startTime);
+ return true; // Annotated call log was updated.
+ }
+ return false; // Annotated call log was not updated.
+ }
+
+ @WorkerThread
+ private boolean isDirty(Context appContext) {
+ Assert.isWorkerThread();
+
+ for (CallLogDataSource dataSource : dataSources.getDataSourcesIncludingSystemCallLog()) {
+ String dataSourceName = getName(dataSource);
+ long startTime = System.currentTimeMillis();
+ LogUtil.i("RefreshAnnotatedCallLogWorker.isDirty", "running isDirty for %s", dataSourceName);
+ boolean isDirty = dataSource.isDirty(appContext);
+ LogUtil.i(
+ "RefreshAnnotatedCallLogWorker.isDirty",
+ "%s.isDirty returned %b in %dms",
+ dataSourceName,
+ isDirty,
+ System.currentTimeMillis() - startTime);
+ if (isDirty) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @TargetApi(Build.VERSION_CODES.M) // Uses try-with-resources
+ @WorkerThread
+ private void rebuild(Context appContext, long lastRebuildTimeMillis) {
+ Assert.isWorkerThread();
+
+ // TODO: Start a transaction?
+ try (SQLiteDatabase database = AnnotatedCallLog.getWritableDatabase(appContext)) {
+
+ CallLogMutations mutations = new CallLogMutations();
+
+ // System call log data source must go first!
+ CallLogDataSource systemCallLogDataSource = dataSources.getSystemCallLogDataSource();
+ String dataSourceName = getName(systemCallLogDataSource);
+ LogUtil.i("RefreshAnnotatedCallLogWorker.rebuild", "filling %s", dataSourceName);
+ long startTime = System.currentTimeMillis();
+ systemCallLogDataSource.fill(appContext, database, lastRebuildTimeMillis, mutations);
+ LogUtil.i(
+ "RefreshAnnotatedCallLogWorker.rebuild",
+ "%s.fill took: %dms",
+ dataSourceName,
+ System.currentTimeMillis() - startTime);
+
+ for (CallLogDataSource dataSource : dataSources.getDataSourcesExcludingSystemCallLog()) {
+ dataSourceName = getName(dataSource);
+ LogUtil.i("RefreshAnnotatedCallLogWorker.rebuild", "filling %s", dataSourceName);
+ startTime = System.currentTimeMillis();
+ dataSource.fill(appContext, database, lastRebuildTimeMillis, mutations);
+ LogUtil.i(
+ "CallLogFramework.rebuild",
+ "%s.fill took: %dms",
+ dataSourceName,
+ System.currentTimeMillis() - startTime);
+ }
+ LogUtil.i("RefreshAnnotatedCallLogWorker.rebuild", "applying mutations to database");
+ startTime = System.currentTimeMillis();
+ mutations.applyToDatabase(database);
+ LogUtil.i(
+ "RefreshAnnotatedCallLogWorker.rebuild",
+ "applyToDatabase took: %dms",
+ System.currentTimeMillis() - startTime);
+ }
+
+ SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(appContext);
+ sharedPreferences
+ .edit()
+ .putBoolean(CallLogFramework.PREF_FORCE_REBUILD, false)
+ .putLong(CallLogFramework.PREF_LAST_REBUILD_TIMESTAMP_MILLIS, System.currentTimeMillis())
+ .commit();
+ }
+
+ private static String getName(CallLogDataSource dataSource) {
+ return dataSource.getClass().getSimpleName();
+ }
+}
diff --git a/java/com/android/dialer/calllog/database/AnnotatedCallLog.java b/java/com/android/dialer/calllog/database/AnnotatedCallLog.java
new file mode 100644
index 000000000..7dca44a60
--- /dev/null
+++ b/java/com/android/dialer/calllog/database/AnnotatedCallLog.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.dialer.calllog.database;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.support.annotation.WorkerThread;
+import com.android.dialer.common.Assert;
+
+/** Static methods and constants for interacting with the annotated call log table. */
+public final class AnnotatedCallLog {
+
+ private static final String DATABASE_NAME = "annotated_call_log.db";
+
+ public static final String TABLE_NAME = "AnnotatedCallLog";
+
+ /** Column names for the annotated call log table. */
+ public static final class Columns {
+ public static final String ID = "_id";
+ public static final String TIMESTAMP = "timestamp";
+ public static final String CONTACT_NAME = "contact_name";
+ }
+
+ private AnnotatedCallLog() {}
+
+ @WorkerThread
+ public static SQLiteDatabase getWritableDatabase(Context appContext) {
+ Assert.isWorkerThread();
+
+ return new AnnotatedCallLogDatabaseHelper(appContext, DATABASE_NAME).getWritableDatabase();
+ }
+
+ @WorkerThread
+ public static SQLiteDatabase getReadableDatabase(Context appContext) {
+ Assert.isWorkerThread();
+
+ return new AnnotatedCallLogDatabaseHelper(appContext, DATABASE_NAME).getReadableDatabase();
+ }
+}
diff --git a/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java b/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java
new file mode 100644
index 000000000..7b28e5505
--- /dev/null
+++ b/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.dialer.calllog.database;
+
+import static com.android.dialer.calllog.database.AnnotatedCallLog.Columns.CONTACT_NAME;
+import static com.android.dialer.calllog.database.AnnotatedCallLog.Columns.ID;
+import static com.android.dialer.calllog.database.AnnotatedCallLog.Columns.TIMESTAMP;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+import com.android.dialer.common.LogUtil;
+
+/** {@link SQLiteOpenHelper} for the AnnotatedCallLog database. */
+class AnnotatedCallLogDatabaseHelper extends SQLiteOpenHelper {
+
+ AnnotatedCallLogDatabaseHelper(Context appContext, String databaseName) {
+ super(appContext, databaseName, null, 1);
+ }
+
+ private static final String CREATE_SQL =
+ new StringBuilder()
+ .append("create table if not exists " + AnnotatedCallLog.TABLE_NAME + " (")
+ .append(ID + " integer primary key, ")
+ .append(TIMESTAMP + " integer, ")
+ .append(CONTACT_NAME + " string")
+ .append(");")
+ .toString();
+
+ @Override
+ public void onCreate(SQLiteDatabase db) {
+ LogUtil.enterBlock("AnnotatedCallLogDatabaseHelper.onCreate");
+ long startTime = System.currentTimeMillis();
+ db.execSQL(CREATE_SQL);
+ // TODO: Consider logging impression.
+ LogUtil.i(
+ "AnnotatedCallLogDatabaseHelper.onCreate",
+ "took: %dms",
+ System.currentTimeMillis() - startTime);
+ }
+
+ @Override
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
+}
diff --git a/java/com/android/dialer/calllog/database/CallLogMutations.java b/java/com/android/dialer/calllog/database/CallLogMutations.java
new file mode 100644
index 000000000..ec020c6af
--- /dev/null
+++ b/java/com/android/dialer/calllog/database/CallLogMutations.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.dialer.calllog.database;
+
+import android.content.ContentValues;
+import android.database.sqlite.SQLiteDatabase;
+import android.support.annotation.WorkerThread;
+import android.util.ArrayMap;
+import android.util.ArraySet;
+import com.android.dialer.common.Assert;
+
+/** A collection of mutations to the annotated call log. */
+public final class CallLogMutations {
+
+ private final ArrayMap<Integer, ContentValues> inserts = new ArrayMap<>();
+ private final ArrayMap<Integer, ContentValues> updates = new ArrayMap<>();
+ private final ArraySet<Integer> deletes = new ArraySet<>();
+
+ /** @param contentValues an entire row not including the ID */
+ public void insert(int id, ContentValues contentValues) {
+ inserts.put(id, contentValues);
+ }
+
+ /** @param contentValues the specific columns to update, not including the ID. */
+ public void update(int id, ContentValues contentValues) {
+ // TODO: Consider merging automatically.
+ updates.put(id, contentValues);
+ }
+
+ public void delete(int id) {
+ deletes.add(id);
+ }
+
+ public boolean isEmpty() {
+ return inserts.isEmpty() && updates.isEmpty() && deletes.isEmpty();
+ }
+
+ @WorkerThread
+ public void applyToDatabase(SQLiteDatabase writableDatabase) {
+ Assert.isWorkerThread();
+
+ // TODO: Implementation.
+ }
+}
diff --git a/java/com/android/dialer/calllog/datasources/CallLogDataSource.java b/java/com/android/dialer/calllog/datasources/CallLogDataSource.java
new file mode 100644
index 000000000..13d0b842d
--- /dev/null
+++ b/java/com/android/dialer/calllog/datasources/CallLogDataSource.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.dialer.calllog.datasources;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.support.annotation.MainThread;
+import android.support.annotation.WorkerThread;
+import com.android.dialer.calllog.database.CallLogMutations;
+
+/** A source of data for one or more columns in the annotated call log. */
+public interface CallLogDataSource {
+
+ /**
+ * A lightweight check which runs frequently to detect if the annotated call log is out of date
+ * with respect to this data source.
+ *
+ * <p>This is typically used to detect external changes to the underlying data source which have
+ * been made in such a way that the dialer application was not notified.
+ *
+ * <p>Most implementations of this method will rely on some sort of last modified timestamp. If it
+ * is impossible for a data source to be modified without the dialer application being notified,
+ * this method may immediately return false.
+ */
+ @WorkerThread
+ boolean isDirty(Context appContext);
+
+ /**
+ * Computes the set of mutations necessary to update the annotated call log with respect to this
+ * data source.
+ *
+ * @param mutations the set of mutations which this method should contribute to. Note that it may
+ * contain inserts from the system call log, and these inserts should be modified by each data
+ * source.
+ */
+ @WorkerThread
+ void fill(
+ Context appContext,
+ SQLiteDatabase readableDatabase,
+ long lastRebuildTimeMillis,
+ CallLogMutations mutations);
+
+ @MainThread
+ void registerContentObservers(
+ Context appContext, ContentObserverCallbacks contentObserverCallbacks);
+
+ /**
+ * Methods which may optionally be called as a result of a data source's content observer firing.
+ */
+ interface ContentObserverCallbacks {
+ @MainThread
+ void markDirtyAndNotify(Context appContext);
+ }
+}
diff --git a/java/com/android/dialer/calllog/datasources/contacts/ContactsDataSource.java b/java/com/android/dialer/calllog/datasources/contacts/ContactsDataSource.java
new file mode 100644
index 000000000..241be5d71
--- /dev/null
+++ b/java/com/android/dialer/calllog/datasources/contacts/ContactsDataSource.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.dialer.calllog.datasources.contacts;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.support.annotation.MainThread;
+import android.support.annotation.WorkerThread;
+import com.android.dialer.calllog.database.CallLogMutations;
+import com.android.dialer.calllog.datasources.CallLogDataSource;
+import com.android.dialer.common.Assert;
+import javax.inject.Inject;
+
+/** Responsible for maintaining the contacts related columns in the annotated call log. */
+public final class ContactsDataSource implements CallLogDataSource {
+
+ @Inject
+ public ContactsDataSource() {}
+
+ @WorkerThread
+ @Override
+ public boolean isDirty(Context appContext) {
+ Assert.isWorkerThread();
+
+ // TODO: Implementation.
+ return false;
+ }
+
+ @WorkerThread
+ @Override
+ public void fill(
+ Context appContext,
+ SQLiteDatabase readableDatabase,
+ long lastRebuildTimeMillis,
+ CallLogMutations mutations) {
+ Assert.isWorkerThread();
+ // TODO: Implementation.
+ }
+
+ @MainThread
+ @Override
+ public void registerContentObservers(
+ Context appContext, ContentObserverCallbacks contentObserverCallbacks) {}
+}
diff --git a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
new file mode 100644
index 000000000..1cc51ee99
--- /dev/null
+++ b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.dialer.calllog.datasources.systemcalllog;
+
+import android.content.Context;
+import android.database.ContentObserver;
+import android.database.sqlite.SQLiteDatabase;
+import android.net.Uri;
+import android.os.Handler;
+import android.provider.CallLog;
+import android.support.annotation.MainThread;
+import android.support.annotation.WorkerThread;
+import com.android.dialer.calllog.database.CallLogMutations;
+import com.android.dialer.calllog.datasources.CallLogDataSource;
+import com.android.dialer.common.Assert;
+import com.android.dialer.common.LogUtil;
+import com.android.dialer.common.concurrent.ThreadUtil;
+import javax.inject.Inject;
+
+/**
+ * Responsible for defining the rows in the annotated call log and maintaining the columns in it
+ * which are derived from the system call log.
+ */
+public class SystemCallLogDataSource implements CallLogDataSource {
+
+ @Inject
+ public SystemCallLogDataSource() {}
+
+ @MainThread
+ @Override
+ public void registerContentObservers(
+ Context appContext, ContentObserverCallbacks contentObserverCallbacks) {
+ Assert.isMainThread();
+
+ appContext
+ .getContentResolver()
+ .registerContentObserver(
+ CallLog.Calls.CONTENT_URI,
+ true,
+ new CallLogObserver(
+ ThreadUtil.getUiThreadHandler(), appContext, contentObserverCallbacks));
+ }
+
+ @WorkerThread
+ @Override
+ public boolean isDirty(Context appContext) {
+ Assert.isWorkerThread();
+
+ /*
+ * The system call log has a last updated timestamp, but deletes are physical (the "deleted"
+ * column is unused). This means that we can't detect deletes without scanning the entire table,
+ * which would be too slow. So, we just rely on content observers to trigger rebuilds when any
+ * change is made to the system call log.
+ */
+ return false;
+ }
+
+ @WorkerThread
+ @Override
+ public void fill(
+ Context appContext,
+ SQLiteDatabase readableDatabase,
+ long lastRebuildTimeMillis,
+ CallLogMutations mutations) {
+ Assert.isWorkerThread();
+
+ // This data source should always run first so the mutations should always be empty.
+ Assert.checkState(mutations.isEmpty());
+
+ // TODO: Implementation.
+ }
+
+ private static class CallLogObserver extends ContentObserver {
+ private final Context appContext;
+ private final ContentObserverCallbacks contentObserverCallbacks;
+
+ CallLogObserver(
+ Handler handler, Context appContext, ContentObserverCallbacks contentObserverCallbacks) {
+ super(handler);
+ this.appContext = appContext;
+ this.contentObserverCallbacks = contentObserverCallbacks;
+ }
+
+ @MainThread
+ @Override
+ public void onChange(boolean selfChange, Uri uri) {
+ Assert.isMainThread();
+ LogUtil.enterBlock("SystemCallLogDataSource.CallLogObserver.onChange");
+ super.onChange(selfChange, uri);
+
+ /*
+ * The system call log has a last updated timestamp, but deletes are physical (the "deleted"
+ * column is unused). This means that we can't detect deletes without scanning the entire
+ * table, which would be too slow. So, we just rely on content observers to trigger rebuilds
+ * when any change is made to the system call log.
+ */
+ contentObserverCallbacks.markDirtyAndNotify(appContext);
+ }
+ }
+}
diff --git a/java/com/android/dialer/calllog/ui/AndroidManifest.xml b/java/com/android/dialer/calllog/ui/AndroidManifest.xml
new file mode 100644
index 000000000..228167749
--- /dev/null
+++ b/java/com/android/dialer/calllog/ui/AndroidManifest.xml
@@ -0,0 +1,16 @@
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+<manifest package="com.android.dialer.calllog"/>
diff --git a/java/com/android/dialer/calllog/ui/AnnotatedCallLogCursorLoader.java b/java/com/android/dialer/calllog/ui/AnnotatedCallLogCursorLoader.java
new file mode 100644
index 000000000..cd8622e80
--- /dev/null
+++ b/java/com/android/dialer/calllog/ui/AnnotatedCallLogCursorLoader.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.dialer.calllog.ui;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.content.CursorLoader;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.os.Build;
+import com.android.dialer.calllog.database.AnnotatedCallLog;
+import com.android.dialer.calllog.database.AnnotatedCallLog.Columns;
+
+/** CursorLoader which reads the annotated call log. */
+class AnnotatedCallLogCursorLoader extends CursorLoader {
+
+ AnnotatedCallLogCursorLoader(Context context) {
+ super(context);
+ }
+
+ @TargetApi(Build.VERSION_CODES.M) // Uses try-with-resources
+ @Override
+ public Cursor loadInBackground() {
+ try (SQLiteDatabase readableDatabase = AnnotatedCallLog.getReadableDatabase(getContext())) {
+ return readableDatabase.rawQuery(
+ "SELECT * FROM "
+ + AnnotatedCallLog.TABLE_NAME
+ + " ORDER BY "
+ + Columns.TIMESTAMP
+ + " DESC",
+ null /* selectionArgs */);
+ }
+ }
+}
diff --git a/java/com/android/dialer/calllog/ui/NewCallLogFragment.java b/java/com/android/dialer/calllog/ui/NewCallLogFragment.java
new file mode 100644
index 000000000..b8f2b1326
--- /dev/null
+++ b/java/com/android/dialer/calllog/ui/NewCallLogFragment.java
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+package com.android.dialer.calllog.ui;
+
+import android.app.Fragment;
+import android.app.LoaderManager.LoaderCallbacks;
+import android.content.Context;
+import android.content.Loader;
+import android.database.Cursor;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.CursorAdapter;
+import android.widget.ListView;
+import android.widget.SimpleCursorAdapter;
+import android.widget.TextView;
+import com.android.dialer.calllog.CallLogComponent;
+import com.android.dialer.calllog.CallLogFramework;
+import com.android.dialer.calllog.CallLogFramework.CallLogUi;
+import com.android.dialer.calllog.database.AnnotatedCallLog.Columns;
+import com.android.dialer.common.LogUtil;
+import java.text.SimpleDateFormat;
+import java.util.Locale;
+
+/** The "new" call log fragment implementation, which is built on top of the annotated call log. */
+public final class NewCallLogFragment extends Fragment
+ implements CallLogUi, LoaderCallbacks<Cursor> {
+
+ private CursorAdapter cursorAdapter;
+
+ public NewCallLogFragment() {
+ LogUtil.enterBlock("NewCallLogFragment.NewCallLogFragment");
+ }
+
+ @Override
+ public void onCreate(Bundle state) {
+ super.onCreate(state);
+
+ LogUtil.enterBlock("NewCallLogFragment.onCreate");
+
+ CallLogFramework callLogFramework = CallLogComponent.get(getContext()).callLogFramework();
+ callLogFramework.attachUi(this);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+
+ LogUtil.enterBlock("NewCallLogFragment.onResume");
+
+ CallLogFramework callLogFramework = CallLogComponent.get(getContext()).callLogFramework();
+ callLogFramework.attachUi(this);
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+
+ LogUtil.enterBlock("NewCallLogFragment.onPause");
+
+ CallLogFramework callLogFramework = CallLogComponent.get(getContext()).callLogFramework();
+ callLogFramework.detachUi();
+ }
+
+ @Override
+ public View onCreateView(
+ LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ LogUtil.enterBlock("NewCallLogFragment.onCreateView");
+
+ View view = inflater.inflate(R.layout.new_call_log_fragment, container, false);
+ ListView listView = (ListView) view.findViewById(R.id.list);
+
+ this.cursorAdapter =
+ new MyCursorAdapter(
+ getContext(),
+ R.layout.new_call_log_entry,
+ null /* cursor */,
+ new String[] {Columns.TIMESTAMP, Columns.CONTACT_NAME},
+ new int[] {R.id.timestamp, R.id.contact_name},
+ 0);
+ listView.setAdapter(cursorAdapter);
+
+ getLoaderManager().initLoader(0, null, this);
+
+ return view;
+ }
+
+ @Override
+ public void invalidateUi() {
+ LogUtil.enterBlock("NewCallLogFragment.invalidateUi");
+ // TODO: Implementation.
+ }
+
+ @Override
+ public Loader<Cursor> onCreateLoader(int id, Bundle args) {
+ // TODO: This is sort of weird, do we need to implement a content provider?
+ return new AnnotatedCallLogCursorLoader(getContext());
+ }
+
+ @Override
+ public void onLoadFinished(Loader<Cursor> loader, Cursor newCursor) {
+ cursorAdapter.swapCursor(newCursor);
+ }
+
+ @Override
+ public void onLoaderReset(Loader<Cursor> loader) {
+ cursorAdapter.swapCursor(null);
+ }
+
+ private static class MyCursorAdapter extends SimpleCursorAdapter {
+
+ MyCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) {
+ super(context, layout, c, from, to, flags);
+ }
+
+ @Override
+ public void setViewText(TextView view, String text) {
+ if (view.getId() == R.id.timestamp) {
+ text = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.US).format(Long.valueOf(text));
+ }
+ view.setText(text);
+ }
+ }
+}
diff --git a/java/com/android/dialer/calllog/ui/res/layout/new_call_log_entry.xml b/java/com/android/dialer/calllog/ui/res/layout/new_call_log_entry.xml
new file mode 100644
index 000000000..ee3efd002
--- /dev/null
+++ b/java/com/android/dialer/calllog/ui/res/layout/new_call_log_entry.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="horizontal">
+
+ <TextView
+ android:id="@+id/timestamp"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"/>
+
+ <TextView
+ android:id="@+id/contact_name"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"/>
+</LinearLayout> \ No newline at end of file
diff --git a/java/com/android/dialer/calllog/ui/res/layout/new_call_log_fragment.xml b/java/com/android/dialer/calllog/ui/res/layout/new_call_log_fragment.xml
new file mode 100644
index 000000000..433dbdd0f
--- /dev/null
+++ b/java/com/android/dialer/calllog/ui/res/layout/new_call_log_fragment.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<ListView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/list"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
diff --git a/java/com/android/dialer/calllogutils/CallEntryFormatter.java b/java/com/android/dialer/calllogutils/CallEntryFormatter.java
index bd6d53f48..bd184bb89 100644
--- a/java/com/android/dialer/calllogutils/CallEntryFormatter.java
+++ b/java/com/android/dialer/calllogutils/CallEntryFormatter.java
@@ -76,7 +76,7 @@ public class CallEntryFormatter {
UCharacter.TITLECASE_NO_LOWERCASE);
}
- private static CharSequence formatDuration(Context context, long elapsedSeconds) {
+ private static CharSequence formatDuration(Context context, long elapsedSeconds, boolean a11y) {
long minutes = 0;
long seconds = 0;
@@ -84,10 +84,16 @@ public class CallEntryFormatter {
minutes = elapsedSeconds / 60;
elapsedSeconds -= minutes * 60;
seconds = elapsedSeconds;
- return context.getString(R.string.call_details_duration_format, minutes, seconds);
+ int stringId =
+ a11y ? R.string.call_details_duration_format_a11y : R.string.call_details_duration_format;
+ return context.getString(stringId, minutes, seconds);
} else {
seconds = elapsedSeconds;
- return context.getString(R.string.call_details_short_duration_format, seconds);
+ int stringId =
+ a11y
+ ? R.string.call_details_short_duration_format_a11y
+ : R.string.call_details_short_duration_format;
+ return context.getString(stringId, seconds);
}
}
@@ -96,13 +102,14 @@ public class CallEntryFormatter {
*
* @param elapsedSeconds Total elapsed seconds.
* @param dataUsage Data usage in bytes, or null if not specified.
+ * @param a11y {@code true} if string should be talk back friendly.
* @return String containing call duration and data usage.
*/
public static CharSequence formatDurationAndDataUsage(
- Context context, long elapsedSeconds, Long dataUsage) {
- CharSequence duration = formatDuration(context, elapsedSeconds);
+ Context context, long elapsedSeconds, long dataUsage, boolean a11y) {
+ CharSequence duration = formatDuration(context, elapsedSeconds, a11y);
List<CharSequence> durationItems = new ArrayList<>();
- if (dataUsage != null) {
+ if (dataUsage > 0) {
durationItems.add(duration);
durationItems.add(Formatter.formatShortFileSize(context, dataUsage));
return DialerUtils.join(durationItems);
diff --git a/java/com/android/dialer/calllogutils/CallTypeIconsView.java b/java/com/android/dialer/calllogutils/CallTypeIconsView.java
index 55672ca07..58e4acfba 100644
--- a/java/com/android/dialer/calllogutils/CallTypeIconsView.java
+++ b/java/com/android/dialer/calllogutils/CallTypeIconsView.java
@@ -232,44 +232,56 @@ public class CallTypeIconsView extends View {
* Configures the call icon drawables. A single white call arrow which points down and left is
* used as a basis for all of the call arrow icons, applying rotation and colors as needed.
*
+ * <p>For each drawable we call mutate so that a new instance of the drawable is created. This
+ * is done so that when we apply a color filter to the drawables, they are recolored across
+ * dialer.
+ *
* @param context The current context.
*/
public Resources(Context context, boolean largeIcons) {
final android.content.res.Resources r = context.getResources();
int iconId = R.drawable.quantum_ic_call_received_white_24;
- incoming = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId);
+ Drawable drawable = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId);
+ incoming = drawable.mutate();
incoming.setColorFilter(r.getColor(R.color.answered_call), PorterDuff.Mode.MULTIPLY);
// Create a rotated instance of the call arrow for outgoing calls.
iconId = R.drawable.quantum_ic_call_made_white_24;
- outgoing = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId);
+ drawable = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId);
+ outgoing = drawable.mutate();
outgoing.setColorFilter(r.getColor(R.color.answered_call), PorterDuff.Mode.MULTIPLY);
// Need to make a copy of the arrow drawable, otherwise the same instance colored
// above will be recolored here.
iconId = R.drawable.quantum_ic_call_missed_white_24;
- missed = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId);
+ drawable = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId);
+ missed = drawable.mutate();
missed.setColorFilter(r.getColor(R.color.missed_call), PorterDuff.Mode.MULTIPLY);
iconId = R.drawable.quantum_ic_voicemail_white_24;
- voicemail = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId);
+ drawable = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId);
+ voicemail = drawable.mutate();
voicemail.setColorFilter(r.getColor(R.color.call_type_icon_color), PorterDuff.Mode.MULTIPLY);
iconId = R.drawable.quantum_ic_block_white_24;
- blocked = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId);
+ drawable = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId);
+ blocked = drawable.mutate();
blocked.setColorFilter(r.getColor(R.color.blocked_call), PorterDuff.Mode.MULTIPLY);
iconId = R.drawable.quantum_ic_videocam_white_24;
- videoCall = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId);
+ drawable = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId);
+ videoCall = drawable.mutate();
videoCall.setColorFilter(r.getColor(R.color.call_type_icon_color), PorterDuff.Mode.MULTIPLY);
iconId = R.drawable.quantum_ic_hd_white_24;
- hdCall = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId);
+ drawable = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId);
+ hdCall = drawable.mutate();
hdCall.setColorFilter(r.getColor(R.color.call_type_icon_color), PorterDuff.Mode.MULTIPLY);
iconId = R.drawable.quantum_ic_signal_wifi_4_bar_white_24;
- wifiCall = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId);
+ drawable = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId);
+ wifiCall = drawable.mutate();
wifiCall.setColorFilter(r.getColor(R.color.call_type_icon_color), PorterDuff.Mode.MULTIPLY);
iconMargin = largeIcons ? 0 : r.getDimensionPixelSize(R.dimen.call_log_icon_margin);
diff --git a/java/com/android/dialer/calllogutils/PhoneCallDetails.java b/java/com/android/dialer/calllogutils/PhoneCallDetails.java
index 6fa507325..13c528ad2 100644
--- a/java/com/android/dialer/calllogutils/PhoneCallDetails.java
+++ b/java/com/android/dialer/calllogutils/PhoneCallDetails.java
@@ -27,7 +27,7 @@ import android.text.TextUtils;
import com.android.contacts.common.ContactsUtils.UserType;
import com.android.contacts.common.preference.ContactsPreferences;
import com.android.contacts.common.util.ContactDisplayUtils;
-import com.android.dialer.phonenumbercache.CachedNumberLookupService.CachedContactInfo.ContactSourceType;
+import com.android.dialer.logging.ContactSource;
import com.android.dialer.phonenumbercache.ContactInfo;
/** The details of a phone call to be shown in the UI. */
@@ -82,7 +82,7 @@ public class PhoneCallDetails {
public Uri photoUri;
// The source type of the contact associated with this call.
- public @ContactSourceType int sourceType;
+ public ContactSource.Type sourceType;
// The object id type of the contact associated with this call.
public String objectId;
diff --git a/java/com/android/dialer/calllogutils/res/values-af/strings.xml b/java/com/android/dialer/calllogutils/res/values-af/strings.xml
index d4d615e79..1858a7210 100644
--- a/java/com/android/dialer/calllogutils/res/values-af/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-af/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"via <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"op <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, via <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Stemboodskap"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> m. <xliff:g id="SECONDS">%s</xliff:g> s."</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> s."</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> m. <xliff:g id="SECONDS">%d</xliff:g> s."</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s."</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> minute <xliff:g id="SECONDS">%d</xliff:g> sekondes"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> sekondes"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-am/strings.xml b/java/com/android/dialer/calllogutils/res/values-am/strings.xml
index 80a71c93f..2d4f10ddd 100644
--- a/java/com/android/dialer/calllogutils/res/values-am/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-am/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"በ <xliff:g id="NUMBER">%1$s</xliff:g> በኩል"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"በ <xliff:g id="PHONEACCOUNT">%1$s</xliff:g> ላይ፣ በ <xliff:g id="NUMBER">%2$s</xliff:g> በኩል"</string>
<string name="voicemail_string" msgid="6029775151483803006">"የድምፅ መልእክት"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g>ደ <xliff:g id="SECONDS">%s</xliff:g>ሰ"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> ሰከንዶች"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g>ደ <xliff:g id="SECONDS">%d</xliff:g>ሰ"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> ሰከንዶች"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> ደቂቃዎች <xliff:g id="SECONDS">%d</xliff:g> ሰከንዶች"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> ሰከንዶች"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-ar/strings.xml b/java/com/android/dialer/calllogutils/res/values-ar/strings.xml
index 04cc6d9ac..49a96ffbf 100644
--- a/java/com/android/dialer/calllogutils/res/values-ar/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-ar/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"من خلال <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"على <xliff:g id="PHONEACCOUNT">%1$s</xliff:g> من خلال <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"البريد الصوتي"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> د <xliff:g id="SECONDS">%s</xliff:g> ث"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> ثانية"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> د <xliff:g id="SECONDS">%d</xliff:g> ث"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> ثانية"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> دقيقة <xliff:g id="SECONDS">%d</xliff:g> ثانية"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> ثانية"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-az/strings.xml b/java/com/android/dialer/calllogutils/res/values-az/strings.xml
index 76726120c..8bf5c03d1 100644
--- a/java/com/android/dialer/calllogutils/res/values-az/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-az/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"<xliff:g id="NUMBER">%1$s</xliff:g> vasitəsilə"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="NUMBER">%2$s</xliff:g> vasitəsilə <xliff:g id="PHONEACCOUNT">%1$s</xliff:g> hesabında"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Səsli e-məktub"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> dəq <xliff:g id="SECONDS">%s</xliff:g> san"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g>san"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> dəq <xliff:g id="SECONDS">%d</xliff:g> san"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g>san"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> dəqiqə <xliff:g id="SECONDS">%d</xliff:g> saniyə"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> saniyə"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/calllogutils/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..0d658c455
--- /dev/null
+++ b/java/com/android/dialer/calllogutils/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="type_incoming" msgid="5727636795656199810">"Dolazni poziv"</string>
+ <string name="type_incoming_pulled" msgid="8434723359163965796">"Dolazni poziv je prenet na drugi uređaj"</string>
+ <string name="type_outgoing" msgid="764896746073942963">"Odlazni poziv"</string>
+ <string name="type_outgoing_pulled" msgid="1648517538371704193">"Odlazni poziv je prenet na drugi uređaj"</string>
+ <string name="type_missed" msgid="2997043831022028176">"Propušten poziv"</string>
+ <string name="type_incoming_video" msgid="7507180294202642554">"Dolazni video poziv"</string>
+ <string name="type_incoming_video_pulled" msgid="7879031598844023977">"Dolazni video poziv je prenet na drugi uređaj"</string>
+ <string name="type_outgoing_video" msgid="309370072333983910">"Odlazni video poziv"</string>
+ <string name="type_outgoing_video_pulled" msgid="3924450629684331345">"Odlazni video poziv je prenet na drugi uređaj"</string>
+ <string name="type_missed_video" msgid="4350107016317603785">"Propušten video poziv"</string>
+ <string name="type_voicemail" msgid="1877524395253846684">"Govorna pošta"</string>
+ <string name="type_rejected" msgid="5632107438472996198">"Odbijen poziv"</string>
+ <string name="type_blocked" msgid="9177237294052244929">"Blokiran poziv"</string>
+ <string name="type_answered_elsewhere" msgid="411958582555881640">"Poziv je prihvaćen na drugom uređaju"</string>
+ <string name="description_phone_account" msgid="4382951172691362244">"na <xliff:g id="PHONEACCOUNT">^1</xliff:g>"</string>
+ <string name="description_via_number" msgid="7682575124846343076">"preko <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
+ <string name="description_via_number_phone_account" msgid="4345445677508018830">"na <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, preko <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="voicemail_string" msgid="6029775151483803006">"Govorna pošta"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> m <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> min <xliff:g id="SECONDS">%d</xliff:g> sek"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> sek"</string>
+</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-be/strings.xml b/java/com/android/dialer/calllogutils/res/values-be/strings.xml
index fbb7bf24b..e04d815d5 100644
--- a/java/com/android/dialer/calllogutils/res/values-be/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-be/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"праз <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"на <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, праз <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Галасавая пошта"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> хв <xliff:g id="SECONDS">%s</xliff:g> с"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> с"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> хв <xliff:g id="SECONDS">%d</xliff:g> с"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> с"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"Хвілін: <xliff:g id="MINUTES">%d</xliff:g>; секунд: <xliff:g id="SECONDS">%d</xliff:g>"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> с"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-bg/strings.xml b/java/com/android/dialer/calllogutils/res/values-bg/strings.xml
index 4f21eb3f3..716cecb3a 100644
--- a/java/com/android/dialer/calllogutils/res/values-bg/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-bg/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"през <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"в/ъв <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, през <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Гласова поща"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> мин <xliff:g id="SECONDS">%s</xliff:g> сек"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> сек"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> мин <xliff:g id="SECONDS">%d</xliff:g> сек"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> сек"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> минути и <xliff:g id="SECONDS">%d</xliff:g> секунди"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> секунди"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-bn/strings.xml b/java/com/android/dialer/calllogutils/res/values-bn/strings.xml
index 28b40b448..ab2862e64 100644
--- a/java/com/android/dialer/calllogutils/res/values-bn/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-bn/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"<xliff:g id="NUMBER">%1$s</xliff:g> এর মাধ্যমে"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="PHONEACCOUNT">%1$s</xliff:g> এ, <xliff:g id="NUMBER">%2$s</xliff:g> এর মাধ্যমে"</string>
<string name="voicemail_string" msgid="6029775151483803006">"ভয়েসমেল"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g>মিনিট <xliff:g id="SECONDS">%s</xliff:g>সেকেন্ড"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g>সেকেন্ড"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g>মিনিট <xliff:g id="SECONDS">%d</xliff:g>সেকেন্ড"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g>সেকেন্ড"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> মিনিট <xliff:g id="SECONDS">%d</xliff:g> সেকেন্ড"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> সেকেন্ড"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-bs/strings.xml b/java/com/android/dialer/calllogutils/res/values-bs/strings.xml
index c6693d364..27bf8a46a 100644
--- a/java/com/android/dialer/calllogutils/res/values-bs/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-bs/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"preko <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"na <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, preko <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Govorna pošta"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> min <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> min. <xliff:g id="SECONDS">%d</xliff:g> sek."</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> sek."</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-ca/strings.xml b/java/com/android/dialer/calllogutils/res/values-ca/strings.xml
index 45b581423..eb26926a1 100644
--- a/java/com/android/dialer/calllogutils/res/values-ca/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-ca/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"al número <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"a <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, al número <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Bústia de veu"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> min <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> minuts <xliff:g id="SECONDS">%d</xliff:g> segons"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> segons"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-cs/strings.xml b/java/com/android/dialer/calllogutils/res/values-cs/strings.xml
index f2de1f887..66b58810d 100644
--- a/java/com/android/dialer/calllogutils/res/values-cs/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-cs/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"z čísla <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"na účet <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, z čísla <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Hlasová schránka"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> min <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> min <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-da/strings.xml b/java/com/android/dialer/calllogutils/res/values-da/strings.xml
index 09f5b3d77..aa6ba8a2f 100644
--- a/java/com/android/dialer/calllogutils/res/values-da/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-da/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"via <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"til <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, via <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Telefonsvarer"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> sek."</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> min. <xliff:g id="SECONDS">%d</xliff:g> sek."</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> sek."</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> minutter <xliff:g id="SECONDS">%d</xliff:g> sekunder"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> sekunder"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-de/strings.xml b/java/com/android/dialer/calllogutils/res/values-de/strings.xml
index b71487432..7fd087fb7 100644
--- a/java/com/android/dialer/calllogutils/res/values-de/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-de/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"über <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"mit <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, über <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Mailbox"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> min <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> Minuten <xliff:g id="SECONDS">%d</xliff:g> Sekunden"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> Sekunden"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-el/strings.xml b/java/com/android/dialer/calllogutils/res/values-el/strings.xml
index ab9b5e3ee..7a3db9ab8 100644
--- a/java/com/android/dialer/calllogutils/res/values-el/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-el/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"μέσω <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"στον λογαριασμό <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, μέσω <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Αυτόματος τηλεφωνητής"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g>λ <xliff:g id="SECONDS">%s</xliff:g>δ"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g>δ"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g>λ <xliff:g id="SECONDS">%d</xliff:g>δ"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g>δ"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> λεπτά, <xliff:g id="SECONDS">%d</xliff:g> δευτερόλεπτα"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> δευτερόλεπτα"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-en-rAU/strings.xml b/java/com/android/dialer/calllogutils/res/values-en-rAU/strings.xml
index c1105afcc..97ed6cfcc 100644
--- a/java/com/android/dialer/calllogutils/res/values-en-rAU/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-en-rAU/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"via <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"on <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, via <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Voicemail"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g>m <xliff:g id="SECONDS">%s</xliff:g>s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g>s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g>m <xliff:g id="SECONDS">%d</xliff:g>s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g>s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> minutes <xliff:g id="SECONDS">%d</xliff:g> seconds"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> seconds"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-en-rGB/strings.xml b/java/com/android/dialer/calllogutils/res/values-en-rGB/strings.xml
index c1105afcc..97ed6cfcc 100644
--- a/java/com/android/dialer/calllogutils/res/values-en-rGB/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-en-rGB/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"via <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"on <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, via <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Voicemail"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g>m <xliff:g id="SECONDS">%s</xliff:g>s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g>s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g>m <xliff:g id="SECONDS">%d</xliff:g>s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g>s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> minutes <xliff:g id="SECONDS">%d</xliff:g> seconds"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> seconds"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-en-rIN/strings.xml b/java/com/android/dialer/calllogutils/res/values-en-rIN/strings.xml
index c1105afcc..97ed6cfcc 100644
--- a/java/com/android/dialer/calllogutils/res/values-en-rIN/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-en-rIN/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"via <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"on <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, via <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Voicemail"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g>m <xliff:g id="SECONDS">%s</xliff:g>s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g>s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g>m <xliff:g id="SECONDS">%d</xliff:g>s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g>s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> minutes <xliff:g id="SECONDS">%d</xliff:g> seconds"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> seconds"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-es-rUS/strings.xml b/java/com/android/dialer/calllogutils/res/values-es-rUS/strings.xml
index 74906bd48..8d25bde11 100644
--- a/java/com/android/dialer/calllogutils/res/values-es-rUS/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-es-rUS/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"por medio de <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"en <xliff:g id="PHONEACCOUNT">%1$s</xliff:g> por medio de <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Buzón de voz"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> min <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> minutos, <xliff:g id="SECONDS">%d</xliff:g> segundos"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> segundos"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-es/strings.xml b/java/com/android/dialer/calllogutils/res/values-es/strings.xml
index 9ed0b6472..5ad0f5eab 100644
--- a/java/com/android/dialer/calllogutils/res/values-es/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-es/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"a través del <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"en <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, a través del <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Buzón de voz"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> min <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> minutos <xliff:g id="SECONDS">%d</xliff:g> segundos"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> segundos"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-et/strings.xml b/java/com/android/dialer/calllogutils/res/values-et/strings.xml
index a6a8b9115..9e2cd14fa 100644
--- a/java/com/android/dialer/calllogutils/res/values-et/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-et/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"numbri <xliff:g id="NUMBER">%1$s</xliff:g> kaudu"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"kontol <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, numbri <xliff:g id="NUMBER">%2$s</xliff:g> kaudu"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Kõnepost"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> min <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> minutit <xliff:g id="SECONDS">%d</xliff:g> sekundit"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> sekundit"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-eu/strings.xml b/java/com/android/dialer/calllogutils/res/values-eu/strings.xml
index 8c960bae6..e1a6b3f15 100644
--- a/java/com/android/dialer/calllogutils/res/values-eu/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-eu/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"<xliff:g id="NUMBER">%1$s</xliff:g> bidez"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="PHONEACCOUNT">%1$s</xliff:g> kontuan, <xliff:g id="NUMBER">%2$s</xliff:g> bidez"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Erantzungailua"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> min eta <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> min eta <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> minutu eta <xliff:g id="SECONDS">%d</xliff:g> segundo"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> segundo"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-fa/strings.xml b/java/com/android/dialer/calllogutils/res/values-fa/strings.xml
index adb3d9d21..13c92b8f7 100644
--- a/java/com/android/dialer/calllogutils/res/values-fa/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-fa/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"ازطریق <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"در <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>، ازطریق <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"پست صوتی"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> دقیقه <xliff:g id="SECONDS">%s</xliff:g> ثانیه"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> ثانیه"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> دقیقه <xliff:g id="SECONDS">%d</xliff:g> ثانیه"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> ثانیه"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> دقیقه و <xliff:g id="SECONDS">%d</xliff:g> ثانیه"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> ثانیه"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-fi/strings.xml b/java/com/android/dialer/calllogutils/res/values-fi/strings.xml
index 2838e0d0e..1b08ea974 100644
--- a/java/com/android/dialer/calllogutils/res/values-fi/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-fi/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"numerosta <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"tililtä <xliff:g id="PHONEACCOUNT">%1$s</xliff:g> numerosta <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Vastaaja"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> min <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> minuuttia <xliff:g id="SECONDS">%d</xliff:g> sekuntia"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> sekuntia"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-fr-rCA/strings.xml b/java/com/android/dialer/calllogutils/res/values-fr-rCA/strings.xml
index bf4ba171c..1288ae318 100644
--- a/java/com/android/dialer/calllogutils/res/values-fr-rCA/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-fr-rCA/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"au <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"sur <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, au <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Messagerie vocale"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> min et <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> min et <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> minutes et <xliff:g id="SECONDS">%d</xliff:g> secondes"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> secondes"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-fr/strings.xml b/java/com/android/dialer/calllogutils/res/values-fr/strings.xml
index 584c53ad4..a0cee2a9f 100644
--- a/java/com/android/dialer/calllogutils/res/values-fr/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-fr/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"au <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"sur <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, au <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Messagerie vocale"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> min et <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> min et <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> minutes <xliff:g id="SECONDS">%d</xliff:g> secondes"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> secondes"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-gl/strings.xml b/java/com/android/dialer/calllogutils/res/values-gl/strings.xml
index ace85e49b..a2a33f791 100644
--- a/java/com/android/dialer/calllogutils/res/values-gl/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-gl/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"a través do <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"en <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, a través do <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Correo de voz"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> min <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> minutos e <xliff:g id="SECONDS">%d</xliff:g> segundos"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> segundos"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-gu/strings.xml b/java/com/android/dialer/calllogutils/res/values-gu/strings.xml
index 0e8e0212c..598048883 100644
--- a/java/com/android/dialer/calllogutils/res/values-gu/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-gu/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"<xliff:g id="NUMBER">%1$s</xliff:g> મારફતે"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="PHONEACCOUNT">%1$s</xliff:g> પર, <xliff:g id="NUMBER">%2$s</xliff:g> મારફતે"</string>
<string name="voicemail_string" msgid="6029775151483803006">"વૉઇસમેઇલ"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g>મિ <xliff:g id="SECONDS">%s</xliff:g>સે"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g>સે"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g>મિ <xliff:g id="SECONDS">%d</xliff:g>સે"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g>સે"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> મિનિટ <xliff:g id="SECONDS">%d</xliff:g> સેકંડ"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> સેકંડ"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-hi/strings.xml b/java/com/android/dialer/calllogutils/res/values-hi/strings.xml
index 59a6aff7b..e8994bd9f 100644
--- a/java/com/android/dialer/calllogutils/res/values-hi/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-hi/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"<xliff:g id="NUMBER">%1$s</xliff:g> से"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="PHONEACCOUNT">%1$s</xliff:g> पर, <xliff:g id="NUMBER">%2$s</xliff:g> से"</string>
<string name="voicemail_string" msgid="6029775151483803006">"वॉइसमेल"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> मि <xliff:g id="SECONDS">%s</xliff:g> से"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> से"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> मि <xliff:g id="SECONDS">%d</xliff:g> से"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> से"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> मिनट <xliff:g id="SECONDS">%d</xliff:g> सेकंड"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> सेकंड"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-hr/strings.xml b/java/com/android/dialer/calllogutils/res/values-hr/strings.xml
index 38843f15b..ef60cd275 100644
--- a/java/com/android/dialer/calllogutils/res/values-hr/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-hr/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"putem broja <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"na računu <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, putem broja <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Govorna pošta"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> min <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> min <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-hu/strings.xml b/java/com/android/dialer/calllogutils/res/values-hu/strings.xml
index e2849b1de..566bf272d 100644
--- a/java/com/android/dialer/calllogutils/res/values-hu/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-hu/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"szám: <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"fiók: <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, szám: <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Hangposta"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> p <xliff:g id="SECONDS">%s</xliff:g> mp"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> mp"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> p <xliff:g id="SECONDS">%d</xliff:g> mp"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> mp"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> perc, <xliff:g id="SECONDS">%d</xliff:g> másodperc"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> másodperc"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-hy/strings.xml b/java/com/android/dialer/calllogutils/res/values-hy/strings.xml
index 58d51a6be..1b939eca0 100644
--- a/java/com/android/dialer/calllogutils/res/values-hy/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-hy/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"<xliff:g id="NUMBER">%1$s</xliff:g> համարից"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="PHONEACCOUNT">%1$s</xliff:g>-ին <xliff:g id="NUMBER">%2$s</xliff:g> համարից"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Ձայնային փոստ"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> ր <xliff:g id="SECONDS">%s</xliff:g> վ"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> վ"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> ր <xliff:g id="SECONDS">%d</xliff:g> վ"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> վ"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> րոպե <xliff:g id="SECONDS">%d</xliff:g> վայրկյան"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> վայրկյան"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-in/strings.xml b/java/com/android/dialer/calllogutils/res/values-in/strings.xml
index faf93627c..f734419d5 100644
--- a/java/com/android/dialer/calllogutils/res/values-in/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-in/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"melalui <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"di <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, melalui <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Pesan suara"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g>m <xliff:g id="SECONDS">%s</xliff:g>d"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g>d"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g>m <xliff:g id="SECONDS">%d</xliff:g>d"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g>d"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> menit <xliff:g id="SECONDS">%d</xliff:g> detik"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> detik"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-is/strings.xml b/java/com/android/dialer/calllogutils/res/values-is/strings.xml
index e7bbbe10e..5643aee28 100644
--- a/java/com/android/dialer/calllogutils/res/values-is/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-is/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"í gegnum <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"á <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, í gegnum <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Talhólf"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> mín. og <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> sek."</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> mín. og <xliff:g id="SECONDS">%d</xliff:g> sek."</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> sek."</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> mínútur <xliff:g id="SECONDS">%d</xliff:g> sekúndur"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> sekúndur"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-it/strings.xml b/java/com/android/dialer/calllogutils/res/values-it/strings.xml
index 04a0e1b39..808d4e444 100644
--- a/java/com/android/dialer/calllogutils/res/values-it/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-it/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"tramite <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"su <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, tramite <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Messaggi vocali"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> m <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> m <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> minuti <xliff:g id="SECONDS">%d</xliff:g> secondi"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> secondi"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-iw/strings.xml b/java/com/android/dialer/calllogutils/res/values-iw/strings.xml
index 1df6961c5..069a8b89d 100644
--- a/java/com/android/dialer/calllogutils/res/values-iw/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-iw/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"דרך <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"בחשבון <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, דרך <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"דואר קולי"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> דקות ו-<xliff:g id="SECONDS">%s</xliff:g> שניות"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> שניות"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> דקות ו-<xliff:g id="SECONDS">%d</xliff:g> שניות"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> שניות"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> דקות ו-<xliff:g id="SECONDS">%d</xliff:g> שניות"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> שניות"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-ja/strings.xml b/java/com/android/dialer/calllogutils/res/values-ja/strings.xml
index 4baeecc5a..81e8ee510 100644
--- a/java/com/android/dialer/calllogutils/res/values-ja/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-ja/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"<xliff:g id="NUMBER">%1$s</xliff:g> で受信"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="PHONEACCOUNT">%1$s</xliff:g>(<xliff:g id="NUMBER">%2$s</xliff:g>)で受信"</string>
<string name="voicemail_string" msgid="6029775151483803006">"ボイスメール"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> 分 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> 分 <xliff:g id="SECONDS">%d</xliff:g> 秒"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> 秒"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> 分 <xliff:g id="SECONDS">%d</xliff:g> 秒"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> 秒"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-ka/strings.xml b/java/com/android/dialer/calllogutils/res/values-ka/strings.xml
index b1a4a4177..6bfe5d3ae 100644
--- a/java/com/android/dialer/calllogutils/res/values-ka/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-ka/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"<xliff:g id="NUMBER">%1$s</xliff:g>-ის მეშვეობით"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="PHONEACCOUNT">%1$s</xliff:g>-ზე, <xliff:g id="NUMBER">%2$s</xliff:g>-ის მეშვეობით"</string>
<string name="voicemail_string" msgid="6029775151483803006">"ხმოვანი ფოსტა"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g>წთ <xliff:g id="SECONDS">%s</xliff:g>წმ"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g>წმ"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g>წთ <xliff:g id="SECONDS">%d</xliff:g>წმ"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g>წმ"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> წუთი, <xliff:g id="SECONDS">%d</xliff:g> წამი"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> წამი"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-kk/strings.xml b/java/com/android/dialer/calllogutils/res/values-kk/strings.xml
index efaef2323..8302bb397 100644
--- a/java/com/android/dialer/calllogutils/res/values-kk/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-kk/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"<xliff:g id="NUMBER">%1$s</xliff:g> арқылы"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, <xliff:g id="NUMBER">%2$s</xliff:g> арқылы"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Дауыстық хабар"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g>м <xliff:g id="SECONDS">%s</xliff:g>с"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> с"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g>м <xliff:g id="SECONDS">%d</xliff:g>с"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> с"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> минут <xliff:g id="SECONDS">%d</xliff:g> секунд"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> секунд"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-km/strings.xml b/java/com/android/dialer/calllogutils/res/values-km/strings.xml
index b5e6c5d8e..91b6d9acd 100644
--- a/java/com/android/dialer/calllogutils/res/values-km/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-km/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"តាមរយៈ <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"នៅ​លើ <xliff:g id="PHONEACCOUNT">%1$s</xliff:g> តាមរយៈ <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"សារ​ជា​សំឡេង"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g>m <xliff:g id="SECONDS">%s</xliff:g>s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g>s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g>m <xliff:g id="SECONDS">%d</xliff:g>s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g>s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> នាទី <xliff:g id="SECONDS">%d</xliff:g> វិនាទី"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> វិនាទី"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-kn/strings.xml b/java/com/android/dialer/calllogutils/res/values-kn/strings.xml
index 44feee9e3..6d6f8864a 100644
--- a/java/com/android/dialer/calllogutils/res/values-kn/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-kn/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"<xliff:g id="NUMBER">%1$s</xliff:g> ಮೂಲಕ"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="PHONEACCOUNT">%1$s</xliff:g> ರಲ್ಲಿ, <xliff:g id="NUMBER">%2$s</xliff:g> ಮೂಲಕ"</string>
<string name="voicemail_string" msgid="6029775151483803006">"ಧ್ವನಿಮೇಲ್"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g>ನಿ <xliff:g id="SECONDS">%s</xliff:g>ಸೆ"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g>ಸೆ"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g>ನಿ <xliff:g id="SECONDS">%d</xliff:g>ಸೆ"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g>ಸೆ"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> ನಿಮಿಷಗಳು <xliff:g id="SECONDS">%d</xliff:g> ಸೆಕೆಂಡುಗಳು"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> ಸೆಕೆಂಡುಗಳು"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-ko/strings.xml b/java/com/android/dialer/calllogutils/res/values-ko/strings.xml
index 76ba89b8a..ff49d5b83 100644
--- a/java/com/android/dialer/calllogutils/res/values-ko/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-ko/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"<xliff:g id="NUMBER">%1$s</xliff:g>번으로 수신"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="PHONEACCOUNT">%1$s</xliff:g>에서 <xliff:g id="NUMBER">%2$s</xliff:g>번으로 수신"</string>
<string name="voicemail_string" msgid="6029775151483803006">"음성사서함"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g>분 <xliff:g id="SECONDS">%s</xliff:g>초"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g>초"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g>분 <xliff:g id="SECONDS">%d</xliff:g>초"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g>초"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g>분 <xliff:g id="SECONDS">%d</xliff:g>초"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g>초"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-ky/strings.xml b/java/com/android/dialer/calllogutils/res/values-ky/strings.xml
index a91f0bd45..9ec8ca253 100644
--- a/java/com/android/dialer/calllogutils/res/values-ky/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-ky/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"<xliff:g id="NUMBER">%1$s</xliff:g> аркылуу"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="PHONEACCOUNT">%1$s</xliff:g> боюнча <xliff:g id="NUMBER">%2$s</xliff:g> аркылуу"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Үн почтасы"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g>мүн. <xliff:g id="SECONDS">%s</xliff:g>сек."</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g>сек."</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g>мүн. <xliff:g id="SECONDS">%d</xliff:g>сек."</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g>сек."</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> мүнөт <xliff:g id="SECONDS">%d</xliff:g> секунд"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> секунд"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-lo/strings.xml b/java/com/android/dialer/calllogutils/res/values-lo/strings.xml
index 343fc60dd..72efbd872 100644
--- a/java/com/android/dialer/calllogutils/res/values-lo/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-lo/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"ຜ່ານ <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"ຢູ່ <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, ຜ່ານ <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"ຂໍ້ຄວາມສຽງ"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g>ນທ <xliff:g id="SECONDS">%s</xliff:g>ວິ"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g>ວິ"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g>ນທ <xliff:g id="SECONDS">%d</xliff:g>ວິ"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g>ວິ"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> ນາທີ <xliff:g id="SECONDS">%d</xliff:g> ວິນາທີ"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> ວິນາທີ"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-lt/strings.xml b/java/com/android/dialer/calllogutils/res/values-lt/strings.xml
index 779e95267..7eaa42b8f 100644
--- a/java/com/android/dialer/calllogutils/res/values-lt/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-lt/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"numeriu <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, numeriu <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Balso paštas"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> sek."</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> min. <xliff:g id="SECONDS">%d</xliff:g> sek."</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> sek."</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> min. <xliff:g id="SECONDS">%d</xliff:g> sek."</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> sek."</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-lv/strings.xml b/java/com/android/dialer/calllogutils/res/values-lv/strings.xml
index d02d7ec3a..cf6b32efe 100644
--- a/java/com/android/dialer/calllogutils/res/values-lv/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-lv/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"izmantojot numuru <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"kontā <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, izmantojot numuru <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Balss pasts"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> min <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> minūtes <xliff:g id="SECONDS">%d</xliff:g> sekundes"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> sekundes"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-mk/strings.xml b/java/com/android/dialer/calllogutils/res/values-mk/strings.xml
index 21872a817..5747c258d 100644
--- a/java/com/android/dialer/calllogutils/res/values-mk/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-mk/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"на <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"на <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, на <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Говорна пошта"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> мин. <xliff:g id="SECONDS">%s</xliff:g> сек."</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> сек."</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> мин. <xliff:g id="SECONDS">%d</xliff:g> сек."</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> сек."</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> минути <xliff:g id="SECONDS">%d</xliff:g> секунди"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> секунди"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-ml/strings.xml b/java/com/android/dialer/calllogutils/res/values-ml/strings.xml
index f6507ae16..fcd59958c 100644
--- a/java/com/android/dialer/calllogutils/res/values-ml/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-ml/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"<xliff:g id="NUMBER">%1$s</xliff:g> നമ്പർ വഴി"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="NUMBER">%2$s</xliff:g> നമ്പർ വഴി, <xliff:g id="PHONEACCOUNT">%1$s</xliff:g> അക്കൗണ്ടിൽ"</string>
<string name="voicemail_string" msgid="6029775151483803006">"വോയ്‌സ്‌മെയിൽ"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g>മിനിറ്റ് <xliff:g id="SECONDS">%s</xliff:g>സെക്കന്‍ഡ്"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g>സെക്കൻഡ്"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g>മിനിറ്റ് <xliff:g id="SECONDS">%d</xliff:g>സെക്കന്‍ഡ്"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g>സെക്കൻഡ്"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> മിനിറ്റ് <xliff:g id="SECONDS">%d</xliff:g> സെക്കൻഡ്"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> സെക്കൻഡ്"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-mn/strings.xml b/java/com/android/dialer/calllogutils/res/values-mn/strings.xml
index 3f5bbd3ea..cc2043989 100644
--- a/java/com/android/dialer/calllogutils/res/values-mn/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-mn/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"<xliff:g id="NUMBER">%1$s</xliff:g>-р"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="PHONEACCOUNT">%1$s</xliff:g> дээр, <xliff:g id="NUMBER">%2$s</xliff:g>-р"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Дуут шуудан"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g>м <xliff:g id="SECONDS">%s</xliff:g>с"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g>с"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g>м <xliff:g id="SECONDS">%d</xliff:g>с"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g>с"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> минут <xliff:g id="SECONDS">%d</xliff:g> секунд"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> секунд"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-mr/strings.xml b/java/com/android/dialer/calllogutils/res/values-mr/strings.xml
index 893851f69..eb1080289 100644
--- a/java/com/android/dialer/calllogutils/res/values-mr/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-mr/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"<xliff:g id="NUMBER">%1$s</xliff:g> द्वारे"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="PHONEACCOUNT">%1$s</xliff:g> वर, <xliff:g id="NUMBER">%2$s</xliff:g> द्वारे"</string>
<string name="voicemail_string" msgid="6029775151483803006">"व्हॉइसमेल"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g>मि <xliff:g id="SECONDS">%s</xliff:g>से"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g>से"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g>मि <xliff:g id="SECONDS">%d</xliff:g>से"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g>से"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> मिनिटे <xliff:g id="SECONDS">%d</xliff:g> सेकंद"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> सेकंद"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-ms/strings.xml b/java/com/android/dialer/calllogutils/res/values-ms/strings.xml
index 1f7a22127..03e75161d 100644
--- a/java/com/android/dialer/calllogutils/res/values-ms/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-ms/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"melalui <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"pada <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, melalui <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Mel suara"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g>m <xliff:g id="SECONDS">%s</xliff:g>s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g>s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g>m <xliff:g id="SECONDS">%d</xliff:g>s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g>s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> minit <xliff:g id="SECONDS">%d</xliff:g> saat"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> saat"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-my/strings.xml b/java/com/android/dialer/calllogutils/res/values-my/strings.xml
index 8b1337e01..07f0f8915 100644
--- a/java/com/android/dialer/calllogutils/res/values-my/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-my/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"<xliff:g id="NUMBER">%1$s</xliff:g> မှတစ်ဆင့်"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="PHONEACCOUNT">%1$s</xliff:g> တွင်၊ <xliff:g id="NUMBER">%2$s</xliff:g> မှတစ်ဆင့်"</string>
<string name="voicemail_string" msgid="6029775151483803006">"အသံမေးလ်"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g>မိနစ် <xliff:g id="SECONDS">%s</xliff:g>စက္ကန့်"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g>စက္ကန့်"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g>မိနစ် <xliff:g id="SECONDS">%d</xliff:g>စက္ကန့်"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g>စက္ကန့်"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> မိနစ် <xliff:g id="SECONDS">%d</xliff:g> စက္ကန့်"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> စက္ကန့်"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-nb/strings.xml b/java/com/android/dialer/calllogutils/res/values-nb/strings.xml
index 7d4622004..0596aa1bd 100644
--- a/java/com/android/dialer/calllogutils/res/values-nb/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-nb/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"via <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"på <xliff:g id="PHONEACCOUNT">%1$s</xliff:g> via <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Talepost"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> m og <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> m og <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> minutter, <xliff:g id="SECONDS">%d</xliff:g> sekunder"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> sekunder"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-ne/strings.xml b/java/com/android/dialer/calllogutils/res/values-ne/strings.xml
index d498395f0..31e1e3279 100644
--- a/java/com/android/dialer/calllogutils/res/values-ne/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-ne/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"<xliff:g id="NUMBER">%1$s</xliff:g> मार्फत"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="PHONEACCOUNT">%1$s</xliff:g> मा, <xliff:g id="NUMBER">%2$s</xliff:g> मार्फत"</string>
<string name="voicemail_string" msgid="6029775151483803006">"भ्वाइस मेल"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g>मिनेट <xliff:g id="SECONDS">%s</xliff:g>सेकेन्ड"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g>सेकेन्ड"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g>मिनेट <xliff:g id="SECONDS">%d</xliff:g>सेकेन्ड"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g>सेकेन्ड"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> मिनेट <xliff:g id="SECONDS">%d</xliff:g> सेकेन्ड"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> सेकेन्ड"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-nl/strings.xml b/java/com/android/dialer/calllogutils/res/values-nl/strings.xml
index 0fcc6ca7f..6801082b3 100644
--- a/java/com/android/dialer/calllogutils/res/values-nl/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-nl/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"via <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"op <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, via <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Voicemail"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> m <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> m <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> minuten, <xliff:g id="SECONDS">%d</xliff:g> seconden"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> seconden"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-no/strings.xml b/java/com/android/dialer/calllogutils/res/values-no/strings.xml
index 7d4622004..0596aa1bd 100644
--- a/java/com/android/dialer/calllogutils/res/values-no/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-no/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"via <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"på <xliff:g id="PHONEACCOUNT">%1$s</xliff:g> via <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Talepost"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> m og <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> m og <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> minutter, <xliff:g id="SECONDS">%d</xliff:g> sekunder"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> sekunder"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-pa/strings.xml b/java/com/android/dialer/calllogutils/res/values-pa/strings.xml
index f4cde52ff..e7c6119e2 100644
--- a/java/com/android/dialer/calllogutils/res/values-pa/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-pa/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"<xliff:g id="NUMBER">%1$s</xliff:g> ਰਾਹੀਂ"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="PHONEACCOUNT">%1$s</xliff:g> \'ਤੇ, <xliff:g id="NUMBER">%2$s</xliff:g> ਰਾਹੀਂ"</string>
<string name="voicemail_string" msgid="6029775151483803006">"ਵੌਇਸਮੇਲ"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g>ਮਿੰ <xliff:g id="SECONDS">%s</xliff:g>ਸਕਿੰ"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g>ਸਕਿੰ"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g>ਮਿੰ <xliff:g id="SECONDS">%d</xliff:g>ਸਕਿੰ"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g>ਸਕਿੰ"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> ਮਿੰਟ <xliff:g id="SECONDS">%d</xliff:g> ਸਕਿੰਟ"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> ਸਕਿੰਟ"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-pl/strings.xml b/java/com/android/dialer/calllogutils/res/values-pl/strings.xml
index f1396cd88..d863c1d9d 100644
--- a/java/com/android/dialer/calllogutils/res/values-pl/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-pl/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"przez <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"na koncie <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, przez <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Poczta głosowa"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> min <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> min <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-pt-rBR/strings.xml b/java/com/android/dialer/calllogutils/res/values-pt-rBR/strings.xml
index 1e8b733b9..5182576e1 100644
--- a/java/com/android/dialer/calllogutils/res/values-pt-rBR/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-pt-rBR/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"pelo número <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"em <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, pelo número <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Correio de voz"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> min <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> minutos <xliff:g id="SECONDS">%d</xliff:g> segundos"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> segundos"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-pt-rPT/strings.xml b/java/com/android/dialer/calllogutils/res/values-pt-rPT/strings.xml
index f24b83af2..b9c4d2459 100644
--- a/java/com/android/dialer/calllogutils/res/values-pt-rPT/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-pt-rPT/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"através do número <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"em <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, através do número <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Correio de voz"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> min <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> minutos <xliff:g id="SECONDS">%d</xliff:g> segundos"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> segundos"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-pt/strings.xml b/java/com/android/dialer/calllogutils/res/values-pt/strings.xml
index 1e8b733b9..5182576e1 100644
--- a/java/com/android/dialer/calllogutils/res/values-pt/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-pt/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"pelo número <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"em <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, pelo número <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Correio de voz"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> min <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> minutos <xliff:g id="SECONDS">%d</xliff:g> segundos"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> segundos"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-ro/strings.xml b/java/com/android/dialer/calllogutils/res/values-ro/strings.xml
index 84497540b..fb4ad6ba1 100644
--- a/java/com/android/dialer/calllogutils/res/values-ro/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-ro/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"prin <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"pe <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, prin <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Mesagerie vocală"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sec."</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> sec."</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> min. <xliff:g id="SECONDS">%d</xliff:g> sec."</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> sec."</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> minute, <xliff:g id="SECONDS">%d</xliff:g> secunde"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> secunde"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-ru/strings.xml b/java/com/android/dialer/calllogutils/res/values-ru/strings.xml
index 8e6120ab1..7fc772bbb 100644
--- a/java/com/android/dialer/calllogutils/res/values-ru/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-ru/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"Номер <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, номер <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Голосовая почта"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> мин. <xliff:g id="SECONDS">%s</xliff:g> сек."</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> сек."</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> мин. <xliff:g id="SECONDS">%d</xliff:g> сек."</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> сек."</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> мин. <xliff:g id="SECONDS">%d</xliff:g> сек."</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> сек."</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-si/strings.xml b/java/com/android/dialer/calllogutils/res/values-si/strings.xml
index fa24c1c07..5a6e9e650 100644
--- a/java/com/android/dialer/calllogutils/res/values-si/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-si/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"<xliff:g id="NUMBER">%1$s</xliff:g> හරහා"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="PHONEACCOUNT">%1$s</xliff:g> මත, <xliff:g id="NUMBER">%2$s</xliff:g> හරහා"</string>
<string name="voicemail_string" msgid="6029775151483803006">"හඬ තැපෑල"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"මි<xliff:g id="MINUTES">%s</xliff:g> ත<xliff:g id="SECONDS">%s</xliff:g>"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"තත්<xliff:g id="SECONDS">%s</xliff:g>"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"මි<xliff:g id="MINUTES">%d</xliff:g> ත<xliff:g id="SECONDS">%d</xliff:g>"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"තත්<xliff:g id="SECONDS">%d</xliff:g>"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"මිනිත්තු <xliff:g id="MINUTES">%d</xliff:g> තත්පර <xliff:g id="SECONDS">%d</xliff:g>"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"තත්පර <xliff:g id="SECONDS">%d</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-sk/strings.xml b/java/com/android/dialer/calllogutils/res/values-sk/strings.xml
index ee32a0875..edd431a55 100644
--- a/java/com/android/dialer/calllogutils/res/values-sk/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-sk/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"prostredníctvom čísla <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"v účte <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, prostredníctvom čísla <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Hlasová schránka"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> min <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> min, <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-sl/strings.xml b/java/com/android/dialer/calllogutils/res/values-sl/strings.xml
index 0cf0ab2ca..ee2a64180 100644
--- a/java/com/android/dialer/calllogutils/res/values-sl/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-sl/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"prek številke <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"v računu <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, prek številke <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Odzivnik"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> min <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> min in <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-sq/strings.xml b/java/com/android/dialer/calllogutils/res/values-sq/strings.xml
index b2a28357c..764a35d98 100644
--- a/java/com/android/dialer/calllogutils/res/values-sq/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-sq/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"nëpërmjet <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"në <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, nëpërmjet <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Posta zanore"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> minuta e <xliff:g id="SECONDS">%s</xliff:g> sekonda"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> sekonda"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> minuta e <xliff:g id="SECONDS">%d</xliff:g> sekonda"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> sekonda"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> minuta <xliff:g id="SECONDS">%d</xliff:g> sekonda"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> sekonda"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-sr/strings.xml b/java/com/android/dialer/calllogutils/res/values-sr/strings.xml
index 49f7473d4..bef1b1683 100644
--- a/java/com/android/dialer/calllogutils/res/values-sr/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-sr/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"преко <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"на <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, преко <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Говорна пошта"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> м <xliff:g id="SECONDS">%s</xliff:g> с"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> с"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> м <xliff:g id="SECONDS">%d</xliff:g> с"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> с"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> мин <xliff:g id="SECONDS">%d</xliff:g> сек"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> сек"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-sv/strings.xml b/java/com/android/dialer/calllogutils/res/values-sv/strings.xml
index eff7210ef..630af12de 100644
--- a/java/com/android/dialer/calllogutils/res/values-sv/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-sv/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"med <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"på <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, med <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Röstbrevlåda"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> m <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> m <xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> minuter, <xliff:g id="SECONDS">%d</xliff:g> sekunder"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> sekunder"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-sw/strings.xml b/java/com/android/dialer/calllogutils/res/values-sw/strings.xml
index 7810fb14b..fae34e4f1 100644
--- a/java/com/android/dialer/calllogutils/res/values-sw/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-sw/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"kupitia <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"kwenye <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, kupitia <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Ujumbe wa sauti"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"Dakika <xliff:g id="MINUTES">%s</xliff:g> sekunde <xliff:g id="SECONDS">%s</xliff:g>"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"Sekunde <xliff:g id="SECONDS">%s</xliff:g>"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"Dakika <xliff:g id="MINUTES">%d</xliff:g> sekunde <xliff:g id="SECONDS">%d</xliff:g>"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"Sekunde <xliff:g id="SECONDS">%d</xliff:g>"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"Dakika <xliff:g id="MINUTES">%d</xliff:g> sekunde <xliff:g id="SECONDS">%d</xliff:g>"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"Sekunde <xliff:g id="SECONDS">%d</xliff:g>"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-ta/strings.xml b/java/com/android/dialer/calllogutils/res/values-ta/strings.xml
index b3e60bbc8..4adbe0ec2 100644
--- a/java/com/android/dialer/calllogutils/res/values-ta/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-ta/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"<xliff:g id="NUMBER">%1$s</xliff:g> மூலம்"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="PHONEACCOUNT">%1$s</xliff:g> இல் <xliff:g id="NUMBER">%2$s</xliff:g> மூலம்"</string>
<string name="voicemail_string" msgid="6029775151483803006">"குரலஞ்சல்"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g>நி <xliff:g id="SECONDS">%s</xliff:g>வி"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g>வி"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g>நி <xliff:g id="SECONDS">%d</xliff:g>வி"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g>வி"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> நிமிடங்கள் <xliff:g id="SECONDS">%d</xliff:g> விநாடிகள்"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> விநாடிகள்"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-te/strings.xml b/java/com/android/dialer/calllogutils/res/values-te/strings.xml
index 4d6553765..91471538d 100644
--- a/java/com/android/dialer/calllogutils/res/values-te/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-te/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"<xliff:g id="NUMBER">%1$s</xliff:g> ద్వారా"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="PHONEACCOUNT">%1$s</xliff:g>లో, <xliff:g id="NUMBER">%2$s</xliff:g> ద్వారా"</string>
<string name="voicemail_string" msgid="6029775151483803006">"వాయిస్ మెయిల్"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g>ని <xliff:g id="SECONDS">%s</xliff:g>సె"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g>సె"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g>ని <xliff:g id="SECONDS">%d</xliff:g>సె"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g>సె"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> నిమిషాల <xliff:g id="SECONDS">%d</xliff:g> సెకన్లు"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> సెకన్లు"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-th/strings.xml b/java/com/android/dialer/calllogutils/res/values-th/strings.xml
index 46d9ec028..33bf725e4 100644
--- a/java/com/android/dialer/calllogutils/res/values-th/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-th/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"ผ่าน <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"ใน <xliff:g id="PHONEACCOUNT">%1$s</xliff:g> ผ่าน <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"ข้อความเสียง"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> นาที <xliff:g id="SECONDS">%s</xliff:g> วินาที"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> วินาที"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> นาที <xliff:g id="SECONDS">%d</xliff:g> วินาที"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> วินาที"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> นาที <xliff:g id="SECONDS">%d</xliff:g> วินาที"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> วินาที"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-tl/strings.xml b/java/com/android/dialer/calllogutils/res/values-tl/strings.xml
index b4f4045e3..b4d3e4972 100644
--- a/java/com/android/dialer/calllogutils/res/values-tl/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-tl/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"sa pamamagitan ng <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"sa <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, sa pamamagitan ng <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Voicemail"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> (na) min. <xliff:g id="SECONDS">%s</xliff:g> (na) segundo"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> (na) segundo"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> (na) min. <xliff:g id="SECONDS">%d</xliff:g> (na) segundo"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> (na) segundo"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> (na) minuto <xliff:g id="SECONDS">%d</xliff:g> (na) segundo"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> (na) segundo"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-tr/strings.xml b/java/com/android/dialer/calllogutils/res/values-tr/strings.xml
index 1a2e762f1..b8dc84cee 100644
--- a/java/com/android/dialer/calllogutils/res/values-tr/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-tr/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"<xliff:g id="NUMBER">%1$s</xliff:g> kullanılarak"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="NUMBER">%2$s</xliff:g> kullanılarak <xliff:g id="PHONEACCOUNT">%1$s</xliff:g> hesabında"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Sesli mesaj"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> dk. <xliff:g id="SECONDS">%s</xliff:g> sn."</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> sn."</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> dk. <xliff:g id="SECONDS">%d</xliff:g> sn."</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> sn."</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> dakika <xliff:g id="SECONDS">%d</xliff:g> saniye"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> saniye"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-uk/strings.xml b/java/com/android/dialer/calllogutils/res/values-uk/strings.xml
index 5f3e0aecf..c62f2b0ad 100644
--- a/java/com/android/dialer/calllogutils/res/values-uk/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-uk/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"на номер <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"на <xliff:g id="PHONEACCOUNT">%1$s</xliff:g> на номер <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Голосова пошта"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> хв <xliff:g id="SECONDS">%s</xliff:g> с"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> с"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> хв <xliff:g id="SECONDS">%d</xliff:g> с"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> с"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> хв <xliff:g id="SECONDS">%d</xliff:g> с"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> с"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-ur/strings.xml b/java/com/android/dialer/calllogutils/res/values-ur/strings.xml
index 9872d4368..e9a115452 100644
--- a/java/com/android/dialer/calllogutils/res/values-ur/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-ur/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"بذریعہ <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="PHONEACCOUNT">%1$s</xliff:g> پر، بذریعہ <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"صوتی میل"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g>منٹ <xliff:g id="SECONDS">%s</xliff:g>سیکنڈ"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g>سیکنڈ"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g>منٹ <xliff:g id="SECONDS">%d</xliff:g>سیکنڈ"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g>سیکنڈ"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> منٹ <xliff:g id="SECONDS">%d</xliff:g> سیکنڈ"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> سیکنڈ"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-uz/strings.xml b/java/com/android/dialer/calllogutils/res/values-uz/strings.xml
index 7917f4790..b1fe269c2 100644
--- a/java/com/android/dialer/calllogutils/res/values-uz/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-uz/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"<xliff:g id="NUMBER">%1$s</xliff:g> raqami orqali"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, <xliff:g id="NUMBER">%2$s</xliff:g> raqami orqali"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Ovozli pochta"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> daq. <xliff:g id="SECONDS">%s</xliff:g> son."</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> son."</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> daq. <xliff:g id="SECONDS">%d</xliff:g> son."</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> son."</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> daqiqa <xliff:g id="SECONDS">%d</xliff:g> soniya"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> soniya"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-vi/strings.xml b/java/com/android/dialer/calllogutils/res/values-vi/strings.xml
index b722dc234..790997567 100644
--- a/java/com/android/dialer/calllogutils/res/values-vi/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-vi/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"qua <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"trên <xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, qua <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Thư thoại"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> phút <xliff:g id="SECONDS">%s</xliff:g> giây"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> giây"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> phút <xliff:g id="SECONDS">%d</xliff:g> giây"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> giây"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> phút <xliff:g id="SECONDS">%d</xliff:g> giây"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> giây"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-zh-rCN/strings.xml b/java/com/android/dialer/calllogutils/res/values-zh-rCN/strings.xml
index 6f20642e3..0fd41e89b 100644
--- a/java/com/android/dialer/calllogutils/res/values-zh-rCN/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-zh-rCN/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"通过 <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"帐号:<xliff:g id="PHONEACCOUNT">%1$s</xliff:g>,通过 <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"语音邮件"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> 分 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> 分 <xliff:g id="SECONDS">%d</xliff:g> 秒"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> 秒"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> 分 <xliff:g id="SECONDS">%d</xliff:g> 秒"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> 秒"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-zh-rHK/strings.xml b/java/com/android/dialer/calllogutils/res/values-zh-rHK/strings.xml
index 83b68acfb..57c669349 100644
--- a/java/com/android/dialer/calllogutils/res/values-zh-rHK/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-zh-rHK/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"透過 <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"在 <xliff:g id="PHONEACCOUNT">%1$s</xliff:g> 上透過 <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"留言"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> 分 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> 分 <xliff:g id="SECONDS">%d</xliff:g> 秒"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> 秒"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> 分鐘 <xliff:g id="SECONDS">%d</xliff:g> 秒"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> 秒"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-zh-rTW/strings.xml b/java/com/android/dialer/calllogutils/res/values-zh-rTW/strings.xml
index 1566f05d4..e9816481e 100644
--- a/java/com/android/dialer/calllogutils/res/values-zh-rTW/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-zh-rTW/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"透過 <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"<xliff:g id="PHONEACCOUNT">%1$s</xliff:g>,透過 <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"語音留言"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g> 分鐘 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g> 分鐘 <xliff:g id="SECONDS">%d</xliff:g> 秒"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g> 秒"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> 分 <xliff:g id="SECONDS">%d</xliff:g> 秒"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> 秒"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values-zu/strings.xml b/java/com/android/dialer/calllogutils/res/values-zu/strings.xml
index 289ff34fe..226d07d6d 100644
--- a/java/com/android/dialer/calllogutils/res/values-zu/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-zu/strings.xml
@@ -35,6 +35,8 @@
<string name="description_via_number" msgid="7682575124846343076">"nge-<xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="description_via_number_phone_account" msgid="4345445677508018830">"ku-<xliff:g id="PHONEACCOUNT">%1$s</xliff:g>, nge-<xliff:g id="NUMBER">%2$s</xliff:g>"</string>
<string name="voicemail_string" msgid="6029775151483803006">"Ivoyisimeyili"</string>
- <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%s</xliff:g>m <xliff:g id="SECONDS">%s</xliff:g>s"</string>
- <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%s</xliff:g>s"</string>
+ <string name="call_details_duration_format" msgid="296780245582838089">"<xliff:g id="MINUTES">%d</xliff:g>m <xliff:g id="SECONDS">%d</xliff:g>s"</string>
+ <string name="call_details_short_duration_format" msgid="8079910850626312453">"<xliff:g id="SECONDS">%d</xliff:g>s"</string>
+ <string name="call_details_duration_format_a11y" msgid="5116338920917720252">"<xliff:g id="MINUTES">%d</xliff:g> amaminithi <xliff:g id="SECONDS">%d</xliff:g> amasekhondi"</string>
+ <string name="call_details_short_duration_format_a11y" msgid="4971559778168100952">"<xliff:g id="SECONDS">%d</xliff:g> amasekhondi"</string>
</resources>
diff --git a/java/com/android/dialer/calllogutils/res/values/strings.xml b/java/com/android/dialer/calllogutils/res/values/strings.xml
index 01a5a9b87..22bfb7b93 100644
--- a/java/com/android/dialer/calllogutils/res/values/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values/strings.xml
@@ -83,8 +83,14 @@
<string name="voicemail_string">Voicemail</string>
<!-- A nicely formatted call duration displayed when viewing call details. For example "42m 28s" -->
- <string name="call_details_duration_format"><xliff:g example="42" id="minutes">%s</xliff:g>m <xliff:g example="28" id="seconds">%s</xliff:g>s</string>
+ <string name="call_details_duration_format"><xliff:g example="42" id="minutes">%d</xliff:g>m <xliff:g example="28" id="seconds">%d</xliff:g>s</string>
<!-- A nicely formatted call duration displayed when viewing call details for duration less than 1 minute. For example "28s" -->
- <string name="call_details_short_duration_format"><xliff:g example="28" id="seconds">%s</xliff:g>s</string>
+ <string name="call_details_short_duration_format"><xliff:g example="28" id="seconds">%d</xliff:g>s</string>
+
+ <!-- A call duration announced when viewing call details for accessibility. For example "42 minutes 28 seconds".-->
+ <string name="call_details_duration_format_a11y"><xliff:g example="42" id="minutes">%d</xliff:g> minutes <xliff:g example="28" id="seconds">%d</xliff:g> seconds</string>
+
+ <!-- A call duration announced when viewing call details for accessibility. For example "28 sec" -->
+ <string name="call_details_short_duration_format_a11y"><xliff:g example="28" id="seconds">%d</xliff:g> seconds</string>
</resources> \ No newline at end of file
diff --git a/java/com/android/dialer/common/concurrent/DefaultDialerExecutorFactory.java b/java/com/android/dialer/common/concurrent/DefaultDialerExecutorFactory.java
index 80ed725bc..4b6d81afd 100644
--- a/java/com/android/dialer/common/concurrent/DefaultDialerExecutorFactory.java
+++ b/java/com/android/dialer/common/concurrent/DefaultDialerExecutorFactory.java
@@ -28,10 +28,14 @@ import com.android.dialer.common.concurrent.DialerExecutor.Worker;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
+import javax.inject.Inject;
/** The production {@link DialerExecutorFactory}. */
public class DefaultDialerExecutorFactory implements DialerExecutorFactory {
+ @Inject
+ public DefaultDialerExecutorFactory() {}
+
@Override
@NonNull
public <InputT, OutputT> DialerExecutor.Builder<InputT, OutputT> createUiTaskBuilder(
@@ -116,14 +120,15 @@ public class DefaultDialerExecutorFactory implements DialerExecutorFactory {
@NonNull
@Override
public DialerExecutor<InputT> build() {
- dialerUiTaskFragment = DialerUiTaskFragment.create(
- fragmentManager,
- id,
- super.worker,
- super.successListener,
- super.failureListener,
- serialExecutorService,
- parallelExecutorService);
+ dialerUiTaskFragment =
+ DialerUiTaskFragment.create(
+ fragmentManager,
+ id,
+ super.worker,
+ super.successListener,
+ super.failureListener,
+ serialExecutorService,
+ parallelExecutorService);
return new UiDialerExecutor<>(dialerUiTaskFragment);
}
}
diff --git a/java/com/android/dialer/common/concurrent/DialerExecutor.java b/java/com/android/dialer/common/concurrent/DialerExecutor.java
index b0d1eac66..0237e3a05 100644
--- a/java/com/android/dialer/common/concurrent/DialerExecutor.java
+++ b/java/com/android/dialer/common/concurrent/DialerExecutor.java
@@ -33,7 +33,7 @@ public interface DialerExecutor<InputT> {
interface Worker<InputT, OutputT> {
@WorkerThread
@Nullable
- OutputT doInBackground(@Nullable InputT input);
+ OutputT doInBackground(@Nullable InputT input) throws Throwable;
}
/** Functional interface for handling the result of background work. */
diff --git a/java/com/android/dialer/common/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/common/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..52b5f67e6
--- /dev/null
+++ b/java/com/android/dialer/common/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="network_name_wifi" msgid="3026388992566895417">"Wi-Fi"</string>
+ <string name="network_name_mobile" msgid="7655711935020766459">"Mobilni uređaji"</string>
+</resources>
diff --git a/java/com/android/dialer/constants/ScheduledJobIds.java b/java/com/android/dialer/constants/ScheduledJobIds.java
index 88e9a3d4f..fdb3facbc 100644
--- a/java/com/android/dialer/constants/ScheduledJobIds.java
+++ b/java/com/android/dialer/constants/ScheduledJobIds.java
@@ -28,4 +28,7 @@ public final class ScheduledJobIds {
// This job refreshes dynamic launcher shortcuts.
public static final int SHORTCUT_PERIODIC_JOB = 100;
+
+ public static final int VVM_TASK_SCHEDULER_JOB = 200;
+ public static final int VVM_STATUS_CHECK_JOB = 201;
}
diff --git a/java/com/android/dialer/contactsfragment/AndroidManifest.xml b/java/com/android/dialer/contactsfragment/AndroidManifest.xml
new file mode 100644
index 000000000..3c2750073
--- /dev/null
+++ b/java/com/android/dialer/contactsfragment/AndroidManifest.xml
@@ -0,0 +1,16 @@
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+<manifest package="com.android.dialer.contactsfragment"/>
diff --git a/java/com/android/dialer/contactsfragment/ContactViewHolder.java b/java/com/android/dialer/contactsfragment/ContactViewHolder.java
new file mode 100644
index 000000000..5df106dbc
--- /dev/null
+++ b/java/com/android/dialer/contactsfragment/ContactViewHolder.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.dialer.contactsfragment;
+
+import android.net.Uri;
+import android.provider.ContactsContract.QuickContact;
+import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.QuickContactBadge;
+import android.widget.TextView;
+import com.android.dialer.common.Assert;
+
+/** View holder for a contact. */
+final class ContactViewHolder extends RecyclerView.ViewHolder implements OnClickListener {
+
+ private final TextView header;
+ private final TextView name;
+ private final QuickContactBadge photo;
+
+ private String headerText;
+ private Uri contactUri;
+
+ public ContactViewHolder(View itemView) {
+ super(itemView);
+ itemView.findViewById(R.id.click_target).setOnClickListener(this);
+ header = (TextView) itemView.findViewById(R.id.header);
+ name = (TextView) itemView.findViewById(R.id.contact_name);
+ photo = (QuickContactBadge) itemView.findViewById(R.id.photo);
+ }
+
+ /**
+ * Binds the ViewHolder with relevant data.
+ *
+ * @param headerText populates the header view.
+ * @param displayName populates the name view.
+ * @param contactUri to be shown by the contact card on photo click.
+ * @param showHeader if header view should be shown {@code True}, {@code False} otherwise.
+ */
+ public void bind(String headerText, String displayName, Uri contactUri, boolean showHeader) {
+ Assert.checkArgument(!TextUtils.isEmpty(displayName));
+ this.contactUri = contactUri;
+ this.headerText = headerText;
+
+ name.setText(displayName);
+ header.setText(headerText);
+ header.setVisibility(showHeader ? View.VISIBLE : View.INVISIBLE);
+ }
+
+ public QuickContactBadge getPhoto() {
+ return photo;
+ }
+
+ public String getHeader() {
+ return headerText;
+ }
+
+ public TextView getHeaderView() {
+ return header;
+ }
+
+ @Override
+ public void onClick(View v) {
+ QuickContact.showQuickContact(
+ photo.getContext(), photo, contactUri, QuickContact.MODE_LARGE, null /* excludeMimes */);
+ }
+}
diff --git a/java/com/android/dialer/contactsfragment/ContactsAdapter.java b/java/com/android/dialer/contactsfragment/ContactsAdapter.java
new file mode 100644
index 000000000..4692eff5d
--- /dev/null
+++ b/java/com/android/dialer/contactsfragment/ContactsAdapter.java
@@ -0,0 +1,149 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.dialer.contactsfragment;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.ContactsContract.Contacts;
+import android.support.v4.util.ArrayMap;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.ViewGroup;
+import android.widget.TextView;
+import com.android.contacts.common.ContactPhotoManager;
+import com.android.dialer.common.Assert;
+
+/** List adapter for the union of all contacts associated with every account on the device. */
+final class ContactsAdapter extends RecyclerView.Adapter<ContactViewHolder> {
+
+ private final ArrayMap<ContactViewHolder, Integer> holderMap = new ArrayMap<>();
+ private final Context context;
+ private final Cursor cursor;
+
+ // List of contact sublist headers
+ private final String[] headers;
+
+ // Number of contacts that correspond to each header in {@code headers}.
+ private final int[] counts;
+
+ public ContactsAdapter(Context context, Cursor cursor) {
+ this.context = context;
+ this.cursor = cursor;
+ headers = cursor.getExtras().getStringArray(Contacts.EXTRA_ADDRESS_BOOK_INDEX_TITLES);
+ counts = cursor.getExtras().getIntArray(Contacts.EXTRA_ADDRESS_BOOK_INDEX_COUNTS);
+ }
+
+ @Override
+ public ContactViewHolder onCreateViewHolder(ViewGroup parent, int position) {
+ return new ContactViewHolder(
+ LayoutInflater.from(context).inflate(R.layout.contact_row, parent, false));
+ }
+
+ @Override
+ public void onBindViewHolder(ContactViewHolder contactViewHolder, int position) {
+ holderMap.put(contactViewHolder, position);
+ cursor.moveToPosition(position);
+
+ String name = getDisplayName(cursor);
+ String header = getHeaderString(position);
+ Uri contactUri = getContactUri(cursor);
+
+ ContactPhotoManager.getInstance(context)
+ .loadDialerThumbnailOrPhoto(
+ contactViewHolder.getPhoto(),
+ contactUri,
+ getPhotoId(cursor),
+ getPhotoUri(cursor),
+ name,
+ 0);
+
+ String photoDescription =
+ context.getString(com.android.contacts.common.R.string.description_quick_contact_for, name);
+ contactViewHolder.getPhoto().setContentDescription(photoDescription);
+
+ // Always show the view holder's header if it's the first item in the list. Otherwise, compare
+ // it to the previous element and only show the anchored header if the row elements fall into
+ // the same sublists.
+ if (position == 0) {
+ contactViewHolder.bind(header, name, contactUri, true);
+ } else {
+ boolean showHeader = !header.equals(getHeaderString(position - 1));
+ contactViewHolder.bind(header, name, contactUri, showHeader);
+ }
+ }
+
+ public void refreshHeaders() {
+ for (ContactViewHolder holder : holderMap.keySet()) {
+ onBindViewHolder(holder, holderMap.get(holder));
+ }
+ }
+
+ @Override
+ public int getItemCount() {
+ return cursor == null ? 0 : cursor.getCount();
+ }
+
+ public String getHeader(int position) {
+ return getHolderAt(position).getHeader();
+ }
+
+ public TextView getHeaderView(int position) {
+ return getHolderAt(position).getHeaderView();
+ }
+
+ public void setHeaderVisibility(int position, int visibility) {
+ getHolderAt(position).getHeaderView().setVisibility(visibility);
+ }
+
+ private ContactViewHolder getHolderAt(int position) {
+ for (ContactViewHolder holder : holderMap.keySet()) {
+ if (holderMap.get(holder) == position) {
+ return holder;
+ }
+ }
+ throw Assert.createIllegalStateFailException("No holder for position: " + position);
+ }
+
+ private static String getDisplayName(Cursor cursor) {
+ return cursor.getString(ContactsCursorLoader.CONTACT_DISPLAY_NAME);
+ }
+
+ private static long getPhotoId(Cursor cursor) {
+ return cursor.getLong(ContactsCursorLoader.CONTACT_PHOTO_ID);
+ }
+
+ private static Uri getPhotoUri(Cursor cursor) {
+ String photoUri = cursor.getString(ContactsCursorLoader.CONTACT_PHOTO_URI);
+ return photoUri == null ? null : Uri.parse(photoUri);
+ }
+
+ private static Uri getContactUri(Cursor cursor) {
+ long contactId = cursor.getLong(ContactsCursorLoader.CONTACT_ID);
+ String lookupKey = cursor.getString(ContactsCursorLoader.CONTACT_LOOKUP_KEY);
+ return Contacts.getLookupUri(contactId, lookupKey);
+ }
+
+ private String getHeaderString(int position) {
+ int index = -1;
+ int sum = 0;
+ while (sum <= position) {
+ sum += counts[++index];
+ }
+ return headers[index];
+ }
+}
diff --git a/java/com/android/dialer/contactsfragment/ContactsCursorLoader.java b/java/com/android/dialer/contactsfragment/ContactsCursorLoader.java
new file mode 100644
index 000000000..6d4d21079
--- /dev/null
+++ b/java/com/android/dialer/contactsfragment/ContactsCursorLoader.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.dialer.contactsfragment;
+
+import android.content.Context;
+import android.content.CursorLoader;
+import android.provider.ContactsContract.Contacts;
+
+/** Cursor Loader for {@link ContactsFragment}. */
+final class ContactsCursorLoader extends CursorLoader {
+
+ public static final int CONTACT_ID = 0;
+ public static final int CONTACT_DISPLAY_NAME = 1;
+ public static final int CONTACT_PHOTO_ID = 2;
+ public static final int CONTACT_PHOTO_URI = 3;
+ public static final int CONTACT_LOOKUP_KEY = 4;
+
+ public static final String[] CONTACTS_PROJECTION =
+ new String[] {
+ Contacts._ID, // 0
+ Contacts.DISPLAY_NAME_PRIMARY, // 1
+ Contacts.PHOTO_ID, // 2
+ Contacts.PHOTO_THUMBNAIL_URI, // 3
+ Contacts.LOOKUP_KEY, // 4
+ };
+
+ public ContactsCursorLoader(Context context) {
+ super(
+ context,
+ Contacts.CONTENT_URI
+ .buildUpon()
+ .appendQueryParameter(Contacts.EXTRA_ADDRESS_BOOK_INDEX, "true")
+ .build(),
+ CONTACTS_PROJECTION,
+ null,
+ null,
+ Contacts.SORT_KEY_PRIMARY + " ASC");
+ }
+}
diff --git a/java/com/android/dialer/contactsfragment/ContactsFragment.java b/java/com/android/dialer/contactsfragment/ContactsFragment.java
new file mode 100644
index 000000000..18220601f
--- /dev/null
+++ b/java/com/android/dialer/contactsfragment/ContactsFragment.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.dialer.contactsfragment;
+
+import android.app.Fragment;
+import android.app.LoaderManager.LoaderCallbacks;
+import android.content.Loader;
+import android.database.Cursor;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnScrollChangeListener;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+/** Fragment containing a list of all contacts. */
+public class ContactsFragment extends Fragment
+ implements LoaderCallbacks<Cursor>, OnScrollChangeListener {
+
+ private TextView anchoredHeader;
+ private RecyclerView recyclerView;
+ private LinearLayoutManager manager;
+ private ContactsAdapter adapter;
+
+ @Nullable
+ @Override
+ public View onCreateView(
+ LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ View view = inflater.inflate(R.layout.fragment_contacts, container, false);
+ anchoredHeader = (TextView) view.findViewById(R.id.header);
+ manager = new LinearLayoutManager(getContext());
+
+ // TODO: Handle contacts permission denied view
+ // TODO: Handle 0 contacts layout
+ recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
+ recyclerView.setLayoutManager(manager);
+ getLoaderManager().initLoader(0, null, this);
+ return view;
+ }
+
+ @Override
+ public Loader<Cursor> onCreateLoader(int id, Bundle args) {
+ return new ContactsCursorLoader(getContext());
+ }
+
+ @Override
+ public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
+ // TODO setup fast scroller.
+ adapter = new ContactsAdapter(getContext(), cursor);
+ recyclerView.setAdapter(adapter);
+ if (adapter.getItemCount() > 1) {
+ recyclerView.setOnScrollChangeListener(this);
+ }
+ }
+
+ @Override
+ public void onLoaderReset(Loader<Cursor> loader) {
+ recyclerView.setAdapter(null);
+ recyclerView.setOnScrollChangeListener(null);
+ adapter = null;
+ }
+
+ /*
+ * When our recycler view updates, we need to ensure that our row headers and anchored header
+ * are in the correct state.
+ *
+ * The general rule is, when the row headers are shown, our anchored header is hidden. When the
+ * recycler view is scrolling through a sublist that has more than one element, we want to show
+ * out anchored header, to create the illusion that our row header has been anchored. In all
+ * other situations, we want to hide the anchor because that means we are transitioning between
+ * two sublists.
+ */
+ @Override
+ public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
+ int firstVisibleItem = manager.findFirstVisibleItemPosition();
+ int firstCompletelyVisible = manager.findFirstCompletelyVisibleItemPosition();
+
+ // If the user swipes to the top of the list very quickly, there is some strange behavior
+ // between this method updating headers and adapter#onBindViewHolder updating headers.
+ // To overcome this, we refresh the headers to ensure they are correct.
+ if (firstVisibleItem == firstCompletelyVisible && firstVisibleItem == 0) {
+ adapter.refreshHeaders();
+ anchoredHeader.setVisibility(View.INVISIBLE);
+ } else {
+ boolean showAnchor =
+ adapter.getHeader(firstVisibleItem).equals(adapter.getHeader(firstCompletelyVisible));
+ anchoredHeader.setText(adapter.getHeader(firstCompletelyVisible));
+ anchoredHeader.setVisibility(showAnchor ? View.VISIBLE : View.INVISIBLE);
+
+ int rowHeaderVisibility = showAnchor ? View.INVISIBLE : View.VISIBLE;
+ adapter.setHeaderVisibility(firstVisibleItem, rowHeaderVisibility);
+ adapter.setHeaderVisibility(firstCompletelyVisible, rowHeaderVisibility);
+ }
+ }
+}
diff --git a/java/com/android/dialer/contactsfragment/res/layout/contact_row.xml b/java/com/android/dialer/contactsfragment/res/layout/contact_row.xml
new file mode 100644
index 000000000..af87c7f18
--- /dev/null
+++ b/java/com/android/dialer/contactsfragment/res/layout/contact_row.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+<FrameLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="horizontal"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/row_height">
+
+ <include layout="@layout/header"/>
+
+ <LinearLayout
+ android:id="@+id/click_target"
+ android:orientation="horizontal"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_marginStart="@dimen/header_width"
+ android:layout_marginEnd="@dimen/row_end_margin"
+ android:paddingTop="@dimen/row_top_bottom_padding"
+ android:paddingBottom="@dimen/row_top_bottom_padding"
+ android:paddingStart="@dimen/row_start_padding"
+ android:gravity="center_vertical"
+ android:background="?android:attr/selectableItemBackground">
+
+ <QuickContactBadge
+ android:id="@+id/photo"
+ android:layout_width="@dimen/photo_size"
+ android:layout_height="@dimen/photo_size"
+ android:clickable="false"/>
+
+ <TextView
+ android:id="@+id/contact_name"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:paddingStart="@dimen/text_padding_start"
+ android:paddingEnd="@dimen/text_padding_end"
+ android:gravity="center_vertical|start"
+ android:textSize="@dimen/text_size"
+ android:textColor="@color/dialer_primary_text_color"
+ android:fontFamily="sans-serif"/>
+ </LinearLayout>
+</FrameLayout> \ No newline at end of file
diff --git a/java/com/android/dialer/contactsfragment/res/layout/fragment_contacts.xml b/java/com/android/dialer/contactsfragment/res/layout/fragment_contacts.xml
new file mode 100644
index 000000000..67b490f03
--- /dev/null
+++ b/java/com/android/dialer/contactsfragment/res/layout/fragment_contacts.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+<FrameLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <android.support.v7.widget.RecyclerView
+ android:id="@+id/recycler_view"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@color/background_dialer_white"/>
+
+ <!-- Anchored header view -->
+ <include layout="@layout/header"/>
+</FrameLayout>
diff --git a/java/com/android/dialer/contactsfragment/res/layout/header.xml b/java/com/android/dialer/contactsfragment/res/layout/header.xml
new file mode 100644
index 000000000..cb5e78a57
--- /dev/null
+++ b/java/com/android/dialer/contactsfragment/res/layout/header.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+<TextView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/header"
+ android:layout_width="@dimen/header_width"
+ android:layout_height="@dimen/row_height"
+ android:textColor="@color/dialer_theme_color"
+ android:gravity="center"
+ android:textSize="@dimen/text_size"
+ android:textStyle="bold"
+ android:fontFamily="sans-serif-medium"/> \ No newline at end of file
diff --git a/java/com/android/dialer/contactsfragment/res/values/dimens.xml b/java/com/android/dialer/contactsfragment/res/values/dimens.xml
new file mode 100644
index 000000000..e9d73e99b
--- /dev/null
+++ b/java/com/android/dialer/contactsfragment/res/values/dimens.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+<resources>
+ <dimen name="photo_size">40dp</dimen>
+ <dimen name="header_width">56dp</dimen>
+ <dimen name="row_height">56dp</dimen>
+ <dimen name="row_start_padding">16dp</dimen>
+ <dimen name="row_end_margin">16dp</dimen>
+ <dimen name="row_top_bottom_padding">8dp</dimen>
+
+ <dimen name="text_padding_start">16dp</dimen>
+ <dimen name="text_padding_end">8dp</dimen>
+ <dimen name="text_size">16sp</dimen>
+</resources> \ No newline at end of file
diff --git a/java/com/android/dialer/dialpadview/res/drawable-hdpi/ic_close_black_24dp.png b/java/com/android/dialer/dialpadview/res/drawable-hdpi/ic_close_black_24dp.png
new file mode 100644
index 000000000..1a9cd75a0
--- /dev/null
+++ b/java/com/android/dialer/dialpadview/res/drawable-hdpi/ic_close_black_24dp.png
Binary files differ
diff --git a/java/com/android/dialer/dialpadview/res/drawable-hdpi/ic_dialpad_delete.png b/java/com/android/dialer/dialpadview/res/drawable-hdpi/ic_dialpad_delete.png
new file mode 100644
index 000000000..e588d90e9
--- /dev/null
+++ b/java/com/android/dialer/dialpadview/res/drawable-hdpi/ic_dialpad_delete.png
Binary files differ
diff --git a/java/com/android/dialer/dialpadview/res/drawable-hdpi/ic_dialpad_voicemail.png b/java/com/android/dialer/dialpadview/res/drawable-hdpi/ic_dialpad_voicemail.png
new file mode 100644
index 000000000..4706112d6
--- /dev/null
+++ b/java/com/android/dialer/dialpadview/res/drawable-hdpi/ic_dialpad_voicemail.png
Binary files differ
diff --git a/java/com/android/dialer/dialpadview/res/drawable-hdpi/ic_overflow_menu.png b/java/com/android/dialer/dialpadview/res/drawable-hdpi/ic_overflow_menu.png
new file mode 100644
index 000000000..262e9df91
--- /dev/null
+++ b/java/com/android/dialer/dialpadview/res/drawable-hdpi/ic_overflow_menu.png
Binary files differ
diff --git a/java/com/android/dialer/dialpadview/res/layout/dialpad_view.xml b/java/com/android/dialer/dialpadview/res/layout/dialpad_view.xml
index 47112fbb1..778718632 100644
--- a/java/com/android/dialer/dialpadview/res/layout/dialpad_view.xml
+++ b/java/com/android/dialer/dialpadview/res/layout/dialpad_view.xml
@@ -18,6 +18,8 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:clipChildren="false"
+ android:clipToPadding="false"
android:theme="?attr/dialpad_style">
<include layout="@layout/dialpad_view_unthemed"/>
</FrameLayout>
diff --git a/java/com/android/dialer/dialpadview/res/layout/dialpad_view_unthemed.xml b/java/com/android/dialer/dialpadview/res/layout/dialpad_view_unthemed.xml
index 9f69f983a..838f1eca5 100644
--- a/java/com/android/dialer/dialpadview/res/layout/dialpad_view_unthemed.xml
+++ b/java/com/android/dialer/dialpadview/res/layout/dialpad_view_unthemed.xml
@@ -21,6 +21,7 @@
android:layout_gravity="bottom"
android:background="?attr/dialpad_background"
android:clickable="true"
+ android:elevation="?attr/dialpad_elevation"
android:layoutDirection="ltr"
android:orientation="vertical">
diff --git a/java/com/android/dialer/dialpadview/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/dialpadview/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..24ea30816
--- /dev/null
+++ b/java/com/android/dialer/dialpadview/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2012 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="description_dialpad_back" msgid="6226488105558971135">"Idite nazad"</string>
+ <string name="description_dialpad_overflow" msgid="5984341386518189787">"Još opcija"</string>
+ <string name="description_delete_button" msgid="8431313818404527096">"backspace"</string>
+ <string name="description_image_button_plus" msgid="8936338119824589388">"plus"</string>
+ <string name="description_voicemail_button" msgid="4187006295368768215">"govorna pošta"</string>
+</resources>
diff --git a/java/com/android/dialer/dialpadview/res/values/attrs.xml b/java/com/android/dialer/dialpadview/res/values/attrs.xml
index 273879f3e..d73946e65 100644
--- a/java/com/android/dialer/dialpadview/res/values/attrs.xml
+++ b/java/com/android/dialer/dialpadview/res/values/attrs.xml
@@ -35,5 +35,6 @@
<attr format="color" name="dialpad_icon_tint"/>
<attr format="color" name="dialpad_voicemail_tint"/>
<attr format="color" name="dialpad_background"/>
+ <attr format="dimension" name="dialpad_elevation"/>
</declare-styleable>
</resources>
diff --git a/java/com/android/dialer/dialpadview/res/values/styles.xml b/java/com/android/dialer/dialpadview/res/values/styles.xml
index 2fa2c3f2e..9d30021b9 100644
--- a/java/com/android/dialer/dialpadview/res/values/styles.xml
+++ b/java/com/android/dialer/dialpadview/res/values/styles.xml
@@ -96,6 +96,7 @@
@dimen/dialpad_zero_key_number_default_margin_bottom
</item>
<item name="dialpad_end_key_spacing">@dimen/dialpad_bottom_space_height</item>
+ <item name="dialpad_elevation">0dp</item>
</style>
<style name="Dialpad.Light">
diff --git a/java/com/android/dialer/enrichedcall/EnrichedCallManager.java b/java/com/android/dialer/enrichedcall/EnrichedCallManager.java
index 978fb1346..fa822a659 100644
--- a/java/com/android/dialer/enrichedcall/EnrichedCallManager.java
+++ b/java/com/android/dialer/enrichedcall/EnrichedCallManager.java
@@ -20,9 +20,9 @@ import android.support.annotation.IntDef;
import android.support.annotation.MainThread;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-import com.android.dialer.calldetails.nano.CallDetailsEntries;
-import com.android.dialer.calldetails.nano.CallDetailsEntries.CallDetailsEntry;
-import com.android.dialer.enrichedcall.historyquery.proto.nano.HistoryResult;
+import com.android.dialer.calldetails.CallDetailsEntries;
+import com.android.dialer.calldetails.CallDetailsEntries.CallDetailsEntry;
+import com.android.dialer.enrichedcall.historyquery.proto.HistoryResult;
import com.android.dialer.enrichedcall.videoshare.VideoShareListener;
import com.android.dialer.multimedia.MultimediaData;
import java.lang.annotation.Retention;
diff --git a/java/com/android/dialer/enrichedcall/historyquery/nano/HistoryResult.java b/java/com/android/dialer/enrichedcall/historyquery/nano/HistoryResult.java
deleted file mode 100644
index 2fdc2da50..000000000
--- a/java/com/android/dialer/enrichedcall/historyquery/nano/HistoryResult.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Generated by the protocol buffer compiler. DO NOT EDIT!
-
-package com.android.dialer.enrichedcall.historyquery.proto.nano;
-
-/** This file is autogenerated, but javadoc required. */
-@SuppressWarnings("hiding")
-public final class HistoryResult
- extends com.google.protobuf.nano.ExtendableMessageNano<HistoryResult> {
-
- /** This file is autogenerated, but javadoc required. */
- // enum Type
- public interface Type {
- public static final int INCOMING_CALL_COMPOSER = 1;
- public static final int OUTGOING_CALL_COMPOSER = 2;
- public static final int INCOMING_POST_CALL = 3;
- public static final int OUTGOING_POST_CALL = 4;
- }
-
- private static volatile HistoryResult[] _emptyArray;
-
- public static HistoryResult[] emptyArray() {
- // Lazily initializes the empty array
- if (_emptyArray == null) {
- synchronized (com.google.protobuf.nano.InternalNano.LAZY_INIT_LOCK) {
- if (_emptyArray == null) {
- _emptyArray = new HistoryResult[0];
- }
- }
- }
- return _emptyArray;
- }
-
- // optional .com.android.dialer.enrichedcall.historyquery.proto.HistoryResult.Type type = 1;
- public int type;
-
- // optional string text = 2;
- public java.lang.String text;
-
- // optional string image_uri = 4;
- public java.lang.String imageUri;
-
- // optional string image_content_type = 5;
- public java.lang.String imageContentType;
-
- // optional int64 timestamp = 7;
- public long timestamp;
-
- // @@protoc_insertion_point(class_scope:com.android.dialer.enrichedcall.historyquery.proto.HistoryResult)
-
- public HistoryResult() {
- clear();
- }
-
- public HistoryResult clear() {
- type =
- com.android.dialer.enrichedcall.historyquery.proto.nano.HistoryResult.Type
- .INCOMING_CALL_COMPOSER;
- text = "";
- imageUri = "";
- imageContentType = "";
- timestamp = 0L;
- unknownFieldData = null;
- cachedSize = -1;
- return this;
- }
-
- @Override
- public void writeTo(com.google.protobuf.nano.CodedOutputByteBufferNano output)
- throws java.io.IOException {
- if (this.type
- != com.android.dialer.enrichedcall.historyquery.proto.nano.HistoryResult.Type
- .INCOMING_CALL_COMPOSER) {
- output.writeInt32(1, this.type);
- }
- if (this.text != null && !this.text.equals("")) {
- output.writeString(2, this.text);
- }
- if (this.imageUri != null && !this.imageUri.equals("")) {
- output.writeString(4, this.imageUri);
- }
- if (this.imageContentType != null && !this.imageContentType.equals("")) {
- output.writeString(5, this.imageContentType);
- }
- if (this.timestamp != 0L) {
- output.writeInt64(7, this.timestamp);
- }
- super.writeTo(output);
- }
-
- @Override
- protected int computeSerializedSize() {
- int size = super.computeSerializedSize();
- if (this.type
- != com.android.dialer.enrichedcall.historyquery.proto.nano.HistoryResult.Type
- .INCOMING_CALL_COMPOSER) {
- size += com.google.protobuf.nano.CodedOutputByteBufferNano.computeInt32Size(1, this.type);
- }
- if (this.text != null && !this.text.equals("")) {
- size += com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(2, this.text);
- }
- if (this.imageUri != null && !this.imageUri.equals("")) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(4, this.imageUri);
- }
- if (this.imageContentType != null && !this.imageContentType.equals("")) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeStringSize(
- 5, this.imageContentType);
- }
- if (this.timestamp != 0L) {
- size +=
- com.google.protobuf.nano.CodedOutputByteBufferNano.computeInt64Size(7, this.timestamp);
- }
- return size;
- }
-
- @Override
- public HistoryResult mergeFrom(com.google.protobuf.nano.CodedInputByteBufferNano input)
- throws java.io.IOException {
- while (true) {
- int tag = input.readTag();
- switch (tag) {
- case 0:
- return this;
- default:
- {
- if (!super.storeUnknownField(input, tag)) {
- return this;
- }
- break;
- }
- case 8:
- {
- int initialPos = input.getPosition();
- int value = input.readInt32();
- switch (value) {
- case com.android.dialer.enrichedcall.historyquery.proto.nano.HistoryResult.Type
- .INCOMING_CALL_COMPOSER:
- case com.android.dialer.enrichedcall.historyquery.proto.nano.HistoryResult.Type
- .OUTGOING_CALL_COMPOSER:
- case com.android.dialer.enrichedcall.historyquery.proto.nano.HistoryResult.Type
- .INCOMING_POST_CALL:
- case com.android.dialer.enrichedcall.historyquery.proto.nano.HistoryResult.Type
- .OUTGOING_POST_CALL:
- this.type = value;
- break;
- default:
- input.rewindToPosition(initialPos);
- storeUnknownField(input, tag);
- break;
- }
- break;
- }
- case 18:
- {
- this.text = input.readString();
- break;
- }
- case 34:
- {
- this.imageUri = input.readString();
- break;
- }
- case 42:
- {
- this.imageContentType = input.readString();
- break;
- }
- case 56:
- {
- this.timestamp = input.readInt64();
- break;
- }
- }
- }
- }
-
- public static HistoryResult parseFrom(byte[] data)
- throws com.google.protobuf.nano.InvalidProtocolBufferNanoException {
- return com.google.protobuf.nano.MessageNano.mergeFrom(new HistoryResult(), data);
- }
-
- public static HistoryResult parseFrom(com.google.protobuf.nano.CodedInputByteBufferNano input)
- throws java.io.IOException {
- return new HistoryResult().mergeFrom(input);
- }
-}
diff --git a/java/com/android/dialer/enrichedcall/historyquery/proto/history_result.proto b/java/com/android/dialer/enrichedcall/historyquery/proto/history_result.proto
new file mode 100644
index 000000000..62d013a46
--- /dev/null
+++ b/java/com/android/dialer/enrichedcall/historyquery/proto/history_result.proto
@@ -0,0 +1,23 @@
+syntax = "proto2";
+
+option java_package = "com.android.dialer.enrichedcall.historyquery.proto";
+option java_multiple_files = true;
+option optimize_for = LITE_RUNTIME;
+
+package com.android.dialer.enrichedcall.historyquery.proto;
+
+// Holds data that was used in an enrichedcall in the past
+message HistoryResult {
+ optional Type type = 1;
+ optional string text = 2;
+ optional string image_uri = 4;
+ optional string image_content_type = 5;
+ optional int64 timestamp = 7;
+
+ enum Type {
+ INCOMING_CALL_COMPOSER = 1;
+ OUTGOING_CALL_COMPOSER = 2;
+ INCOMING_POST_CALL = 3;
+ OUTGOING_POST_CALL = 4;
+ }
+}
diff --git a/java/com/android/dialer/enrichedcall/stub/EnrichedCallManagerStub.java b/java/com/android/dialer/enrichedcall/stub/EnrichedCallManagerStub.java
index bedfdae34..1d008ca05 100644
--- a/java/com/android/dialer/enrichedcall/stub/EnrichedCallManagerStub.java
+++ b/java/com/android/dialer/enrichedcall/stub/EnrichedCallManagerStub.java
@@ -19,13 +19,13 @@ package com.android.dialer.enrichedcall.stub;
import android.support.annotation.MainThread;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-import com.android.dialer.calldetails.nano.CallDetailsEntries;
-import com.android.dialer.calldetails.nano.CallDetailsEntries.CallDetailsEntry;
+import com.android.dialer.calldetails.CallDetailsEntries;
+import com.android.dialer.calldetails.CallDetailsEntries.CallDetailsEntry;
import com.android.dialer.common.Assert;
import com.android.dialer.enrichedcall.EnrichedCallCapabilities;
import com.android.dialer.enrichedcall.EnrichedCallManager;
import com.android.dialer.enrichedcall.Session;
-import com.android.dialer.enrichedcall.historyquery.proto.nano.HistoryResult;
+import com.android.dialer.enrichedcall.historyquery.proto.HistoryResult;
import com.android.dialer.enrichedcall.videoshare.VideoShareListener;
import com.android.dialer.multimedia.MultimediaData;
import java.util.List;
diff --git a/java/com/android/dialer/interactions/PhoneNumberInteraction.java b/java/com/android/dialer/interactions/PhoneNumberInteraction.java
index f333419ba..52f9d208f 100644
--- a/java/com/android/dialer/interactions/PhoneNumberInteraction.java
+++ b/java/com/android/dialer/interactions/PhoneNumberInteraction.java
@@ -56,7 +56,7 @@ import com.android.contacts.common.MoreContactUtils;
import com.android.contacts.common.util.ContactDisplayUtils;
import com.android.dialer.callintent.CallIntentBuilder;
import com.android.dialer.callintent.CallIntentParser;
-import com.android.dialer.callintent.nano.CallSpecificAppData;
+import com.android.dialer.callintent.CallSpecificAppData;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.util.DialerUtils;
diff --git a/java/com/android/dialer/interactions/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/interactions/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..46db1d637
--- /dev/null
+++ b/java/com/android/dialer/interactions/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2012 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="sms_disambig_title" msgid="369677069797534410">"Izbor broja"</string>
+ <string name="call_disambig_title" msgid="2395382326030227603">"Izbor broja"</string>
+ <string name="make_primary" msgid="9069345357862475091">"Zapamti ovaj izbor"</string>
+</resources>
diff --git a/java/com/android/dialer/logging/LoggingBindings.java b/java/com/android/dialer/logging/LoggingBindings.java
index cf921c3fa..526cb2088 100644
--- a/java/com/android/dialer/logging/LoggingBindings.java
+++ b/java/com/android/dialer/logging/LoggingBindings.java
@@ -14,17 +14,25 @@
package com.android.dialer.logging;
+
import android.app.Activity;
/** Allows the container application to gather analytics. */
public interface LoggingBindings {
/**
+ * Logs an DialerImpression event that's not associated with a specific call.
+ *
+ * @param dialerImpression an integer representing what event occurred.
+ */
+ void logImpression(DialerImpression.Type dialerImpression);
+
+ /**
* Logs an impression for a general dialer event that's not associated with a specific call.
*
* @param dialerImpression an integer representing what event occurred.
- * @see com.android.dialer.logging.nano.DialerImpression
*/
+ @Deprecated
void logImpression(int dialerImpression);
/**
@@ -33,26 +41,26 @@ public interface LoggingBindings {
* @param dialerImpression an integer representing what event occurred.
* @param callId unique ID of the call.
* @param callStartTimeMillis the absolute time when the call started.
- * @see com.android.dialer.logging.nano.DialerImpression
*/
- void logCallImpression(int dialerImpression, String callId, long callStartTimeMillis);
+ void logCallImpression(
+ DialerImpression.Type dialerImpression, String callId, long callStartTimeMillis);
/**
* Logs an interaction that occurred.
*
* @param interaction an integer representing what interaction occurred.
- * @see com.android.dialer.logging.nano.InteractionEvent
+ * @see com.android.dialer.logging.InteractionEvent
*/
- void logInteraction(int interaction);
+ void logInteraction(InteractionEvent.Type interaction);
/**
* Logs an event indicating that a screen was displayed.
*
* @param screenEvent an integer representing the displayed screen.
* @param activity Parent activity of the displayed screen.
- * @see com.android.dialer.logging.nano.ScreenEvent
+ * @see com.android.dialer.logging.ScreenEvent
*/
- void logScreenView(int screenEvent, Activity activity);
+ void logScreenView(com.android.dialer.logging.ScreenEvent.Type screenEvent, Activity activity);
/** Logs a hit event to the analytics server. */
void sendHitEventAnalytics(String category, String action, String label, long value);
diff --git a/java/com/android/dialer/logging/LoggingBindingsStub.java b/java/com/android/dialer/logging/LoggingBindingsStub.java
index 89c56eb91..f7ca6ecb0 100644
--- a/java/com/android/dialer/logging/LoggingBindingsStub.java
+++ b/java/com/android/dialer/logging/LoggingBindingsStub.java
@@ -20,16 +20,20 @@ import android.app.Activity;
public class LoggingBindingsStub implements LoggingBindings {
@Override
+ public void logImpression(DialerImpression.Type dialerImpression) {}
+
+ @Override
public void logImpression(int dialerImpression) {}
@Override
- public void logCallImpression(int dialerImpression, String callId, long callStartTimeMillis) {}
+ public void logCallImpression(
+ DialerImpression.Type dialerImpression, String callId, long callStartTimeMillis) {}
@Override
- public void logInteraction(int interaction) {}
+ public void logInteraction(InteractionEvent.Type interaction) {}
@Override
- public void logScreenView(int screenEvent, Activity activity) {}
+ public void logScreenView(ScreenEvent.Type screenEvent, Activity activity) {}
@Override
public void sendHitEventAnalytics(String category, String action, String label, long value) {}
diff --git a/java/com/android/dialer/logging/contact_lookup_result.proto b/java/com/android/dialer/logging/contact_lookup_result.proto
new file mode 100644
index 000000000..c9624aff1
--- /dev/null
+++ b/java/com/android/dialer/logging/contact_lookup_result.proto
@@ -0,0 +1,32 @@
+syntax = "proto2";
+
+package com.android.dialer.logging;
+option java_package = "com.android.dialer.logging";
+option java_multiple_files = true;
+option optimize_for = LITE_RUNTIME;
+
+
+message ContactLookupResult {
+ // The different results of a contact lookup done using a phone number.
+ enum Type {
+ UNKNOWN_LOOKUP_RESULT_TYPE = 0;
+
+ // Contact was not found in any of the sources.
+ NOT_FOUND = 1;
+
+ // Contact was found in the local database.
+ LOCAL_CONTACT = 2;
+
+ // Contact was found in Google Dialer's internal phone number cache
+ LOCAL_CACHE = 3;
+
+ // Contact was found via Google Caller ID
+ REMOTE = 4;
+
+ // Phone number was an emergency phone number
+ EMERGENCY = 5;
+
+ // Phone number was the SIM card's voicemail number
+ VOICEMAIL = 6;
+ }
+}
diff --git a/java/com/android/dialer/logging/contact_source.proto b/java/com/android/dialer/logging/contact_source.proto
new file mode 100644
index 000000000..ffd32de0e
--- /dev/null
+++ b/java/com/android/dialer/logging/contact_source.proto
@@ -0,0 +1,38 @@
+syntax = "proto2";
+
+package com.android.dialer.logging;
+option java_package = "com.android.dialer.logging";
+option java_multiple_files = true;
+option optimize_for = LITE_RUNTIME;
+
+
+message ContactSource {
+ // Applies only to reports made from call history. If we have contact
+ // information for the phone number, this field indicates its source.
+ // Note that it represents the contact's status on the user's device at the
+ // time they made the spam report, which could be different from the
+ // number's status at the time they made or received the call.
+ // Type definitions are from the CachedContactInfo interface in
+ // google3/java/com/android/dialer/phonenumbercache/CachedNumberLookupService.java
+ enum Type {
+ UNKNOWN_SOURCE_TYPE = 0;
+
+ // Personal contact
+ SOURCE_TYPE_DIRECTORY = 1;
+
+ // Contact from a custom extended directory
+ SOURCE_TYPE_EXTENDED = 2;
+
+ // Business number found via the People API
+ SOURCE_TYPE_PLACES = 3;
+
+ // Non-business number found via the People API
+ SOURCE_TYPE_PROFILE = 4;
+
+ // Number has Caller Name Presentation (CNAP) information. Calls in this
+ // category would have had ContactLookupResultType NOT_FOUND originally.
+ SOURCE_TYPE_CNAP = 5;
+
+ SOURCE_TYPE_CEQUINT_CALLER_ID = 6;
+ }
+}
diff --git a/java/com/android/dialer/logging/dialer_impression.proto b/java/com/android/dialer/logging/dialer_impression.proto
new file mode 100644
index 000000000..e3369d349
--- /dev/null
+++ b/java/com/android/dialer/logging/dialer_impression.proto
@@ -0,0 +1,384 @@
+syntax = "proto2";
+
+package com.android.dialer.logging;
+option java_package = "com.android.dialer.logging";
+option java_multiple_files = true;
+option optimize_for = LITE_RUNTIME;
+
+
+message DialerImpression {
+ // Event enums to be used for Impression Logging in Dialer.
+ // It's perfectly acceptable for this enum to be large
+ // Values should be from 1000 to 100000.
+ // Next Tag:1190
+ enum Type {
+
+ UNKNOWN_AOSP_EVENT_TYPE = 1000;
+
+ // User opened the app
+ APP_LAUNCHED = 1001;
+
+ // User pressed the speaker phone button
+ IN_CALL_SCREEN_TURN_ON_SPEAKERPHONE = 1002;
+
+ // User pressed the speaker phone button again
+ IN_CALL_SCREEN_TURN_ON_WIRED_OR_EARPIECE = 1003;
+
+ // Number not identified as spam and the user tapped the block/report spam button in the
+ // call log
+ CALL_LOG_BLOCK_REPORT_SPAM = 1004;
+
+ // Number identified as spam and the user tapped on the block number call log item
+ CALL_LOG_BLOCK_NUMBER = 1005;
+
+ // User tapped on the unblock number in the call log
+ // This does not deal with whether the user reported this spam or not while initially blocking
+ // For that refer to REPORT_AS_NOT_SPAM_VIA_UNBLOCK_NUMBER. If the user had not reported it as
+ // spam they then have the option of directly unblocking the number, a success of which is
+ // logged in USER_ACTION_UNBLOCKED_NUMBER
+ CALL_LOG_UNBLOCK_NUMBER = 1006;
+
+ // Number was identified as spam, and the user tapped that it was not spam
+ CALL_LOG_REPORT_AS_NOT_SPAM = 1007;
+
+ // Confirmation dialog in which the user confirmed that the number was not spam
+ DIALOG_ACTION_CONFIRM_NUMBER_NOT_SPAM = 1008;
+
+ // User unblocked a number and also acknowledged that the number is not spam
+ // This happens when the user had initially blocked a number and also claimed the number was
+ // spam and had now proceeded to undo that.
+ REPORT_AS_NOT_SPAM_VIA_UNBLOCK_NUMBER = 1009
+ ;
+
+ // A number that was identified as spam and the user proceeded to block it. However this
+ // impression was to make sure that while blocking the number the user also acknowledged that
+ // they were going to be reporting this as spam. There is no option for the user in this case
+ // to not report it as spam and block it only. The only flow is:
+ // system identified number as spam -> user wants to block it -> confirmation dialog shows up
+ // asking user to acknowledge they want to block and report as spam -> user acknowledges and
+ // this is when this impression is sent
+ DIALOG_ACTION_CONFIRM_NUMBER_SPAM_INDIRECTLY_VIA_BLOCK_NUMBER = 1010;
+
+ // User reported the number as spam by tick marking on report spam when blocking
+ // the number via call log. This is for case where the user wants to block a number and also
+ // report it as spam
+ REPORT_CALL_AS_SPAM_VIA_CALL_LOG_BLOCK_REPORT_SPAM_SENT_VIA_BLOCK_NUMBER_DIALOG = 1011
+ ;
+
+ // User made it to the last step and actually blocked the number
+ USER_ACTION_BLOCKED_NUMBER = 1012
+ ;
+
+ // User made it to the last step and actually unblocked the number
+ USER_ACTION_UNBLOCKED_NUMBER = 1013;
+
+ // User blocked a number, does not guarantee if the number was reported as spam or not
+ // To compute the number of blocked numbers that were reported as not spam and yet blocked
+ // Subtract this value from SPAM_AFTER_CALL_NOTIFICATION_MARKED_NUMBER_AS_SPAM. It would be
+ // interesting to see how this value compares with
+ // SPAM_AFTER_CALL_NOTIFICATION_REPORT_NUMBER_AS_NOT_SPAM
+ SPAM_AFTER_CALL_NOTIFICATION_BLOCK_NUMBER = 1014;
+
+ // Displays the dialog for first time spam calls with actions "Not spam", "Block", and
+ // "Dismiss".
+ SPAM_AFTER_CALL_NOTIFICATION_SHOW_SPAM_DIALOG = 1015;
+
+ // Displays the dialog for the first time unknown calls with actions "Add contact",
+ // "Block/report spam", and "Dismiss".
+ SPAM_AFTER_CALL_NOTIFICATION_SHOW_NON_SPAM_DIALOG = 1016;
+
+ // User added the number to contacts from the after call notification
+ SPAM_AFTER_CALL_NOTIFICATION_ADD_TO_CONTACTS = 1019
+ ;
+
+ // User marked the number as spam on the after call notification flow
+ SPAM_AFTER_CALL_NOTIFICATION_MARKED_NUMBER_AS_SPAM = 1020
+ ;
+
+ SPAM_AFTER_CALL_NOTIFICATION_MARKED_NUMBER_AS_NOT_SPAM_AND_BLOCKED = 1021;
+
+ // User reported the number as not spam
+ SPAM_AFTER_CALL_NOTIFICATION_REPORT_NUMBER_AS_NOT_SPAM = 1022
+ ;
+
+ // User dismissed the spam notification
+ SPAM_AFTER_CALL_NOTIFICATION_ON_DISMISS_SPAM_DIALOG = 1024;
+
+ // User dismissed the non spam notification
+ SPAM_AFTER_CALL_NOTIFICATION_ON_DISMISS_NON_SPAM_DIALOG = 1025;
+
+ // From the service instead of an activity logs the number of times the number was marked as
+ // Spam by the user (e.g from the feedback prompt)
+ SPAM_NOTIFICATION_SERVICE_ACTION_MARK_NUMBER_AS_SPAM = 1026;
+
+ // From the service instead of an activity logs the number of times the number was marked as
+ // Not Spam by the user (e.g from the feedback prompt)
+ SPAM_NOTIFICATION_SERVICE_ACTION_MARK_NUMBER_AS_NOT_SPAM = 1027;
+
+ // User is in a active call i.e either incoming or outgoing
+ // This is mainly so we can assign an impression event to a call event i.e so that we may be
+ // able to stitch different types of events if they make sense e.g user pressed a speaker button
+ // and we want to associate that to a call event
+ USER_PARTICIPATED_IN_A_CALL = 1028
+ ;
+
+ // Incoming call is a spam call
+ INCOMING_SPAM_CALL = 1029;
+
+ // Incoming call is a non spam call
+ INCOMING_NON_SPAM_CALL = 1030;
+
+ // Spam notifications shown despite throttling
+ SPAM_NOTIFICATION_SHOWN_AFTER_THROTTLE = 1041;
+
+ // Spam notifications not shown due to throttling
+ SPAM_NOTIFICATION_NOT_SHOWN_AFTER_THROTTLE = 1042;
+
+ // Non spam notifications shown despite throttling
+ NON_SPAM_NOTIFICATION_SHOWN_AFTER_THROTTLE = 1043;
+
+ // Non spam notifications not shown due to throttling
+ NON_SPAM_NOTIFICATION_NOT_SHOWN_AFTER_THROTTLE = 1044;
+
+ // Voicemail status has updated in the voicemail tab and the change PIN
+ // prompt is shown.
+ VOICEMAIL_ALERT_SET_PIN_SHOWN = 1045;
+
+ // User has clicked the change PIN action in the voicemail tab
+ VOICEMAIL_ALERT_SET_PIN_CLICKED = 1046;
+
+ // User was not able to or did not participate in the call e.g missed calls, rejected calls
+ USER_DID_NOT_PARTICIPATE_IN_CALL = 1047;
+
+ // User deleted a call log entry
+ USER_DELETED_CALL_LOG_ITEM = 1048
+ ;
+
+ // User tapped on "Send a message"
+ CALL_LOG_SEND_MESSAGE = 1049
+ ;
+
+ // User tapped on "Add to contact"
+ CALL_LOG_ADD_TO_CONTACT = 1050
+ ;
+
+ // User tapped on "Create new contact"
+ CALL_LOG_CREATE_NEW_CONTACT = 1051
+ ;
+
+ // User deleted an entry from the voicemail tab
+ VOICEMAIL_DELETE_ENTRY = 1052
+ ;
+
+ // Voicemail call log entry was expanded. Could be either if the user tapped the voicemail
+ // call log entry or pressed the play button when the voicemail call log entry was not expanded
+ VOICEMAIL_EXPAND_ENTRY = 1053
+ ;
+
+ // The play button for voicemail call log entry was tapped directly (i.e when the voicemail
+ // call log entry was not expanded and the playbutton was tapped)
+ VOICEMAIL_PLAY_AUDIO_DIRECTLY= 1054
+ ;
+
+ // The play button after expanding the voicemail call log entry was tapped
+ VOICEMAIL_PLAY_AUDIO_AFTER_EXPANDING_ENTRY= 1055
+ ;
+
+ // Incoming call was rejected from the notifications
+ REJECT_INCOMING_CALL_FROM_NOTIFICATION= 1056
+ ;
+
+ // Incoming call was rejected from the answer screen including rejecting via sms and talkback
+ REJECT_INCOMING_CALL_FROM_ANSWER_SCREEN= 1057
+ ;
+
+ // User tapped block and spam buttons in context menu, same as buttons in
+ // call log drop down
+ // menu (See 1004-1007).
+ CALL_LOG_CONTEXT_MENU_BLOCK_REPORT_SPAM = 1058;
+ CALL_LOG_CONTEXT_MENU_BLOCK_NUMBER = 1059;
+ CALL_LOG_CONTEXT_MENU_UNBLOCK_NUMBER = 1060;
+ CALL_LOG_CONTEXT_MENU_REPORT_AS_NOT_SPAM = 1061;
+
+ NEW_CONTACT_OVERFLOW = 1062;
+ NEW_CONTACT_FAB = 1063;
+
+ // The ToS is shown the user
+ VOICEMAIL_VVM3_TOS_SHOWN = 1064;
+
+ // The user has accepted the ToS
+ VOICEMAIL_VVM3_TOS_ACCEPTED = 1065;
+
+ // The user has went through the decline ToS dialog and VVM is disabled
+ VOICEMAIL_VVM3_TOS_DECLINED = 1066;
+
+ // The user has clicked the decline ToS button, and a conformation dialog
+ // was shown
+ VOICEMAIL_VVM3_TOS_DECLINE_CLICKED = 1067;
+
+ // The use has clicked the decline ToS button but the PIN has been
+ // randomized. A dialog to instruct the user to set the PIN has been shown
+ VOICEMAIL_VVM3_TOS_DECLINE_CHANGE_PIN_SHOWN = 1068;
+
+ // The user does not have a permission and are presented with a
+ // non-framework UI to request permission.
+ STORAGE_PERMISSION_DISPLAYED = 1069;
+ CAMERA_PERMISSION_DISPLAYED = 1074;
+
+ // The user is being shown the Android framework UI to request a permission.
+ STORAGE_PERMISSION_REQUESTED = 1070;
+ CAMERA_PERMISSION_REQUESTED = 1075;
+
+ // The user has permenantly denied a permission, so the user is being
+ // sent to dialer settings to grant permission.
+ STORAGE_PERMISSION_SETTINGS = 1071;
+ CAMERA_PERMISSION_SETTINGS = 1076;
+
+ // The user granted a permission.
+ STORAGE_PERMISSION_GRANTED = 1072;
+ CAMERA_PERMISSION_GRANTED = 1077;
+
+ // The user denied a permission.
+ STORAGE_PERMISSION_DENIED = 1073;
+ CAMERA_PERMISSION_DENIED = 1078;
+
+ // Voicemail config corruption is detected when in dialtacts activity.
+ VOICEMAIL_CONFIGURATION_STATE_CORRUPTION_DETECTED_FROM_ACTIVITY = 1079;
+ // Voicemail config corruption is detected when a new voicemail notification
+ // has arrived.
+ VOICEMAIL_CONFIGURATION_STATE_CORRUPTION_DETECTED_FROM_NOTIFICATION = 1080;
+
+ // Android Auto Backup and Restore (Dolly)
+ BACKUP_ON_BACKUP = 1081;
+ BACKUP_ON_FULL_BACKUP = 1082;
+ BACKUP_ON_BACKUP_DISABLED = 1083;
+ BACKUP_VOICEMAIL_BACKED_UP = 1084;
+ BACKUP_FULL_BACKED_UP = 1085;
+ BACKUP_ON_BACKUP_JSON_EXCEPTION = 1086;
+
+ BACKUP_ON_QUOTA_EXCEEDED = 1087;
+
+ BACKUP_ON_RESTORE = 1088;
+ BACKUP_RESTORED_FILE = 1089;
+ BACKUP_RESTORED_VOICEMAIL = 1090;
+ BACKUP_ON_RESTORE_FINISHED = 1091;
+ BACKUP_ON_RESTORE_DISABLED = 1092;
+ BACKUP_ON_RESTORE_JSON_EXCEPTION = 1093;
+ BACKUP_ON_RESTORE_IO_EXCEPTION = 1094;
+
+ BACKUP_MAX_VM_BACKUP_REACHED = 1095;
+
+ EVENT_ANSWER_HINT_ACTIVATED = 1096;
+ EVENT_ANSWER_HINT_DEACTIVATED = 1097;
+
+ VVM_TAB_VIEWED = 1098;
+
+ VVM_SHARE_VISIBLE = 1099;
+ VVM_SHARE_PRESSED = 1100;
+
+ OUTGOING_VIDEO_CALL = 1101;
+ INCOMING_VIDEO_CALL = 1102;
+ USER_PARTICIPATED_IN_A_VIDEO_CALL = 1103;
+
+ BACKUP_ON_RESTORE_VM_DUPLICATE_NOT_RESTORING = 1104;
+
+ // User tapped the 'Share and call' button to start the call composer
+ CALL_LOG_SHARE_AND_CALL = 1105;
+ CALL_COMPOSER_ACTIVITY_PLACE_RCS_CALL = 1106;
+ CALL_COMPOSER_ACTIVITY_SEND_AND_CALL_PRESSED_WHEN_SESSION_NOT_READY = 1107;
+
+ POST_CALL_PROMPT_USER_TO_SEND_MESSAGE_CLICKED = 1108;
+ POST_CALL_PROMPT_USER_TO_SEND_MESSAGE = 1109;
+ POST_CALL_PROMPT_USER_TO_VIEW_SENT_MESSAGE = 1110;
+ POST_CALL_PROMPT_USER_TO_VIEW_SENT_MESSAGE_CLICKED = 1111;
+
+ IN_CALL_SCREEN_TURN_ON_MUTE = 1112;
+ IN_CALL_SCREEN_TURN_OFF_MUTE = 1113;
+ IN_CALL_SCREEN_SWAP_CAMERA = 1114;
+ IN_CALL_SCREEN_TURN_ON_VIDEO = 1115;
+ IN_CALL_SCREEN_TURN_OFF_VIDEO = 1116;
+
+ VIDEO_CALL_WITH_INCOMING_VOICE_CALL = 1117;
+ VIDEO_CALL_WITH_INCOMING_VIDEO_CALL = 1118;
+ VOICE_CALL_WITH_INCOMING_VOICE_CALL = 1119;
+ VOICE_CALL_WITH_INCOMING_VIDEO_CALL = 1120;
+
+ CALL_DETAILS_COPY_NUMBER = 1121;
+ CALL_DETAILS_EDIT_BEFORE_CALL = 1122;
+ CALL_DETAILS_CALL_BACK = 1123;
+
+ VVM_USER_DISMISSED_VM_ALMOST_FULL_PROMO = 1124;
+ VVM_USER_DISMISSED_VM_FULL_PROMO = 1125;
+ VVM_USER_ENABLED_ARCHIVE_FROM_VM_ALMOST_FULL_PROMO = 1126;
+ VVM_USER_ENABLED_ARCHIVE_FROM_VM_FULL_PROMO = 1127;
+ VVM_USER_SHOWN_VM_ALMOST_FULL_PROMO = 1128;
+ VVM_USER_SHOWN_VM_FULL_PROMO = 1129;
+ VVM_USER_SHOWN_VM_ALMOST_FULL_ERROR_MESSAGE = 1130;
+ VVM_USER_SHOWN_VM_FULL_ERROR_MESSAGE = 1131;
+ VVM_USER_TURNED_ARCHIVE_ON_FROM_SETTINGS = 1132;
+ VVM_USER_TURNED_ARCHIVE_OFF_FROM_SETTINGS = 1133;
+ VVM_ARCHIVE_AUTO_DELETED_VM_FROM_SERVER = 1134;
+ VVM_ARCHIVE_AUTO_DELETE_TURNED_OFF = 1135;
+
+ VVM_TAB_VISIBLE = 1136;
+ VVM_UNBUNDLED_EVENT_RECEIVED = 1137;
+ VVM_ACTIVATION_STARTED = 1138;
+ VVM_ACTIVATION_COMPLETED = 1139;
+ VVM_AUTO_RETRY_ACTIVATION = 1140;
+ VVM_PROVISIONING_STARTED = 1141;
+ VVM_PROVISIONING_COMPLETED = 1142;
+ VVM_SYNC_STARTED = 1143;
+ VVM_SYNC_COMPLETED = 1144;
+ VVM_AUTO_RETRY_SYNC = 1145;
+ VVM_USER_RETRY = 1146;
+ VVM_USER_SYNC = 1147;
+ VVM_SETTINGS_VIEWED = 1148;
+ VVM_CHANGE_PIN_CLICKED = 1149;
+ VVM_CHANGE_PIN_COMPLETED = 1150;
+ VVM_CHANGE_RINGTONE_CLICKED = 1151;
+ VVM_CHANGE_VIBRATION_CLICKED = 1152;
+ VVM_USER_ENABLED_IN_SETTINGS = 1153;
+ VVM_USER_DISABLED_IN_SETTINGS = 1154;
+ VVM_ADVANCED_SETINGS_CLICKED = 1155;
+ VVM_NOTIFICATION_CLICKED = 1156;
+ VVM_NOTIFICATION_CREATED = 1157;
+ VVM_NOTIFICATION_CREATED_WITH_TRANSCRIPTION = 1158;
+ VVM_TRANSCRIPTION_DOWNLOADED = 1159;
+ VVM_CHANGE_AIRPLANE_MODE_CLICKED = 1160;
+ VVM_CALL_VOICEMAIL_CLICKED = 1161;
+ VVM_QUOTA_CHECK_UNAVAILABLE = 1162;
+
+ // Emergency location impressions
+ EMERGENCY_NEW_EMERGENCY_CALL = 1163;
+ EMERGENCY_CALLBACK = 1164;
+ EMERGENCY_NO_LOCATION_PERMISSION = 1165;
+ EMERGENCY_BATTERY_TOO_LOW_TO_GET_LOCATION = 1166;
+ EMERGENCY_CANT_GET_LOCATION = 1167;
+ EMERGENCY_STALE_LOCATION = 1168;
+ EMERGENCY_INACCURATE_LOCATION = 1169;
+ EMERGENCY_GOT_LOCATION = 1170;
+ EMERGENCY_GOT_ADDRESS = 1171;
+ EMERGENCY_GOT_MAP = 1172;
+ EMERGENCY_LAUNCHED_MAP = 1173;
+
+ VIDEO_CALL_UPGRADE_REQUESTED = 1174;
+ VIDEO_CALL_REQUEST_ACCEPTED = 1175;
+ VIDEO_CALL_REQUEST_ACCEPTED_AS_AUDIO = 1176;
+ VIDEO_CALL_REQUEST_DECLINED = 1177;
+ VIDEO_CALL_REQUEST_RECEIVED = 1178;
+
+ RCS_VIDEO_SHARE_UPGRADE_REQUESTED = 1179;
+ RCS_VIDEO_SHARE_REQUEST_ACCEPTED = 1180;
+ RCS_VIDEO_SHARE_REQUEST_DECLINED = 1181;
+ RCS_VIDEO_SHARE_REQUEST_RECEIVED = 1182;
+
+ IMS_VIDEO_UPGRADE_REQUESTED = 1183;
+ IMS_VIDEO_REQUEST_ACCEPTED = 1184;
+ IMS_VIDEO_REQUEST_ACCEPTED_AS_AUDIO = 1185;
+ IMS_VIDEO_REQUEST_DECLINED = 1186;
+ IMS_VIDEO_REQUEST_RECEIVED = 1187;
+
+ VVM_STATUS_CHECK_READY = 1188;
+ VVM_STATUS_CHECK_REACTIVATION = 1189;
+ }
+}
diff --git a/java/com/android/dialer/logging/interaction_event.proto b/java/com/android/dialer/logging/interaction_event.proto
new file mode 100644
index 000000000..1075b1ff1
--- /dev/null
+++ b/java/com/android/dialer/logging/interaction_event.proto
@@ -0,0 +1,46 @@
+syntax = "proto2";
+
+package com.android.dialer.logging;
+option java_package = "com.android.dialer.logging";
+option java_multiple_files = true;
+option optimize_for = LITE_RUNTIME;
+
+
+message InteractionEvent {
+ enum Type {
+
+ UNKNOWN = 0;
+
+ // Leaving tags 1-14 for more frequent interactions, e.g. ANSWERED_CALL
+
+ // An incoming call was blocked
+ CALL_BLOCKED = 15;
+
+ // The user blocked a number from the Call Log screen
+ BLOCK_NUMBER_CALL_LOG = 16;
+
+ // The user blocked a number from the Call details screen
+ BLOCK_NUMBER_CALL_DETAIL = 17;
+
+ // The user blocked a number from the Management screen
+ BLOCK_NUMBER_MANAGEMENT_SCREEN = 18;
+
+ // The user unblocked a number from the Call Log screen
+ UNBLOCK_NUMBER_CALL_LOG = 19;
+
+ // The user unblocked a number from the Call details screen
+ UNBLOCK_NUMBER_CALL_DETAIL = 20;
+
+ // The user unblocked a number from the Management screen
+ UNBLOCK_NUMBER_MANAGEMENT_SCREEN = 21;
+
+ // The user blocked numbers from contacts marked as send to voicemail
+ IMPORT_SEND_TO_VOICEMAIL = 22;
+
+ // The user blocked a number then undid the block
+ UNDO_BLOCK_NUMBER = 23;
+
+ // The user unblocked a number then undid the unblock
+ UNDO_UNBLOCK_NUMBER = 24;
+ }
+}
diff --git a/java/com/android/dialer/logging/nano/ContactLookupResult.java b/java/com/android/dialer/logging/nano/ContactLookupResult.java
deleted file mode 100644
index 93f5f0135..000000000
--- a/java/com/android/dialer/logging/nano/ContactLookupResult.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Generated by the protocol buffer compiler. DO NOT EDIT!
-
-package com.android.dialer.logging.nano;
-
-/** This file is autogenerated, but javadoc required. */
-@SuppressWarnings("hiding")
-public final class ContactLookupResult
- extends com.google.protobuf.nano.ExtendableMessageNano<ContactLookupResult> {
-
- /** This file is autogenerated, but javadoc required. */
- // enum Type
- public interface Type {
- public static final int UNKNOWN_LOOKUP_RESULT_TYPE = 0;
- public static final int NOT_FOUND = 1;
- public static final int LOCAL_CONTACT = 2;
- public static final int LOCAL_CACHE = 3;
- public static final int REMOTE = 4;
- public static final int EMERGENCY = 5;
- public static final int VOICEMAIL = 6;
- }
-
- private static volatile ContactLookupResult[] _emptyArray;
-
- public static ContactLookupResult[] emptyArray() {
- // Lazily initializes the empty array
- if (_emptyArray == null) {
- synchronized (com.google.protobuf.nano.InternalNano.LAZY_INIT_LOCK) {
- if (_emptyArray == null) {
- _emptyArray = new ContactLookupResult[0];
- }
- }
- }
- return _emptyArray;
- }
-
- // @@protoc_insertion_point(class_scope:com.android.dialer.logging.ContactLookupResult)
-
- public ContactLookupResult() {
- clear();
- }
-
- public ContactLookupResult clear() {
- unknownFieldData = null;
- cachedSize = -1;
- return this;
- }
-
- @Override
- public ContactLookupResult mergeFrom(com.google.protobuf.nano.CodedInputByteBufferNano input)
- throws java.io.IOException {
- while (true) {
- int tag = input.readTag();
- switch (tag) {
- case 0:
- return this;
- default:
- {
- if (!super.storeUnknownField(input, tag)) {
- return this;
- }
- break;
- }
- }
- }
- }
-
- public static ContactLookupResult parseFrom(byte[] data)
- throws com.google.protobuf.nano.InvalidProtocolBufferNanoException {
- return com.google.protobuf.nano.MessageNano.mergeFrom(new ContactLookupResult(), data);
- }
-
- public static ContactLookupResult parseFrom(
- com.google.protobuf.nano.CodedInputByteBufferNano input) throws java.io.IOException {
- return new ContactLookupResult().mergeFrom(input);
- }
-}
diff --git a/java/com/android/dialer/logging/nano/ContactSource.java b/java/com/android/dialer/logging/nano/ContactSource.java
deleted file mode 100644
index dbe40cd53..000000000
--- a/java/com/android/dialer/logging/nano/ContactSource.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Generated by the protocol buffer compiler. DO NOT EDIT!
-
-package com.android.dialer.logging.nano;
-
-/** This file is autogenerated, but javadoc required. */
-@SuppressWarnings("hiding")
-public final class ContactSource
- extends com.google.protobuf.nano.ExtendableMessageNano<ContactSource> {
-
- /** This file is autogenerated, but javadoc required. */
- // enum Type
- public interface Type {
- public static final int UNKNOWN_SOURCE_TYPE = 0;
- public static final int SOURCE_TYPE_DIRECTORY = 1;
- public static final int SOURCE_TYPE_EXTENDED = 2;
- public static final int SOURCE_TYPE_PLACES = 3;
- public static final int SOURCE_TYPE_PROFILE = 4;
- public static final int SOURCE_TYPE_CNAP = 5;
- }
-
- private static volatile ContactSource[] _emptyArray;
-
- public static ContactSource[] emptyArray() {
- // Lazily initializes the empty array
- if (_emptyArray == null) {
- synchronized (com.google.protobuf.nano.InternalNano.LAZY_INIT_LOCK) {
- if (_emptyArray == null) {
- _emptyArray = new ContactSource[0];
- }
- }
- }
- return _emptyArray;
- }
-
- // @@protoc_insertion_point(class_scope:com.android.dialer.logging.ContactSource)
-
- public ContactSource() {
- clear();
- }
-
- public ContactSource clear() {
- unknownFieldData = null;
- cachedSize = -1;
- return this;
- }
-
- @Override
- public ContactSource mergeFrom(com.google.protobuf.nano.CodedInputByteBufferNano input)
- throws java.io.IOException {
- while (true) {
- int tag = input.readTag();
- switch (tag) {
- case 0:
- return this;
- default:
- {
- if (!super.storeUnknownField(input, tag)) {
- return this;
- }
- break;
- }
- }
- }
- }
-
- public static ContactSource parseFrom(byte[] data)
- throws com.google.protobuf.nano.InvalidProtocolBufferNanoException {
- return com.google.protobuf.nano.MessageNano.mergeFrom(new ContactSource(), data);
- }
-
- public static ContactSource parseFrom(com.google.protobuf.nano.CodedInputByteBufferNano input)
- throws java.io.IOException {
- return new ContactSource().mergeFrom(input);
- }
-}
diff --git a/java/com/android/dialer/logging/nano/DialerImpression.java b/java/com/android/dialer/logging/nano/DialerImpression.java
deleted file mode 100644
index 9f3f96116..000000000
--- a/java/com/android/dialer/logging/nano/DialerImpression.java
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Generated by the protocol buffer compiler. DO NOT EDIT!
-
-package com.android.dialer.logging.nano;
-
-/** This file is autogenerated, but javadoc required. */
-@SuppressWarnings("hiding")
-public final class DialerImpression
- extends com.google.protobuf.nano.ExtendableMessageNano<DialerImpression> {
-
- /** This file is autogenerated, but javadoc required. */
- // enum Type
- public interface Type {
- public static final int UNKNOWN_AOSP_EVENT_TYPE = 1000;
- public static final int APP_LAUNCHED = 1001;
- public static final int IN_CALL_SCREEN_TURN_ON_SPEAKERPHONE = 1002;
- public static final int IN_CALL_SCREEN_TURN_ON_WIRED_OR_EARPIECE = 1003;
- public static final int CALL_LOG_BLOCK_REPORT_SPAM = 1004;
- public static final int CALL_LOG_BLOCK_NUMBER = 1005;
- public static final int CALL_LOG_UNBLOCK_NUMBER = 1006;
- public static final int CALL_LOG_REPORT_AS_NOT_SPAM = 1007;
- public static final int DIALOG_ACTION_CONFIRM_NUMBER_NOT_SPAM = 1008;
- public static final int REPORT_AS_NOT_SPAM_VIA_UNBLOCK_NUMBER = 1009;
- public static final int DIALOG_ACTION_CONFIRM_NUMBER_SPAM_INDIRECTLY_VIA_BLOCK_NUMBER = 1010;
- public static final int
- REPORT_CALL_AS_SPAM_VIA_CALL_LOG_BLOCK_REPORT_SPAM_SENT_VIA_BLOCK_NUMBER_DIALOG = 1011;
- public static final int USER_ACTION_BLOCKED_NUMBER = 1012;
- public static final int USER_ACTION_UNBLOCKED_NUMBER = 1013;
- public static final int SPAM_AFTER_CALL_NOTIFICATION_BLOCK_NUMBER = 1014;
- public static final int SPAM_AFTER_CALL_NOTIFICATION_SHOW_SPAM_DIALOG = 1015;
- public static final int SPAM_AFTER_CALL_NOTIFICATION_SHOW_NON_SPAM_DIALOG = 1016;
- public static final int SPAM_AFTER_CALL_NOTIFICATION_ADD_TO_CONTACTS = 1019;
- public static final int SPAM_AFTER_CALL_NOTIFICATION_MARKED_NUMBER_AS_SPAM = 1020;
- public static final int SPAM_AFTER_CALL_NOTIFICATION_MARKED_NUMBER_AS_NOT_SPAM_AND_BLOCKED =
- 1021;
- public static final int SPAM_AFTER_CALL_NOTIFICATION_REPORT_NUMBER_AS_NOT_SPAM = 1022;
- public static final int SPAM_AFTER_CALL_NOTIFICATION_ON_DISMISS_SPAM_DIALOG = 1024;
- public static final int SPAM_AFTER_CALL_NOTIFICATION_ON_DISMISS_NON_SPAM_DIALOG = 1025;
- public static final int SPAM_NOTIFICATION_SERVICE_ACTION_MARK_NUMBER_AS_SPAM = 1026;
- public static final int SPAM_NOTIFICATION_SERVICE_ACTION_MARK_NUMBER_AS_NOT_SPAM = 1027;
- public static final int USER_PARTICIPATED_IN_A_CALL = 1028;
- public static final int INCOMING_SPAM_CALL = 1029;
- public static final int INCOMING_NON_SPAM_CALL = 1030;
- public static final int SPAM_NOTIFICATION_SHOWN_AFTER_THROTTLE = 1041;
- public static final int SPAM_NOTIFICATION_NOT_SHOWN_AFTER_THROTTLE = 1042;
- public static final int NON_SPAM_NOTIFICATION_SHOWN_AFTER_THROTTLE = 1043;
- public static final int NON_SPAM_NOTIFICATION_NOT_SHOWN_AFTER_THROTTLE = 1044;
- public static final int VOICEMAIL_ALERT_SET_PIN_SHOWN = 1045;
- public static final int VOICEMAIL_ALERT_SET_PIN_CLICKED = 1046;
- public static final int USER_DID_NOT_PARTICIPATE_IN_CALL = 1047;
- public static final int USER_DELETED_CALL_LOG_ITEM = 1048;
- public static final int CALL_LOG_SEND_MESSAGE = 1049;
- public static final int CALL_LOG_ADD_TO_CONTACT = 1050;
- public static final int CALL_LOG_CREATE_NEW_CONTACT = 1051;
- public static final int VOICEMAIL_DELETE_ENTRY = 1052;
- public static final int VOICEMAIL_EXPAND_ENTRY = 1053;
- public static final int VOICEMAIL_PLAY_AUDIO_DIRECTLY = 1054;
- public static final int VOICEMAIL_PLAY_AUDIO_AFTER_EXPANDING_ENTRY = 1055;
- public static final int REJECT_INCOMING_CALL_FROM_NOTIFICATION = 1056;
- public static final int REJECT_INCOMING_CALL_FROM_ANSWER_SCREEN = 1057;
- public static final int CALL_LOG_CONTEXT_MENU_BLOCK_REPORT_SPAM = 1058;
- public static final int CALL_LOG_CONTEXT_MENU_BLOCK_NUMBER = 1059;
- public static final int CALL_LOG_CONTEXT_MENU_UNBLOCK_NUMBER = 1060;
- public static final int CALL_LOG_CONTEXT_MENU_REPORT_AS_NOT_SPAM = 1061;
- public static final int NEW_CONTACT_OVERFLOW = 1062;
- public static final int NEW_CONTACT_FAB = 1063;
- public static final int VOICEMAIL_VVM3_TOS_SHOWN = 1064;
- public static final int VOICEMAIL_VVM3_TOS_ACCEPTED = 1065;
- public static final int VOICEMAIL_VVM3_TOS_DECLINED = 1066;
- public static final int VOICEMAIL_VVM3_TOS_DECLINE_CLICKED = 1067;
- public static final int VOICEMAIL_VVM3_TOS_DECLINE_CHANGE_PIN_SHOWN = 1068;
- public static final int STORAGE_PERMISSION_DISPLAYED = 1069;
- public static final int CAMERA_PERMISSION_DISPLAYED = 1074;
- public static final int STORAGE_PERMISSION_REQUESTED = 1070;
- public static final int CAMERA_PERMISSION_REQUESTED = 1075;
- public static final int STORAGE_PERMISSION_SETTINGS = 1071;
- public static final int CAMERA_PERMISSION_SETTINGS = 1076;
- public static final int STORAGE_PERMISSION_GRANTED = 1072;
- public static final int CAMERA_PERMISSION_GRANTED = 1077;
- public static final int STORAGE_PERMISSION_DENIED = 1073;
- public static final int CAMERA_PERMISSION_DENIED = 1078;
- public static final int VOICEMAIL_CONFIGURATION_STATE_CORRUPTION_DETECTED_FROM_ACTIVITY = 1079;
- public static final int VOICEMAIL_CONFIGURATION_STATE_CORRUPTION_DETECTED_FROM_NOTIFICATION =
- 1080;
- public static final int BACKUP_ON_BACKUP = 1081;
- public static final int BACKUP_ON_FULL_BACKUP = 1082;
- public static final int BACKUP_ON_BACKUP_DISABLED = 1083;
- public static final int BACKUP_VOICEMAIL_BACKED_UP = 1084;
- public static final int BACKUP_FULL_BACKED_UP = 1085;
- public static final int BACKUP_ON_BACKUP_JSON_EXCEPTION = 1086;
- public static final int BACKUP_ON_QUOTA_EXCEEDED = 1087;
- public static final int BACKUP_ON_RESTORE = 1088;
- public static final int BACKUP_RESTORED_FILE = 1089;
- public static final int BACKUP_RESTORED_VOICEMAIL = 1090;
- public static final int BACKUP_ON_RESTORE_FINISHED = 1091;
- public static final int BACKUP_ON_RESTORE_DISABLED = 1092;
- public static final int BACKUP_ON_RESTORE_JSON_EXCEPTION = 1093;
- public static final int BACKUP_ON_RESTORE_IO_EXCEPTION = 1094;
- public static final int BACKUP_MAX_VM_BACKUP_REACHED = 1095;
- public static final int EVENT_ANSWER_HINT_ACTIVATED = 1096;
- public static final int EVENT_ANSWER_HINT_DEACTIVATED = 1097;
- public static final int VVM_TAB_VIEWED = 1098;
- public static final int VVM_SHARE_VISIBLE = 1099;
- public static final int VVM_SHARE_PRESSED = 1100;
- public static final int OUTGOING_VIDEO_CALL = 1101;
- public static final int INCOMING_VIDEO_CALL = 1102;
- public static final int USER_PARTICIPATED_IN_A_VIDEO_CALL = 1103;
- public static final int BACKUP_ON_RESTORE_VM_DUPLICATE_NOT_RESTORING = 1104;
- public static final int CALL_LOG_SHARE_AND_CALL = 1105;
- public static final int CALL_COMPOSER_ACTIVITY_PLACE_RCS_CALL = 1106;
- public static final int CALL_COMPOSER_ACTIVITY_SEND_AND_CALL_PRESSED_WHEN_SESSION_NOT_READY =
- 1107;
- public static final int POST_CALL_PROMPT_USER_TO_SEND_MESSAGE_CLICKED = 1108;
- public static final int POST_CALL_PROMPT_USER_TO_SEND_MESSAGE = 1109;
- public static final int POST_CALL_PROMPT_USER_TO_VIEW_SENT_MESSAGE = 1110;
- public static final int POST_CALL_PROMPT_USER_TO_VIEW_SENT_MESSAGE_CLICKED = 1111;
- public static final int IN_CALL_SCREEN_TURN_ON_MUTE = 1112;
- public static final int IN_CALL_SCREEN_TURN_OFF_MUTE = 1113;
- public static final int IN_CALL_SCREEN_SWAP_CAMERA = 1114;
- public static final int IN_CALL_SCREEN_TURN_ON_VIDEO = 1115;
- public static final int IN_CALL_SCREEN_TURN_OFF_VIDEO = 1116;
- public static final int VIDEO_CALL_WITH_INCOMING_VOICE_CALL = 1117;
- public static final int VIDEO_CALL_WITH_INCOMING_VIDEO_CALL = 1118;
- public static final int VOICE_CALL_WITH_INCOMING_VOICE_CALL = 1119;
- public static final int VOICE_CALL_WITH_INCOMING_VIDEO_CALL = 1120;
- public static final int CALL_DETAILS_COPY_NUMBER = 1121;
- public static final int CALL_DETAILS_EDIT_BEFORE_CALL = 1122;
- public static final int CALL_DETAILS_CALL_BACK = 1123;
- public static final int VVM_USER_DISMISSED_VM_ALMOST_FULL_PROMO = 1124;
- public static final int VVM_USER_DISMISSED_VM_FULL_PROMO = 1125;
- public static final int VVM_USER_ENABLED_ARCHIVE_FROM_VM_ALMOST_FULL_PROMO = 1126;
- public static final int VVM_USER_ENABLED_ARCHIVE_FROM_VM_FULL_PROMO = 1127;
- public static final int VVM_USER_SHOWN_VM_ALMOST_FULL_PROMO = 1128;
- public static final int VVM_USER_SHOWN_VM_FULL_PROMO = 1129;
- public static final int VVM_USER_SHOWN_VM_ALMOST_FULL_ERROR_MESSAGE = 1130;
- public static final int VVM_USER_SHOWN_VM_FULL_ERROR_MESSAGE = 1131;
- public static final int VVM_USER_TURNED_ARCHIVE_ON_FROM_SETTINGS = 1132;
- public static final int VVM_USER_TURNED_ARCHIVE_OFF_FROM_SETTINGS = 1133;
- public static final int VVM_ARCHIVE_AUTO_DELETED_VM_FROM_SERVER = 1134;
- public static final int VVM_ARCHIVE_AUTO_DELETE_TURNED_OFF = 1135;
- public static final int VVM_TAB_VISIBLE = 1136;
- public static final int VVM_UNBUNDLED_EVENT_RECEIVED = 1137;
- public static final int VVM_ACTIVATION_STARTED = 1138;
- public static final int VVM_ACTIVATION_COMPLETED = 1139;
- public static final int VVM_AUTO_RETRY_ACTIVATION = 1140;
- public static final int VVM_PROVISIONING_STARTED = 1141;
- public static final int VVM_PROVISIONING_COMPLETED = 1142;
- public static final int VVM_SYNC_STARTED = 1143;
- public static final int VVM_SYNC_COMPLETED = 1144;
- public static final int VVM_AUTO_RETRY_SYNC = 1145;
- public static final int VVM_USER_RETRY = 1146;
- public static final int VVM_USER_SYNC = 1147;
- public static final int VVM_SETTINGS_VIEWED = 1148;
- public static final int VVM_CHANGE_PIN_CLICKED = 1149;
- public static final int VVM_CHANGE_PIN_COMPLETED = 1150;
- public static final int VVM_CHANGE_RINGTONE_CLICKED = 1151;
- public static final int VVM_CHANGE_VIBRATION_CLICKED = 1152;
- public static final int VVM_USER_ENABLED_IN_SETTINGS = 1153;
- public static final int VVM_USER_DISABLED_IN_SETTINGS = 1154;
- public static final int VVM_ADVANCED_SETINGS_CLICKED = 1155;
- public static final int VVM_NOTIFICATION_CLICKED = 1156;
- public static final int VVM_NOTIFICATION_CREATED = 1157;
- public static final int VVM_NOTIFICATION_CREATED_WITH_TRANSCRIPTION = 1158;
- public static final int VVM_TRANSCRIPTION_DOWNLOADED = 1159;
- public static final int VVM_CHANGE_AIRPLANE_MODE_CLICKED = 1160;
- public static final int VVM_CALL_VOICEMAIL_CLICKED = 1161;
- public static final int VVM_QUOTA_CHECK_UNAVAILABLE = 1162;
- public static final int EMERGENCY_NEW_EMERGENCY_CALL = 1163;
- public static final int EMERGENCY_CALLBACK = 1164;
- public static final int EMERGENCY_NO_LOCATION_PERMISSION = 1165;
- public static final int EMERGENCY_BATTERY_TOO_LOW_TO_GET_LOCATION = 1166;
- public static final int EMERGENCY_CANT_GET_LOCATION = 1167;
- public static final int EMERGENCY_STALE_LOCATION = 1168;
- public static final int EMERGENCY_INACCURATE_LOCATION = 1169;
- public static final int EMERGENCY_GOT_LOCATION = 1170;
- public static final int EMERGENCY_GOT_ADDRESS = 1171;
- public static final int EMERGENCY_GOT_MAP = 1172;
- public static final int EMERGENCY_LAUNCHED_MAP = 1173;
- }
-
- private static volatile DialerImpression[] _emptyArray;
- public static DialerImpression[] emptyArray() {
- // Lazily initializes the empty array
- if (_emptyArray == null) {
- synchronized (com.google.protobuf.nano.InternalNano.LAZY_INIT_LOCK) {
- if (_emptyArray == null) {
- _emptyArray = new DialerImpression[0];
- }
- }
- }
- return _emptyArray;
- }
-
- // @@protoc_insertion_point(class_scope:com.android.dialer.logging.DialerImpression)
-
- public DialerImpression() {
- clear();
- }
-
- public DialerImpression clear() {
- unknownFieldData = null;
- cachedSize = -1;
- return this;
- }
-
- @Override
- public DialerImpression mergeFrom(com.google.protobuf.nano.CodedInputByteBufferNano input)
- throws java.io.IOException {
- while (true) {
- int tag = input.readTag();
- switch (tag) {
- case 0:
- return this;
- default:
- {
- if (!super.storeUnknownField(input, tag)) {
- return this;
- }
- break;
- }
- }
- }
- }
-
- public static DialerImpression parseFrom(byte[] data)
- throws com.google.protobuf.nano.InvalidProtocolBufferNanoException {
- return com.google.protobuf.nano.MessageNano.mergeFrom(new DialerImpression(), data);
- }
-
- public static DialerImpression parseFrom(com.google.protobuf.nano.CodedInputByteBufferNano input)
- throws java.io.IOException {
- return new DialerImpression().mergeFrom(input);
- }
-}
diff --git a/java/com/android/dialer/logging/nano/InteractionEvent.java b/java/com/android/dialer/logging/nano/InteractionEvent.java
deleted file mode 100644
index 7ca95fa45..000000000
--- a/java/com/android/dialer/logging/nano/InteractionEvent.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Generated by the protocol buffer compiler. DO NOT EDIT!
-
-package com.android.dialer.logging.nano;
-
-/** This file is autogenerated, but javadoc required. */
-@SuppressWarnings("hiding")
-public final class InteractionEvent
- extends com.google.protobuf.nano.ExtendableMessageNano<InteractionEvent> {
-
- /** This file is autogenerated, but javadoc required. */
- // enum Type
- public interface Type {
- public static final int UNKNOWN = 0;
- public static final int CALL_BLOCKED = 15;
- public static final int BLOCK_NUMBER_CALL_LOG = 16;
- public static final int BLOCK_NUMBER_CALL_DETAIL = 17;
- public static final int BLOCK_NUMBER_MANAGEMENT_SCREEN = 18;
- public static final int UNBLOCK_NUMBER_CALL_LOG = 19;
- public static final int UNBLOCK_NUMBER_CALL_DETAIL = 20;
- public static final int UNBLOCK_NUMBER_MANAGEMENT_SCREEN = 21;
- public static final int IMPORT_SEND_TO_VOICEMAIL = 22;
- public static final int UNDO_BLOCK_NUMBER = 23;
- public static final int UNDO_UNBLOCK_NUMBER = 24;
- }
-
- private static volatile InteractionEvent[] _emptyArray;
- public static InteractionEvent[] emptyArray() {
- // Lazily initializes the empty array
- if (_emptyArray == null) {
- synchronized (com.google.protobuf.nano.InternalNano.LAZY_INIT_LOCK) {
- if (_emptyArray == null) {
- _emptyArray = new InteractionEvent[0];
- }
- }
- }
- return _emptyArray;
- }
-
- // @@protoc_insertion_point(class_scope:com.android.dialer.logging.InteractionEvent)
-
- public InteractionEvent() {
- clear();
- }
-
- public InteractionEvent clear() {
- unknownFieldData = null;
- cachedSize = -1;
- return this;
- }
-
- @Override
- public InteractionEvent mergeFrom(com.google.protobuf.nano.CodedInputByteBufferNano input)
- throws java.io.IOException {
- while (true) {
- int tag = input.readTag();
- switch (tag) {
- case 0:
- return this;
- default:
- {
- if (!super.storeUnknownField(input, tag)) {
- return this;
- }
- break;
- }
- }
- }
- }
-
- public static InteractionEvent parseFrom(byte[] data)
- throws com.google.protobuf.nano.InvalidProtocolBufferNanoException {
- return com.google.protobuf.nano.MessageNano.mergeFrom(new InteractionEvent(), data);
- }
-
- public static InteractionEvent parseFrom(com.google.protobuf.nano.CodedInputByteBufferNano input)
- throws java.io.IOException {
- return new InteractionEvent().mergeFrom(input);
- }
-}
diff --git a/java/com/android/dialer/logging/nano/ReportingLocation.java b/java/com/android/dialer/logging/nano/ReportingLocation.java
deleted file mode 100644
index 08ee04e7e..000000000
--- a/java/com/android/dialer/logging/nano/ReportingLocation.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Generated by the protocol buffer compiler. DO NOT EDIT!
-
-package com.android.dialer.logging.nano;
-
-/** This file is autogenerated, but javadoc required. */
-@SuppressWarnings("hiding")
-public final class ReportingLocation
- extends com.google.protobuf.nano.ExtendableMessageNano<ReportingLocation> {
-
- /** This file is autogenerated, but javadoc required. */
- // enum Type
- public interface Type {
- public static final int UNKNOWN_REPORTING_LOCATION = 0;
- public static final int CALL_LOG_HISTORY = 1;
- public static final int FEEDBACK_PROMPT = 2;
- }
-
- private static volatile ReportingLocation[] _emptyArray;
-
- public static ReportingLocation[] emptyArray() {
- // Lazily initializes the empty array
- if (_emptyArray == null) {
- synchronized (com.google.protobuf.nano.InternalNano.LAZY_INIT_LOCK) {
- if (_emptyArray == null) {
- _emptyArray = new ReportingLocation[0];
- }
- }
- }
- return _emptyArray;
- }
-
- // @@protoc_insertion_point(class_scope:com.android.dialer.logging.ReportingLocation)
-
- public ReportingLocation() {
- clear();
- }
-
- public ReportingLocation clear() {
- unknownFieldData = null;
- cachedSize = -1;
- return this;
- }
-
- @Override
- public ReportingLocation mergeFrom(com.google.protobuf.nano.CodedInputByteBufferNano input)
- throws java.io.IOException {
- while (true) {
- int tag = input.readTag();
- switch (tag) {
- case 0:
- return this;
- default:
- {
- if (!super.storeUnknownField(input, tag)) {
- return this;
- }
- break;
- }
- }
- }
- }
-
- public static ReportingLocation parseFrom(byte[] data)
- throws com.google.protobuf.nano.InvalidProtocolBufferNanoException {
- return com.google.protobuf.nano.MessageNano.mergeFrom(new ReportingLocation(), data);
- }
-
- public static ReportingLocation parseFrom(com.google.protobuf.nano.CodedInputByteBufferNano input)
- throws java.io.IOException {
- return new ReportingLocation().mergeFrom(input);
- }
-}
diff --git a/java/com/android/dialer/logging/nano/ScreenEvent.java b/java/com/android/dialer/logging/nano/ScreenEvent.java
deleted file mode 100644
index bd5b817e1..000000000
--- a/java/com/android/dialer/logging/nano/ScreenEvent.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Generated by the protocol buffer compiler. DO NOT EDIT!
-
-package com.android.dialer.logging.nano;
-
-/** This file is autogenerated, but javadoc required. */
-@SuppressWarnings("hiding")
-public final class ScreenEvent extends com.google.protobuf.nano.ExtendableMessageNano<ScreenEvent> {
-
- /** This file is autogenerated, but javadoc required. */
- // enum Type
- public interface Type {
- public static final int UNKNOWN = 0;
- public static final int DIALPAD = 1;
- public static final int SPEED_DIAL = 2;
- public static final int CALL_LOG = 3;
- public static final int VOICEMAIL_LOG = 4;
- public static final int ALL_CONTACTS = 5;
- public static final int REGULAR_SEARCH = 6;
- public static final int SMART_DIAL_SEARCH = 7;
- public static final int CALL_LOG_FILTER = 8;
- public static final int SETTINGS = 9;
- public static final int IMPORT_EXPORT_CONTACTS = 10;
- public static final int CLEAR_FREQUENTS = 11;
- public static final int SEND_FEEDBACK = 12;
- public static final int INCALL = 13;
- public static final int INCOMING_CALL = 14;
- public static final int CONFERENCE_MANAGEMENT = 15;
- public static final int INCALL_DIALPAD = 16;
- public static final int CALL_LOG_CONTEXT_MENU = 17;
- public static final int BLOCKED_NUMBER_MANAGEMENT = 18;
- public static final int BLOCKED_NUMBER_ADD_NUMBER = 19;
- public static final int CALL_DETAILS = 20;
- }
-
- private static volatile ScreenEvent[] _emptyArray;
- public static ScreenEvent[] emptyArray() {
- // Lazily initializes the empty array
- if (_emptyArray == null) {
- synchronized (com.google.protobuf.nano.InternalNano.LAZY_INIT_LOCK) {
- if (_emptyArray == null) {
- _emptyArray = new ScreenEvent[0];
- }
- }
- }
- return _emptyArray;
- }
-
- // @@protoc_insertion_point(class_scope:com.android.dialer.logging.ScreenEvent)
-
- public ScreenEvent() {
- clear();
- }
-
- public ScreenEvent clear() {
- unknownFieldData = null;
- cachedSize = -1;
- return this;
- }
-
- @Override
- public ScreenEvent mergeFrom(com.google.protobuf.nano.CodedInputByteBufferNano input)
- throws java.io.IOException {
- while (true) {
- int tag = input.readTag();
- switch (tag) {
- case 0:
- return this;
- default:
- {
- if (!super.storeUnknownField(input, tag)) {
- return this;
- }
- break;
- }
- }
- }
- }
-
- public static ScreenEvent parseFrom(byte[] data)
- throws com.google.protobuf.nano.InvalidProtocolBufferNanoException {
- return com.google.protobuf.nano.MessageNano.mergeFrom(new ScreenEvent(), data);
- }
-
- public static ScreenEvent parseFrom(com.google.protobuf.nano.CodedInputByteBufferNano input)
- throws java.io.IOException {
- return new ScreenEvent().mergeFrom(input);
- }
-}
diff --git a/java/com/android/dialer/logging/reporting_location.proto b/java/com/android/dialer/logging/reporting_location.proto
new file mode 100644
index 000000000..d436564df
--- /dev/null
+++ b/java/com/android/dialer/logging/reporting_location.proto
@@ -0,0 +1,16 @@
+syntax = "proto2";
+
+package com.android.dialer.logging;
+option java_package = "com.android.dialer.logging";
+option java_multiple_files = true;
+option optimize_for = LITE_RUNTIME;
+
+
+message ReportingLocation {
+ // Spam reporting location
+ enum Type {
+ UNKNOWN_REPORTING_LOCATION = 0;
+ CALL_LOG_HISTORY = 1;
+ FEEDBACK_PROMPT = 2;
+ }
+}
diff --git a/java/com/android/dialer/logging/screen_event.proto b/java/com/android/dialer/logging/screen_event.proto
new file mode 100644
index 000000000..ca624774d
--- /dev/null
+++ b/java/com/android/dialer/logging/screen_event.proto
@@ -0,0 +1,71 @@
+syntax = "proto2";
+
+package com.android.dialer.logging;
+option java_package = "com.android.dialer.logging";
+option java_multiple_files = true;
+option optimize_for = LITE_RUNTIME;
+
+
+message ScreenEvent {
+ enum Type {
+
+ UNKNOWN = 0;
+
+ DIALPAD = 1;
+
+ SPEED_DIAL = 2;
+
+ CALL_LOG = 3;
+
+ // The tab containing the list of voicemails only.
+ VOICEMAIL_LOG = 4;
+
+ // The tab containing the list of all contacts.
+ ALL_CONTACTS = 5;
+
+ // List of search results returned by typing into the search box.
+ REGULAR_SEARCH = 6;
+
+ // List of search results returned by typing into the dialpad.
+ SMART_DIAL_SEARCH = 7;
+
+ CALL_LOG_FILTER = 8;
+
+ SETTINGS = 9;
+
+ // The "Import/export contacts" dialog launched via the overflow menu.
+ IMPORT_EXPORT_CONTACTS = 10;
+
+ // The "Clear frequents" dialog launched via the overflow menu.
+ CLEAR_FREQUENTS = 11;
+
+ // The "Send feedback" dialog launched via the overflow menu.
+ SEND_FEEDBACK = 12;
+
+ // The main in call screen that displays caller details and contact photos
+ INCALL = 13;
+
+ // The screen that displays the glowpad widget (slide right to answer,
+ // slide left to dismiss).
+ INCOMING_CALL = 14;
+
+ // Conference management fragment displayed for conferences that support
+ // management of individual calls within the conference.
+ CONFERENCE_MANAGEMENT = 15;
+
+ // The dialpad displayed in-call that is used to send dtmf tones.
+ INCALL_DIALPAD = 16;
+
+ // Menu options displayed when long pressing on a call log entry
+ CALL_LOG_CONTEXT_MENU = 17;
+
+ // Screen displayed to allow the user to see an overview of all blocked
+ // numbers
+ BLOCKED_NUMBER_MANAGEMENT = 18;
+
+ // Screen displayed to allow the user to add a new blocked number
+ BLOCKED_NUMBER_ADD_NUMBER = 19;
+
+ CALL_DETAILS = 20;
+ }
+}
diff --git a/java/com/android/dialer/notification/NotificationChannelManager.java b/java/com/android/dialer/notification/NotificationChannelManager.java
index b795ffe5d..db7ded781 100644
--- a/java/com/android/dialer/notification/NotificationChannelManager.java
+++ b/java/com/android/dialer/notification/NotificationChannelManager.java
@@ -159,7 +159,7 @@ public class NotificationChannelManager {
"Null PhoneAccountHandle with channel " + channelName);
}
- Uri silentRingtone = Uri.parse("");
+ Uri silentRingtone = Uri.EMPTY;
CharSequence name;
int importance;
diff --git a/java/com/android/dialer/notification/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/notification/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..c5fd5e7fa
--- /dev/null
+++ b/java/com/android/dialer/notification/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="notification_channel_incoming_call" msgid="2478740764736158630">"Dolazni pozivi"</string>
+ <string name="notification_channel_ongoing_call" msgid="5593444445363940672">"Pozivi u toku"</string>
+ <string name="notification_channel_missed_call" msgid="5820652855908217695">"Propušteni pozivi"</string>
+ <string name="notification_channel_voicemail" msgid="9206363659849426204">"Govorne poruke"</string>
+ <string name="notification_channel_external_call" msgid="2200143959948071132">"Spoljni pozivi"</string>
+ <string name="notification_channel_misc" msgid="5181419532951960166">"Razno"</string>
+</resources>
diff --git a/java/com/android/dialer/notification/res/values/ids.xml b/java/com/android/dialer/notification/res/values/ids.xml
index 6bdb489a7..dc071e2ed 100644
--- a/java/com/android/dialer/notification/res/values/ids.xml
+++ b/java/com/android/dialer/notification/res/values/ids.xml
@@ -19,7 +19,8 @@
<item name="notification_incoming_call" type="id"/>
<item name="notification_ongoing_call" type="id"/>
<item name="notification_missed_call" type="id"/>
- <item name="notification_voicemail" type="id"/>
+ <item name="notification_visual_voicemail" type="id"/>
+ <item name="notification_legacy_voicemail" type="id"/>
<item name="notification_external_call" type="id"/>
<item name="notification_call_blocking_disabled_by_emergency_call" type="id"/>
<item name="notification_spam_call" type="id"/>
diff --git a/java/com/android/dialer/persistentlog/PersistentLogFileHandler.java b/java/com/android/dialer/persistentlog/PersistentLogFileHandler.java
index bb51fa881..c113559a1 100644
--- a/java/com/android/dialer/persistentlog/PersistentLogFileHandler.java
+++ b/java/com/android/dialer/persistentlog/PersistentLogFileHandler.java
@@ -155,6 +155,9 @@ final class PersistentLogFileHandler {
private File[] getLogFiles() {
logDirectory.mkdirs();
File[] files = logDirectory.listFiles();
+ if (files == null) {
+ files = new File[0];
+ }
Arrays.sort(
files,
(File lhs, File rhs) ->
diff --git a/java/com/android/dialer/phonenumbercache/CachedNumberLookupService.java b/java/com/android/dialer/phonenumbercache/CachedNumberLookupService.java
index e589a6882..2aed9e75e 100644
--- a/java/com/android/dialer/phonenumbercache/CachedNumberLookupService.java
+++ b/java/com/android/dialer/phonenumbercache/CachedNumberLookupService.java
@@ -18,13 +18,11 @@ package com.android.dialer.phonenumbercache;
import android.content.Context;
import android.net.Uri;
-import android.support.annotation.IntDef;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.WorkerThread;
+import com.android.dialer.logging.ContactSource;
import java.io.InputStream;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
public interface CachedNumberLookupService {
@@ -47,9 +45,9 @@ public interface CachedNumberLookupService {
boolean isCacheUri(String uri);
- boolean isBusiness(int sourceType);
+ boolean isBusiness(ContactSource.Type sourceType);
- boolean canReportAsInvalid(int sourceType, String objectId);
+ boolean canReportAsInvalid(ContactSource.Type sourceType, String objectId);
/** @return return {@link Uri} to the photo or return {@code null} when failing to add photo */
@Nullable
@@ -64,28 +62,10 @@ public interface CachedNumberLookupService {
interface CachedContactInfo {
- int SOURCE_TYPE_DIRECTORY = 1;
- int SOURCE_TYPE_EXTENDED = 2;
- int SOURCE_TYPE_PLACES = 3;
- int SOURCE_TYPE_PROFILE = 4;
- int SOURCE_TYPE_CNAP = 5;
- int SOURCE_TYPE_CEQUINT_CALLER_ID = 6;
-
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({
- SOURCE_TYPE_DIRECTORY,
- SOURCE_TYPE_EXTENDED,
- SOURCE_TYPE_PLACES,
- SOURCE_TYPE_PROFILE,
- SOURCE_TYPE_CNAP,
- SOURCE_TYPE_CEQUINT_CALLER_ID
- })
- public @interface ContactSourceType {}
-
@NonNull
ContactInfo getContactInfo();
- void setSource(@ContactSourceType int sourceType, String name, long directoryId);
+ void setSource(ContactSource.Type sourceType, String name, long directoryId);
void setDirectorySource(String name, long directoryId);
diff --git a/java/com/android/dialer/phonenumbercache/ContactInfo.java b/java/com/android/dialer/phonenumbercache/ContactInfo.java
index dab5e4b4c..9def939ca 100644
--- a/java/com/android/dialer/phonenumbercache/ContactInfo.java
+++ b/java/com/android/dialer/phonenumbercache/ContactInfo.java
@@ -20,7 +20,7 @@ import android.net.Uri;
import android.text.TextUtils;
import com.android.contacts.common.ContactsUtils.UserType;
import com.android.contacts.common.util.UriUtils;
-import com.android.dialer.phonenumbercache.CachedNumberLookupService.CachedContactInfo.ContactSourceType;
+import com.android.dialer.logging.ContactSource;
/** Information for a contact as needed by the Call Log. */
public class ContactInfo {
@@ -58,7 +58,12 @@ public class ContactInfo {
public boolean isBadData;
public String objectId;
public @UserType long userType;
- public @ContactSourceType int sourceType = 0;
+ public ContactSource.Type sourceType;
+ /**
+ * True if local contact exists. This is only used for Cequint Caller ID so it won't overwrite
+ * photo if local contact exists.
+ */
+ boolean contactExists;
/** @see android.provider.ContactsContract.CommonDataKinds.Phone#CARRIER_PRESENCE */
public int carrierPresence;
diff --git a/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java b/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java
index dc11c1b21..a9a5edce5 100644
--- a/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java
+++ b/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java
@@ -41,6 +41,7 @@ import com.android.contacts.common.util.Constants;
import com.android.contacts.common.util.UriUtils;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.ContactSource;
import com.android.dialer.oem.CequintCallerIdManager;
import com.android.dialer.oem.CequintCallerIdManager.CequintCallerIdContact;
import com.android.dialer.phonenumbercache.CachedNumberLookupService.CachedContactInfo;
@@ -370,6 +371,7 @@ public class ContactInfoHelper {
info.formattedNumber = null;
info.userType =
ContactsUtils.determineUserType(null, phoneLookupCursor.getLong(PhoneQuery.PERSON_ID));
+ info.contactExists = true;
return info;
}
@@ -577,7 +579,7 @@ public class ContactInfoHelper {
* @param sourceType sourceType of the contact. This is usually populated by {@link
* #mCachedNumberLookupService}.
*/
- public boolean isBusiness(int sourceType) {
+ public boolean isBusiness(ContactSource.Type sourceType) {
return mCachedNumberLookupService != null && mCachedNumberLookupService.isBusiness(sourceType);
}
@@ -589,7 +591,7 @@ public class ContactInfoHelper {
* @param objectId The ID of the Contact object.
* @return true if contacts from this source can be marked with an invalid caller id
*/
- public boolean canReportAsInvalid(int sourceType, String objectId) {
+ public boolean canReportAsInvalid(ContactSource.Type sourceType, String objectId) {
return mCachedNumberLookupService != null
&& mCachedNumberLookupService.canReportAsInvalid(sourceType, objectId);
}
@@ -614,9 +616,10 @@ public class ContactInfoHelper {
}
if (!TextUtils.isEmpty(cequintCallerIdContact.geoDescription)) {
info.geoDescription = cequintCallerIdContact.geoDescription;
- info.sourceType = CachedContactInfo.SOURCE_TYPE_CEQUINT_CALLER_ID;
+ info.sourceType = ContactSource.Type.SOURCE_TYPE_CEQUINT_CALLER_ID;
}
- if (info.photoUri == null && cequintCallerIdContact.imageUrl != null) {
+ // Only update photo if local lookup has no result.
+ if (!info.contactExists && info.photoUri == null && cequintCallerIdContact.imageUrl != null) {
info.photoUri = UriUtils.parseUriOrNull(cequintCallerIdContact.imageUrl);
}
}
diff --git a/java/com/android/dialer/phonenumberutil/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/phonenumberutil/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..bab794cfa
--- /dev/null
+++ b/java/com/android/dialer/phonenumberutil/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="private_num_verizon" msgid="3281061244372204957">"Ograničeno"</string>
+ <string name="private_num_non_verizon" msgid="5829254390933301216">"Privatan broj"</string>
+</resources>
diff --git a/java/com/android/dialer/postcall/PostCall.java b/java/com/android/dialer/postcall/PostCall.java
index bb60bcc86..e27a9b582 100644
--- a/java/com/android/dialer/postcall/PostCall.java
+++ b/java/com/android/dialer/postcall/PostCall.java
@@ -30,8 +30,8 @@ import com.android.dialer.common.Assert;
import com.android.dialer.common.ConfigProvider;
import com.android.dialer.common.ConfigProviderBindings;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
import com.android.dialer.util.DialerUtils;
import com.android.dialer.util.IntentUtil;
diff --git a/java/com/android/dialer/postcall/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/postcall/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..a745967a3
--- /dev/null
+++ b/java/com/android/dialer/postcall/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="post_call_message" msgid="3541277172068556862">"Recite zašto zovete"</string>
+ <string name="post_call_message_1" msgid="4827849136801228106">"Hitno je. Uzvratite mi poziv."</string>
+ <string name="post_call_message_2" msgid="5310301526176003385">"Pozovite me kad budete imali vremena."</string>
+ <string name="post_call_message_3" msgid="3932759658420368056">"Nije hitno, možemo da ćaskamo kasnije."</string>
+ <string name="post_call_add_message" msgid="8298853527467080463">"Dodaj poruku"</string>
+ <string name="post_call_message_sent" msgid="832757977985265036">"Poruka je poslata"</string>
+ <string name="view" msgid="8572192949673703830">"Prikaži"</string>
+</resources>
diff --git a/java/com/android/dialer/protos/ProtoParsers.java b/java/com/android/dialer/protos/ProtoParsers.java
deleted file mode 100644
index 7dfbc7c5e..000000000
--- a/java/com/android/dialer/protos/ProtoParsers.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.dialer.protos;
-
-import android.content.Intent;
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
-import com.android.dialer.common.Assert;
-import com.google.protobuf.nano.CodedOutputByteBufferNano;
-import com.google.protobuf.nano.InvalidProtocolBufferNanoException;
-import com.google.protobuf.nano.MessageNano;
-import java.io.IOException;
-
-/** Useful methods for using Protocol Buffers with Android. */
-public final class ProtoParsers {
-
- private ProtoParsers() {}
-
- /** Retrieve a proto from a Bundle */
- @SuppressWarnings("unchecked") // We want to eventually optimize away parser classes, so cast
- public static <T extends MessageNano> T get(Bundle bundle, String key, T defaultInstance)
- throws InvalidProtocolBufferNanoException {
- InternalDontUse parcelable = bundle.getParcelable(key);
- return (T) parcelable.getMessageUnsafe(defaultInstance);
- }
-
- /**
- * Retrieve a proto from a trusted bundle
- *
- * @throws RuntimeException if the proto cannot be parsed
- */
- public static <T extends MessageNano> T getFromInstanceState(
- Bundle bundle, String key, T defaultInstance) {
- try {
- return get(bundle, key, defaultInstance);
- } catch (InvalidProtocolBufferNanoException e) {
- throw new RuntimeException(e);
- }
- }
-
- /**
- * Stores a proto in a Bundle, for later retrieval by {@link #get(Bundle, String, MessageNano)} or
- * {@link #getFromInstanceState(Bundle, String, MessageNano)}.
- */
- public static void put(Bundle bundle, String key, MessageNano message) {
- bundle.putParcelable(key, new InternalDontUse<>(null, message));
- }
-
- /**
- * Stores a proto in an Intent, for later retrieval by {@link #get(Bundle, String, MessageNano)}.
- * Needs separate method because Intent has similar to but different API than Bundle.
- */
- public static void put(Intent intent, String key, MessageNano message) {
- intent.putExtra(key, new InternalDontUse<>(null, message));
- }
-
- /** Returns a {@linkplain Parcelable} representation of this protobuf message. */
- public static <T extends MessageNano> ParcelableProto<T> asParcelable(T message) {
- return new InternalDontUse<>(null, message);
- }
-
- /**
- * A protobuf message that can be stored in a {@link Parcel}.
- *
- * <p><b>Note:</b> This <code>Parcelable</code> can only be used in single app. Attempting to send
- * it to another app through an <code>Intent</code> will result in an exception due to Proguard
- * obfusation when the target application attempts to load the <code>ParcelableProto</code> class.
- */
- public interface ParcelableProto<T extends MessageNano> extends Parcelable {
- /**
- * @throws IllegalStateException if the parceled data does not correspond to the defaultInstance
- * type.
- */
- T getMessage(T defaultInstance);
- }
-
- /** Public because of Parcelable requirements. Do not use. */
- public static final class InternalDontUse<T extends MessageNano> implements ParcelableProto<T> {
- /* One of these two fields is always populated - since the bytes field never escapes this
- * object, there is no risk of concurrent modification by multiple threads, and volatile
- * is sufficient to be thread-safe. */
- private volatile byte[] bytes;
- private volatile T message;
-
- /**
- * Ideally, we would have type safety here. However, a static field {@link Creator} is required
- * by {@link Parcelable}. Static fields are inherently not type safe, since only 1 exists per
- * class (rather than 1 per type).
- */
- public static final Parcelable.Creator<InternalDontUse<?>> CREATOR =
- new Creator<InternalDontUse<?>>() {
- @Override
- public InternalDontUse<?> createFromParcel(Parcel parcel) {
- int serializedSize = parcel.readInt();
- byte[] array = new byte[serializedSize];
- parcel.readByteArray(array);
- return new InternalDontUse<>(array, null);
- }
-
- @Override
- public InternalDontUse<?>[] newArray(int i) {
- return new InternalDontUse[i];
- }
- };
-
- private InternalDontUse(byte[] bytes, T message) {
- Assert.checkArgument(bytes != null || message != null);
- this.bytes = bytes;
- this.message = message;
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel parcel, int i) {
- if (bytes == null) {
- final byte[] flatArray = new byte[message.getSerializedSize()];
- try {
- message.writeTo(CodedOutputByteBufferNano.newInstance(flatArray));
- bytes = flatArray;
- } catch (IOException impossible) {
- throw new AssertionError(impossible);
- }
- }
- parcel.writeInt(bytes.length);
- parcel.writeByteArray(bytes);
- }
-
- @Override
- public T getMessage(T defaultInstance) {
- try {
- // The proto should never be invalid if it came from our application, so if it is, throw.
- return getMessageUnsafe(defaultInstance);
- } catch (InvalidProtocolBufferNanoException e) {
- throw new IllegalStateException(e);
- }
- }
-
- @SuppressWarnings("unchecked") // We're being deserialized, so there's no real type safety
- T getMessageUnsafe(T defaultInstance) throws InvalidProtocolBufferNanoException {
- // There's a risk that we'll double-parse the bytes, but that's OK, because it'll end up
- // as the same immutable object anyway.
- if (message == null) {
- message = MessageNano.mergeFrom(defaultInstance, bytes);
- }
- return message;
- }
- }
-}
diff --git a/java/com/android/dialer/shortcuts/CallContactActivity.java b/java/com/android/dialer/shortcuts/CallContactActivity.java
index d2c9a760d..b80797984 100644
--- a/java/com/android/dialer/shortcuts/CallContactActivity.java
+++ b/java/com/android/dialer/shortcuts/CallContactActivity.java
@@ -21,8 +21,8 @@ import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.widget.Toast;
-import com.android.dialer.callintent.nano.CallInitiationType;
-import com.android.dialer.callintent.nano.CallSpecificAppData;
+import com.android.dialer.callintent.CallInitiationType;
+import com.android.dialer.callintent.CallSpecificAppData;
import com.android.dialer.common.LogUtil;
import com.android.dialer.interactions.PhoneNumberInteraction;
import com.android.dialer.interactions.PhoneNumberInteraction.InteractionErrorCode;
@@ -68,8 +68,10 @@ public class CallContactActivity extends TransactionSafeActivity
* user can choose to grant or deny them.
*/
private void makeCall() {
- CallSpecificAppData callSpecificAppData = new CallSpecificAppData();
- callSpecificAppData.callInitiationType = CallInitiationType.Type.LAUNCHER_SHORTCUT;
+ CallSpecificAppData callSpecificAppData =
+ CallSpecificAppData.newBuilder()
+ .setCallInitiationType(CallInitiationType.Type.LAUNCHER_SHORTCUT)
+ .build();
PhoneNumberInteraction.startInteractionForPhoneCall(
this, contactUri, false /* isVideoCall */, callSpecificAppData);
}
diff --git a/java/com/android/dialer/shortcuts/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/shortcuts/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..86ce91524
--- /dev/null
+++ b/java/com/android/dialer/shortcuts/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2016 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="dialer_shortcut_add_contact_short" msgid="7587385197258884650">"Novo"</string>
+ <string name="dialer_shortcut_add_contact_long" msgid="7573187314386728329">"Novi kontakt"</string>
+ <string name="dialer_shortcut_disabled_message" msgid="7713603194332953571">"Prečica ne funkcioniše. Prevucite da biste je uklonili."</string>
+ <string name="dialer_shortcut_contact_not_found_or_has_no_number" msgid="3538594504123040498">"Kontakt više nije dostupan."</string>
+ <string name="dialer_shortcut_no_permissions" msgid="4422956724546867357">"Ne možete da pozovete jer nemate dozvole."</string>
+</resources>
diff --git a/java/com/android/dialer/spam/SpamBindings.java b/java/com/android/dialer/spam/SpamBindings.java
index b5d18b828..5631da696 100644
--- a/java/com/android/dialer/spam/SpamBindings.java
+++ b/java/com/android/dialer/spam/SpamBindings.java
@@ -18,6 +18,9 @@ package com.android.dialer.spam;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import com.android.dialer.logging.ContactLookupResult;
+import com.android.dialer.logging.ContactSource;
+import com.android.dialer.logging.ReportingLocation;
/** Allows the container application to mark calls as spam. */
public interface SpamBindings {
@@ -85,12 +88,16 @@ public interface SpamBindings {
* @param callType Whether the type of call is missed, voicemail, etc. Example of this is {@link
* android.provider.CallLog.Calls#VOICEMAIL_TYPE}.
* @param from Where in the dialer this was reported from. Must be one of {@link
- * com.android.dialer.logging.nano.ReportingLocation}.
+ * com.android.dialer.logging.ReportingLocation}.
* @param contactLookupResultType The result of the contact lookup for this phone number. Must be
- * one of {@link com.android.dialer.logging.nano.ContactLookupResult}.
+ * one of {@link com.android.dialer.logging.ContactLookupResult}.
*/
void reportSpamFromAfterCallNotification(
- String number, String countryIso, int callType, int from, int contactLookupResultType);
+ String number,
+ String countryIso,
+ int callType,
+ ReportingLocation.Type from,
+ ContactLookupResult.Type contactLookupResultType);
/**
* Reports number as spam.
@@ -100,12 +107,16 @@ public interface SpamBindings {
* @param callType Whether the type of call is missed, voicemail, etc. Example of this is {@link
* android.provider.CallLog.Calls#VOICEMAIL_TYPE}.
* @param from Where in the dialer this was reported from. Must be one of {@link
- * com.android.dialer.logging.nano.ReportingLocation}.
+ * com.android.dialer.logging.ReportingLocation}.
* @param contactSourceType If we have cached contact information for the phone number, this
- * indicates its source. Must be one of {@link com.android.dialer.logging.nano.ContactSource}.
+ * indicates its source. Must be one of {@link com.android.dialer.logging.ContactSource}.
*/
void reportSpamFromCallHistory(
- String number, String countryIso, int callType, int from, int contactSourceType);
+ String number,
+ String countryIso,
+ int callType,
+ ReportingLocation.Type from,
+ ContactSource.Type contactSourceType);
/**
* Reports number as not spam.
@@ -115,12 +126,16 @@ public interface SpamBindings {
* @param callType Whether the type of call is missed, voicemail, etc. Example of this is {@link
* android.provider.CallLog.Calls#VOICEMAIL_TYPE}.
* @param from Where in the dialer this was reported from. Must be one of {@link
- * com.android.dialer.logging.nano.ReportingLocation}.
+ * com.android.dialer.logging.ReportingLocation}.
* @param contactLookupResultType The result of the contact lookup for this phone number. Must be
- * one of {@link com.android.dialer.logging.nano.ContactLookupResult}.
+ * one of {@link com.android.dialer.logging.ContactLookupResult}.
*/
void reportNotSpamFromAfterCallNotification(
- String number, String countryIso, int callType, int from, int contactLookupResultType);
+ String number,
+ String countryIso,
+ int callType,
+ ReportingLocation.Type from,
+ ContactLookupResult.Type contactLookupResultType);
/**
* Reports number as not spam.
@@ -130,12 +145,16 @@ public interface SpamBindings {
* @param callType Whether the type of call is missed, voicemail, etc. Example of this is {@link
* android.provider.CallLog.Calls#VOICEMAIL_TYPE}.
* @param from Where in the dialer this was reported from. Must be one of {@link
- * com.android.dialer.logging.nano.ReportingLocation}.
+ * com.android.dialer.logging.ReportingLocation}.
* @param contactSourceType If we have cached contact information for the phone number, this
- * indicates its source. Must be one of {@link com.android.dialer.logging.nano.ContactSource}.
+ * indicates its source. Must be one of {@link com.android.dialer.logging.ContactSource}.
*/
void reportNotSpamFromCallHistory(
- String number, String countryIso, int callType, int from, int contactSourceType);
+ String number,
+ String countryIso,
+ int callType,
+ ReportingLocation.Type from,
+ ContactSource.Type contactSourceType);
/** Callback to be invoked when data is fetched. */
interface Listener {
diff --git a/java/com/android/dialer/spam/SpamBindingsStub.java b/java/com/android/dialer/spam/SpamBindingsStub.java
index 08939530c..b815dc97b 100644
--- a/java/com/android/dialer/spam/SpamBindingsStub.java
+++ b/java/com/android/dialer/spam/SpamBindingsStub.java
@@ -16,6 +16,10 @@
package com.android.dialer.spam;
+import com.android.dialer.logging.ContactLookupResult;
+import com.android.dialer.logging.ContactSource;
+import com.android.dialer.logging.ReportingLocation;
+
/** Default implementation of SpamBindings. */
public class SpamBindingsStub implements SpamBindings {
@@ -76,17 +80,33 @@ public class SpamBindingsStub implements SpamBindings {
@Override
public void reportSpamFromAfterCallNotification(
- String number, String countryIso, int callType, int from, int contactLookupResultType) {}
+ String number,
+ String countryIso,
+ int callType,
+ ReportingLocation.Type from,
+ ContactLookupResult.Type contactLookupResultType) {}
@Override
public void reportSpamFromCallHistory(
- String number, String countryIso, int callType, int from, int contactSourceType) {}
+ String number,
+ String countryIso,
+ int callType,
+ ReportingLocation.Type from,
+ ContactSource.Type contactSourceType) {}
@Override
public void reportNotSpamFromAfterCallNotification(
- String number, String countryIso, int callType, int from, int contactLookupResultType) {}
+ String number,
+ String countryIso,
+ int callType,
+ ReportingLocation.Type from,
+ ContactLookupResult.Type contactLookupResultType) {}
@Override
public void reportNotSpamFromCallHistory(
- String number, String countryIso, int callType, int from, int contactSourceType) {}
+ String number,
+ String countryIso,
+ int callType,
+ ReportingLocation.Type from,
+ ContactSource.Type contactSourceType) {}
}
diff --git a/java/com/android/dialer/speeddial/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/speeddial/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..b0c27bc7b
--- /dev/null
+++ b/java/com/android/dialer/speeddial/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+</resources>
diff --git a/java/com/android/dialer/theme/res/drawable-hdpi/ic_block_24dp.png b/java/com/android/dialer/theme/res/drawable-hdpi/ic_block_24dp.png
new file mode 100644
index 000000000..2ccc89d24
--- /dev/null
+++ b/java/com/android/dialer/theme/res/drawable-hdpi/ic_block_24dp.png
Binary files differ
diff --git a/java/com/android/dialer/theme/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/theme/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..bd719ecd1
--- /dev/null
+++ b/java/com/android/dialer/theme/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2016 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="unknown" msgid="7932659017139013277">"Nepoznato"</string>
+ <string name="payphone" msgid="7106361320283710387">"Telefonska govornica"</string>
+ <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefon"</string>
+</resources>
diff --git a/java/com/android/dialer/util/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/util/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..8f16f823a
--- /dev/null
+++ b/java/com/android/dialer/util/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2012 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="default_notification_description" msgid="4304424287748323094">"Podrazumevani zvuk (<xliff:g id="DEFAULT_SOUND_TITLE">%1$s</xliff:g>)"</string>
+ <string name="ringtone_silent" msgid="946744257396998305">"Ništa"</string>
+ <string name="ringtone_unknown" msgid="1310974715243581582">"Nepoznati zvuk zvona"</string>
+ <string name="activity_not_available" msgid="8360067109103762211">"Na ovom uređaju nema aplikacija za to"</string>
+ <string name="outgoing_wps_warning" msgid="7505673114152005234">"Ako uputite WPS poziv, prekinućete postojeći poziv."</string>
+ <string name="dialog_continue" msgid="4070630558441163574">"Nastavi"</string>
+</resources>
diff --git a/java/com/android/dialer/voicemailstatus/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/voicemailstatus/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..37aa7738e
--- /dev/null
+++ b/java/com/android/dialer/voicemailstatus/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2012 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="voicemail_status_voicemail_not_available" msgid="5853033558114540057">"Ažuriranja govorne pošte nisu dostupna"</string>
+ <string name="voicemail_status_messages_waiting" msgid="8900895357460505877">"Imate novu govornu poštu. Trenutno ne može da se učita."</string>
+ <string name="voicemail_status_configure_voicemail" msgid="8642831215097798709">"Podesite govornu poštu"</string>
+ <string name="voicemail_status_audio_not_available" msgid="2341871147130931237">"Audio nije dostupan"</string>
+ <string name="voicemail_status_action_configure" msgid="4445818528232235329">"Podesi"</string>
+ <string name="voicemail_status_action_call_server" msgid="3189606267631644507">"Zovi govornu poštu"</string>
+</resources>
diff --git a/java/com/android/dialer/widget/DialerToolbar.java b/java/com/android/dialer/widget/DialerToolbar.java
index 715a27701..9e1058383 100644
--- a/java/com/android/dialer/widget/DialerToolbar.java
+++ b/java/com/android/dialer/widget/DialerToolbar.java
@@ -39,6 +39,7 @@ public class DialerToolbar extends Toolbar {
setElevation(getResources().getDimensionPixelSize(R.dimen.toolbar_elevation));
setBackgroundColor(getResources().getColor(R.color.dialer_theme_color));
setNavigationIcon(R.drawable.quantum_ic_close_white_24);
+ setNavigationContentDescription(R.string.toolbar_close);
setNavigationOnClickListener(v -> ((Activity) context).finish());
}
diff --git a/java/com/android/dialer/widget/MessageFragment.java b/java/com/android/dialer/widget/MessageFragment.java
index ab47f2463..b136f47eb 100644
--- a/java/com/android/dialer/widget/MessageFragment.java
+++ b/java/com/android/dialer/widget/MessageFragment.java
@@ -21,6 +21,7 @@ import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.text.Editable;
import android.text.InputFilter;
+import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
@@ -43,6 +44,7 @@ public class MessageFragment extends Fragment implements OnClickListener, TextWa
private EditText customMessage;
private ImageView sendMessage;
+ private View sendMessageContainer;
private TextView remainingChar;
private int charLimit;
@@ -68,10 +70,11 @@ public class MessageFragment extends Fragment implements OnClickListener, TextWa
View view = inflater.inflate(R.layout.fragment_message, container, false);
sendMessage = (ImageView) view.findViewById(R.id.send_message);
+ sendMessageContainer = view.findViewById(R.id.count_and_send_container);
if (getArguments().getBoolean(SHOW_SEND_ICON_KEY, false)) {
sendMessage.setVisibility(View.VISIBLE);
sendMessage.setEnabled(false);
- sendMessage.setOnClickListener(this);
+ sendMessageContainer.setOnClickListener(this);
}
customMessage = (EditText) view.findViewById(R.id.custom_message);
@@ -97,8 +100,10 @@ public class MessageFragment extends Fragment implements OnClickListener, TextWa
@Override
public void onClick(View view) {
- if (view == sendMessage) {
- getListener().onMessageFragmentSendMessage(customMessage.getText().toString());
+ if (view == sendMessageContainer) {
+ if (!TextUtils.isEmpty(customMessage.getText())) {
+ getListener().onMessageFragmentSendMessage(customMessage.getText().toString());
+ }
} else if (view.getId() == R.id.selectable_text_view) {
customMessage.setText(((TextView) view).getText());
customMessage.setSelection(customMessage.getText().length());
diff --git a/java/com/android/dialer/widget/res/layout/fragment_message.xml b/java/com/android/dialer/widget/res/layout/fragment_message.xml
index f09c54f57..e39e03aee 100644
--- a/java/com/android/dialer/widget/res/layout/fragment_message.xml
+++ b/java/com/android/dialer/widget/res/layout/fragment_message.xml
@@ -53,11 +53,11 @@
<LinearLayout
android:id="@+id/count_and_send_container"
android:orientation="vertical"
- android:layout_width="wrap_content"
+ android:layout_width="@dimen/send_container_width"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
- android:layout_marginEnd="@dimen/textview_item_padding"
+ android:paddingEnd="@dimen/textview_item_padding"
android:gravity="center">
<ImageView
diff --git a/java/com/android/dialer/widget/res/values-af/strings.xml b/java/com/android/dialer/widget/res/values-af/strings.xml
index 1d6f9581e..7c5e83a93 100644
--- a/java/com/android/dialer/widget/res/values-af/strings.xml
+++ b/java/com/android/dialer/widget/res/values-af/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Skryf \'n gepasmaakte boodskap"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Maak toe"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-am/strings.xml b/java/com/android/dialer/widget/res/values-am/strings.xml
index e3d75a3b4..f11b46835 100644
--- a/java/com/android/dialer/widget/res/values-am/strings.xml
+++ b/java/com/android/dialer/widget/res/values-am/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"ብጁ መልዕክት ይጻፉ"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"ዝጋ"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-ar/strings.xml b/java/com/android/dialer/widget/res/values-ar/strings.xml
index 51ddb05c0..cb2e73378 100644
--- a/java/com/android/dialer/widget/res/values-ar/strings.xml
+++ b/java/com/android/dialer/widget/res/values-ar/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"كتابة رسالة مخصصة"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"إغلاق"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-az/strings.xml b/java/com/android/dialer/widget/res/values-az/strings.xml
index 346bf37a8..3860a5846 100644
--- a/java/com/android/dialer/widget/res/values-az/strings.xml
+++ b/java/com/android/dialer/widget/res/values-az/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Fərdi mesaj yazın"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Bağlayın"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/widget/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..daefd9020
--- /dev/null
+++ b/java/com/android/dialer/widget/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="custom_message_hint" msgid="2179012696339457461">"Napišite prilagođenu poruku"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Zatvorite"</string>
+</resources>
diff --git a/java/com/android/dialer/widget/res/values-be/strings.xml b/java/com/android/dialer/widget/res/values-be/strings.xml
index ca354816e..87861321f 100644
--- a/java/com/android/dialer/widget/res/values-be/strings.xml
+++ b/java/com/android/dialer/widget/res/values-be/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Напісаць карыстальніцкае паведамленне"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Закрыць"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-bg/strings.xml b/java/com/android/dialer/widget/res/values-bg/strings.xml
index e78703046..35e980c5f 100644
--- a/java/com/android/dialer/widget/res/values-bg/strings.xml
+++ b/java/com/android/dialer/widget/res/values-bg/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Напишете свое съобщение"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Затваряне"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-bn/strings.xml b/java/com/android/dialer/widget/res/values-bn/strings.xml
index f76f42549..9e1707114 100644
--- a/java/com/android/dialer/widget/res/values-bn/strings.xml
+++ b/java/com/android/dialer/widget/res/values-bn/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"একটি কাস্টম বার্তা লিখুন"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"বন্ধ করুন"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-bs/strings.xml b/java/com/android/dialer/widget/res/values-bs/strings.xml
index 7fdec7b58..0bc1a9c15 100644
--- a/java/com/android/dialer/widget/res/values-bs/strings.xml
+++ b/java/com/android/dialer/widget/res/values-bs/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Napišite prilagođenu poruku"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Zatvori"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-ca/strings.xml b/java/com/android/dialer/widget/res/values-ca/strings.xml
index ce0a4492d..863930039 100644
--- a/java/com/android/dialer/widget/res/values-ca/strings.xml
+++ b/java/com/android/dialer/widget/res/values-ca/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Escriu un miss. personalitzat"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Tanca"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-cs/strings.xml b/java/com/android/dialer/widget/res/values-cs/strings.xml
index c82757879..829aab8dd 100644
--- a/java/com/android/dialer/widget/res/values-cs/strings.xml
+++ b/java/com/android/dialer/widget/res/values-cs/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Napište vlastní zprávu"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Zavřít"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-da/strings.xml b/java/com/android/dialer/widget/res/values-da/strings.xml
index da76f04fe..9381f36f5 100644
--- a/java/com/android/dialer/widget/res/values-da/strings.xml
+++ b/java/com/android/dialer/widget/res/values-da/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Skriv en tilpasset besked"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Luk"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-de/strings.xml b/java/com/android/dialer/widget/res/values-de/strings.xml
index ddd7e91b9..949fe9e49 100644
--- a/java/com/android/dialer/widget/res/values-de/strings.xml
+++ b/java/com/android/dialer/widget/res/values-de/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Eigene Nachricht schreiben"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Schließen"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-el/strings.xml b/java/com/android/dialer/widget/res/values-el/strings.xml
index dcbbea6fa..21e049bf7 100644
--- a/java/com/android/dialer/widget/res/values-el/strings.xml
+++ b/java/com/android/dialer/widget/res/values-el/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Γράψτε ένα προσαρμ. μήνυμα"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Κλείσιμο"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-en-rAU/strings.xml b/java/com/android/dialer/widget/res/values-en-rAU/strings.xml
index d3030145a..7f22b46da 100644
--- a/java/com/android/dialer/widget/res/values-en-rAU/strings.xml
+++ b/java/com/android/dialer/widget/res/values-en-rAU/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Write a custom message"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Close"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-en-rGB/strings.xml b/java/com/android/dialer/widget/res/values-en-rGB/strings.xml
index d3030145a..7f22b46da 100644
--- a/java/com/android/dialer/widget/res/values-en-rGB/strings.xml
+++ b/java/com/android/dialer/widget/res/values-en-rGB/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Write a custom message"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Close"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-en-rIN/strings.xml b/java/com/android/dialer/widget/res/values-en-rIN/strings.xml
index d3030145a..7f22b46da 100644
--- a/java/com/android/dialer/widget/res/values-en-rIN/strings.xml
+++ b/java/com/android/dialer/widget/res/values-en-rIN/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Write a custom message"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Close"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-es-rUS/strings.xml b/java/com/android/dialer/widget/res/values-es-rUS/strings.xml
index 438f0f4e2..c7fbdaa58 100644
--- a/java/com/android/dialer/widget/res/values-es-rUS/strings.xml
+++ b/java/com/android/dialer/widget/res/values-es-rUS/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Escribe tu propio mensaje"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Cerrar"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-es/strings.xml b/java/com/android/dialer/widget/res/values-es/strings.xml
index fcab71b1c..507e8af0d 100644
--- a/java/com/android/dialer/widget/res/values-es/strings.xml
+++ b/java/com/android/dialer/widget/res/values-es/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Mensaje personalizado"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Cerrar"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-et/strings.xml b/java/com/android/dialer/widget/res/values-et/strings.xml
index 6b857fee7..71dab4276 100644
--- a/java/com/android/dialer/widget/res/values-et/strings.xml
+++ b/java/com/android/dialer/widget/res/values-et/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Kirjutage kohandatud sõnum"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Sule"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-eu/strings.xml b/java/com/android/dialer/widget/res/values-eu/strings.xml
index a8d3d52ca..b8e4085a0 100644
--- a/java/com/android/dialer/widget/res/values-eu/strings.xml
+++ b/java/com/android/dialer/widget/res/values-eu/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Idatzi mezu bat"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Itxi"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-fa/strings.xml b/java/com/android/dialer/widget/res/values-fa/strings.xml
index 34c30cc68..0c3b1d4f5 100644
--- a/java/com/android/dialer/widget/res/values-fa/strings.xml
+++ b/java/com/android/dialer/widget/res/values-fa/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"پیام سفارشی بنویسید"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"بستن"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-fi/strings.xml b/java/com/android/dialer/widget/res/values-fi/strings.xml
index 5d596fa04..e0e971cd8 100644
--- a/java/com/android/dialer/widget/res/values-fi/strings.xml
+++ b/java/com/android/dialer/widget/res/values-fi/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Kirjoita oma viesti"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Sulje"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-fr-rCA/strings.xml b/java/com/android/dialer/widget/res/values-fr-rCA/strings.xml
index 092efb619..9776385b4 100644
--- a/java/com/android/dialer/widget/res/values-fr-rCA/strings.xml
+++ b/java/com/android/dialer/widget/res/values-fr-rCA/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Rédiger message personnalisé"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Fermer"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-fr/strings.xml b/java/com/android/dialer/widget/res/values-fr/strings.xml
index e29274d6e..fececd84a 100644
--- a/java/com/android/dialer/widget/res/values-fr/strings.xml
+++ b/java/com/android/dialer/widget/res/values-fr/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Écrire mon propre message"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Fermer"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-gl/strings.xml b/java/com/android/dialer/widget/res/values-gl/strings.xml
index 1c4670af4..6a756810b 100644
--- a/java/com/android/dialer/widget/res/values-gl/strings.xml
+++ b/java/com/android/dialer/widget/res/values-gl/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Escribe unha mensaxe personalizada"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Pechar"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-gu/strings.xml b/java/com/android/dialer/widget/res/values-gu/strings.xml
index afbf1b3e0..c2f8cf0e1 100644
--- a/java/com/android/dialer/widget/res/values-gu/strings.xml
+++ b/java/com/android/dialer/widget/res/values-gu/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"એક કસ્ટમ સંદેશ લખો"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"બંધ કરો"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-hi/strings.xml b/java/com/android/dialer/widget/res/values-hi/strings.xml
index 556e193c6..63c94e7f6 100644
--- a/java/com/android/dialer/widget/res/values-hi/strings.xml
+++ b/java/com/android/dialer/widget/res/values-hi/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"कोई कस्टम संदेश लिखें"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"बंद करें"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-hr/strings.xml b/java/com/android/dialer/widget/res/values-hr/strings.xml
index 7fdec7b58..28a58d453 100644
--- a/java/com/android/dialer/widget/res/values-hr/strings.xml
+++ b/java/com/android/dialer/widget/res/values-hr/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Napišite prilagođenu poruku"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Zatvaranje"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-hu/strings.xml b/java/com/android/dialer/widget/res/values-hu/strings.xml
index a778ab12a..dcd2b36ea 100644
--- a/java/com/android/dialer/widget/res/values-hu/strings.xml
+++ b/java/com/android/dialer/widget/res/values-hu/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Egyéni üzenet írása"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Bezárás"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-hy/strings.xml b/java/com/android/dialer/widget/res/values-hy/strings.xml
index 79216d6ef..7b78bb23e 100644
--- a/java/com/android/dialer/widget/res/values-hy/strings.xml
+++ b/java/com/android/dialer/widget/res/values-hy/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Գրել տեքստն ինքնուրույն"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Փակել"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-in/strings.xml b/java/com/android/dialer/widget/res/values-in/strings.xml
index 4e1076de0..b4b65504b 100644
--- a/java/com/android/dialer/widget/res/values-in/strings.xml
+++ b/java/com/android/dialer/widget/res/values-in/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Tulis pesan khusus"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Tutup"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-is/strings.xml b/java/com/android/dialer/widget/res/values-is/strings.xml
index 9fbf9bd09..fd844197e 100644
--- a/java/com/android/dialer/widget/res/values-is/strings.xml
+++ b/java/com/android/dialer/widget/res/values-is/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Skrifa sérsniðin skilaboð"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Loka"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-it/strings.xml b/java/com/android/dialer/widget/res/values-it/strings.xml
index 257ed26b4..0af3fd2eb 100644
--- a/java/com/android/dialer/widget/res/values-it/strings.xml
+++ b/java/com/android/dialer/widget/res/values-it/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Scrivi un messaggio personalizzato"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Chiudi"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-iw/strings.xml b/java/com/android/dialer/widget/res/values-iw/strings.xml
index 298bc40ff..a485888ae 100644
--- a/java/com/android/dialer/widget/res/values-iw/strings.xml
+++ b/java/com/android/dialer/widget/res/values-iw/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"כתוב הודעה מותאמת אישית"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"סגירה"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-ja/strings.xml b/java/com/android/dialer/widget/res/values-ja/strings.xml
index 39081d58b..9fd65a806 100644
--- a/java/com/android/dialer/widget/res/values-ja/strings.xml
+++ b/java/com/android/dialer/widget/res/values-ja/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"カスタム メッセージを入力"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"閉じる"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-ka/strings.xml b/java/com/android/dialer/widget/res/values-ka/strings.xml
index 3e65a6a1a..6dde04430 100644
--- a/java/com/android/dialer/widget/res/values-ka/strings.xml
+++ b/java/com/android/dialer/widget/res/values-ka/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"დაწერეთ მორგებ. შეტყობინება"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"დახურვა"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-kk/strings.xml b/java/com/android/dialer/widget/res/values-kk/strings.xml
index eca687f50..334d915e2 100644
--- a/java/com/android/dialer/widget/res/values-kk/strings.xml
+++ b/java/com/android/dialer/widget/res/values-kk/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Арнаулы хабар жазу"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Жабу"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-km/strings.xml b/java/com/android/dialer/widget/res/values-km/strings.xml
index 37253c4bc..d0f5633e4 100644
--- a/java/com/android/dialer/widget/res/values-km/strings.xml
+++ b/java/com/android/dialer/widget/res/values-km/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"សរសេរ​សារ​ផ្ទាល់ខ្លួន"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"បិទ"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-kn/strings.xml b/java/com/android/dialer/widget/res/values-kn/strings.xml
index 66fcc25be..3535bfcb7 100644
--- a/java/com/android/dialer/widget/res/values-kn/strings.xml
+++ b/java/com/android/dialer/widget/res/values-kn/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"ಕಸ್ಟಮ್ ಸಂದೇಶವನ್ನು ಬರೆಯಿರಿ"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"ಮುಚ್ಚಿ"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-ko/strings.xml b/java/com/android/dialer/widget/res/values-ko/strings.xml
index 8b5f619a0..8c00cea8b 100644
--- a/java/com/android/dialer/widget/res/values-ko/strings.xml
+++ b/java/com/android/dialer/widget/res/values-ko/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"맞춤 메시지를 작성하세요."</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"닫기"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-ky/strings.xml b/java/com/android/dialer/widget/res/values-ky/strings.xml
index a13f795f4..46ea8514c 100644
--- a/java/com/android/dialer/widget/res/values-ky/strings.xml
+++ b/java/com/android/dialer/widget/res/values-ky/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Башка билдирүүнү жазыңыз"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Жабуу"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-lo/strings.xml b/java/com/android/dialer/widget/res/values-lo/strings.xml
index 598a2c9f6..0db64a78a 100644
--- a/java/com/android/dialer/widget/res/values-lo/strings.xml
+++ b/java/com/android/dialer/widget/res/values-lo/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"ຂຽນຂໍ້ຄວາມດ້ວຍຕົນເອງ"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"ປິດ"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-lt/strings.xml b/java/com/android/dialer/widget/res/values-lt/strings.xml
index d09ba16c3..a10b91ef6 100644
--- a/java/com/android/dialer/widget/res/values-lt/strings.xml
+++ b/java/com/android/dialer/widget/res/values-lt/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Parašykite tinkintą praneš."</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Uždaryti"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-lv/strings.xml b/java/com/android/dialer/widget/res/values-lv/strings.xml
index a3eab390a..8ff079390 100644
--- a/java/com/android/dialer/widget/res/values-lv/strings.xml
+++ b/java/com/android/dialer/widget/res/values-lv/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Rakstīt pielāgotu ziņojumu"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Aizvērt"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-mk/strings.xml b/java/com/android/dialer/widget/res/values-mk/strings.xml
index f4230d2e3..aa9be3055 100644
--- a/java/com/android/dialer/widget/res/values-mk/strings.xml
+++ b/java/com/android/dialer/widget/res/values-mk/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Напиши приспособена порака"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Затвори"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-ml/strings.xml b/java/com/android/dialer/widget/res/values-ml/strings.xml
index 947e6cc87..b52ee401c 100644
--- a/java/com/android/dialer/widget/res/values-ml/strings.xml
+++ b/java/com/android/dialer/widget/res/values-ml/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"ഒരു ഇ‌ഷ്‌ടാനുസൃത സന്ദേശം രചിക്കൂ"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"അടയ്‌ക്കുക"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-mn/strings.xml b/java/com/android/dialer/widget/res/values-mn/strings.xml
index 21de0a530..6bdad8983 100644
--- a/java/com/android/dialer/widget/res/values-mn/strings.xml
+++ b/java/com/android/dialer/widget/res/values-mn/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Тусгай зурвас бичих"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Хаах"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-mr/strings.xml b/java/com/android/dialer/widget/res/values-mr/strings.xml
index 9a7adc5c9..5661fa8b9 100644
--- a/java/com/android/dialer/widget/res/values-mr/strings.xml
+++ b/java/com/android/dialer/widget/res/values-mr/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"एक सानुकूल संदेश लिहा"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"बंद करा"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-ms/strings.xml b/java/com/android/dialer/widget/res/values-ms/strings.xml
index 41071ce39..8889ccc8d 100644
--- a/java/com/android/dialer/widget/res/values-ms/strings.xml
+++ b/java/com/android/dialer/widget/res/values-ms/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Tulis mesej tersuai"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Tutup"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-my/strings.xml b/java/com/android/dialer/widget/res/values-my/strings.xml
index 250808366..9a69f29eb 100644
--- a/java/com/android/dialer/widget/res/values-my/strings.xml
+++ b/java/com/android/dialer/widget/res/values-my/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"စိတ်ကြိုက် မက်ဆေ့ဂျ်တစ်ခု ရေးပါ"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"ပိတ်ရန်"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-nb/strings.xml b/java/com/android/dialer/widget/res/values-nb/strings.xml
index ef6b545e2..100156bd1 100644
--- a/java/com/android/dialer/widget/res/values-nb/strings.xml
+++ b/java/com/android/dialer/widget/res/values-nb/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Skriv egendefinert melding"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Lukk"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-ne/strings.xml b/java/com/android/dialer/widget/res/values-ne/strings.xml
index ab3697da9..abb8bb04b 100644
--- a/java/com/android/dialer/widget/res/values-ne/strings.xml
+++ b/java/com/android/dialer/widget/res/values-ne/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"आफू अनुकूल सन्देश लेख्‍ने"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"बन्द गर्नुहोस्"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-nl/strings.xml b/java/com/android/dialer/widget/res/values-nl/strings.xml
index 3e569d96c..556028893 100644
--- a/java/com/android/dialer/widget/res/values-nl/strings.xml
+++ b/java/com/android/dialer/widget/res/values-nl/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Schrijf zelf een bericht"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Sluiten"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-no/strings.xml b/java/com/android/dialer/widget/res/values-no/strings.xml
index ef6b545e2..100156bd1 100644
--- a/java/com/android/dialer/widget/res/values-no/strings.xml
+++ b/java/com/android/dialer/widget/res/values-no/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Skriv egendefinert melding"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Lukk"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-pa/strings.xml b/java/com/android/dialer/widget/res/values-pa/strings.xml
index 6cdbb70fc..4c69c2c6e 100644
--- a/java/com/android/dialer/widget/res/values-pa/strings.xml
+++ b/java/com/android/dialer/widget/res/values-pa/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"ਵਿਸ਼ੇਸ਼-ਵਿਉਂਤਬੱਧ ਸੰਦੇਸ਼ ਲਿਖੋ"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"ਬੰਦ ਕਰੋ"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-pl/strings.xml b/java/com/android/dialer/widget/res/values-pl/strings.xml
index d6e844729..cec7a4045 100644
--- a/java/com/android/dialer/widget/res/values-pl/strings.xml
+++ b/java/com/android/dialer/widget/res/values-pl/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Wpisz wiadomość"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Zamknij"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-pt-rBR/strings.xml b/java/com/android/dialer/widget/res/values-pt-rBR/strings.xml
index de4215f80..b15bfac8d 100644
--- a/java/com/android/dialer/widget/res/values-pt-rBR/strings.xml
+++ b/java/com/android/dialer/widget/res/values-pt-rBR/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Escreva sua mensagem"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Fechar"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-pt-rPT/strings.xml b/java/com/android/dialer/widget/res/values-pt-rPT/strings.xml
index 88b961203..ece2ef2c3 100644
--- a/java/com/android/dialer/widget/res/values-pt-rPT/strings.xml
+++ b/java/com/android/dialer/widget/res/values-pt-rPT/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Escreva uma mensagem"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Fechar"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-pt/strings.xml b/java/com/android/dialer/widget/res/values-pt/strings.xml
index de4215f80..b15bfac8d 100644
--- a/java/com/android/dialer/widget/res/values-pt/strings.xml
+++ b/java/com/android/dialer/widget/res/values-pt/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Escreva sua mensagem"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Fechar"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-ro/strings.xml b/java/com/android/dialer/widget/res/values-ro/strings.xml
index 31e0d99af..753b920b4 100644
--- a/java/com/android/dialer/widget/res/values-ro/strings.xml
+++ b/java/com/android/dialer/widget/res/values-ro/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Scrieți mesaj personalizat"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Închideți"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-ru/strings.xml b/java/com/android/dialer/widget/res/values-ru/strings.xml
index 20f0a7f17..bdebd3ce4 100644
--- a/java/com/android/dialer/widget/res/values-ru/strings.xml
+++ b/java/com/android/dialer/widget/res/values-ru/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Добавьте свой текст"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Закрыть"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-si/strings.xml b/java/com/android/dialer/widget/res/values-si/strings.xml
index f1fa77c0b..4988259d4 100644
--- a/java/com/android/dialer/widget/res/values-si/strings.xml
+++ b/java/com/android/dialer/widget/res/values-si/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"අභිරුචි පණිවිඩයක් ලියන්න"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"වසන්න"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-sk/strings.xml b/java/com/android/dialer/widget/res/values-sk/strings.xml
index 894701768..5dc1bd505 100644
--- a/java/com/android/dialer/widget/res/values-sk/strings.xml
+++ b/java/com/android/dialer/widget/res/values-sk/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Napíšte vlastnú správu"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Zavrieť"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-sl/strings.xml b/java/com/android/dialer/widget/res/values-sl/strings.xml
index a46f854dd..0ba965b2e 100644
--- a/java/com/android/dialer/widget/res/values-sl/strings.xml
+++ b/java/com/android/dialer/widget/res/values-sl/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Napišite sporočilo po meri"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Zapri"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-sq/strings.xml b/java/com/android/dialer/widget/res/values-sq/strings.xml
index baa0f52cb..7f5e0f285 100644
--- a/java/com/android/dialer/widget/res/values-sq/strings.xml
+++ b/java/com/android/dialer/widget/res/values-sq/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Shkruaj mesazh të person."</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Mbyll"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-sr/strings.xml b/java/com/android/dialer/widget/res/values-sr/strings.xml
index f17531c18..446c27363 100644
--- a/java/com/android/dialer/widget/res/values-sr/strings.xml
+++ b/java/com/android/dialer/widget/res/values-sr/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Напишите прилагођену поруку"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Затворите"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-sv/strings.xml b/java/com/android/dialer/widget/res/values-sv/strings.xml
index a4c45f953..7d2f44c45 100644
--- a/java/com/android/dialer/widget/res/values-sv/strings.xml
+++ b/java/com/android/dialer/widget/res/values-sv/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Skriv anpassat meddelande"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Stäng"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-sw/strings.xml b/java/com/android/dialer/widget/res/values-sw/strings.xml
index 4adbd6e4a..d2c2a9721 100644
--- a/java/com/android/dialer/widget/res/values-sw/strings.xml
+++ b/java/com/android/dialer/widget/res/values-sw/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Andika ujumbe maalum"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Funga"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-ta/strings.xml b/java/com/android/dialer/widget/res/values-ta/strings.xml
index ea099f1db..4061c169f 100644
--- a/java/com/android/dialer/widget/res/values-ta/strings.xml
+++ b/java/com/android/dialer/widget/res/values-ta/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"தனிப்பயன் செய்தியை எழுதவும்"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"மூடு"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-te/strings.xml b/java/com/android/dialer/widget/res/values-te/strings.xml
index 278971365..c2474b7ce 100644
--- a/java/com/android/dialer/widget/res/values-te/strings.xml
+++ b/java/com/android/dialer/widget/res/values-te/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"అనుకూల సందేశాన్ని వ్రాయండి"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"మూసివేయి"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-th/strings.xml b/java/com/android/dialer/widget/res/values-th/strings.xml
index 466296819..d450b4b13 100644
--- a/java/com/android/dialer/widget/res/values-th/strings.xml
+++ b/java/com/android/dialer/widget/res/values-th/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"เขียนข้อความที่กำหนดเอง"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"ปิด"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-tl/strings.xml b/java/com/android/dialer/widget/res/values-tl/strings.xml
index 60850f297..ee7c52f7b 100644
--- a/java/com/android/dialer/widget/res/values-tl/strings.xml
+++ b/java/com/android/dialer/widget/res/values-tl/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Sumulat ng custom na mensahe"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Isara"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-tr/strings.xml b/java/com/android/dialer/widget/res/values-tr/strings.xml
index 32ebdc72a..64e2ea535 100644
--- a/java/com/android/dialer/widget/res/values-tr/strings.xml
+++ b/java/com/android/dialer/widget/res/values-tr/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Özel bir mesaj yazın"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Kapat"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-uk/strings.xml b/java/com/android/dialer/widget/res/values-uk/strings.xml
index d26d8880d..f8d9bb871 100644
--- a/java/com/android/dialer/widget/res/values-uk/strings.xml
+++ b/java/com/android/dialer/widget/res/values-uk/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Ваше власне повідомлення"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Закрити"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-ur/strings.xml b/java/com/android/dialer/widget/res/values-ur/strings.xml
index d8023dbb1..6edeb5c95 100644
--- a/java/com/android/dialer/widget/res/values-ur/strings.xml
+++ b/java/com/android/dialer/widget/res/values-ur/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"ایک حسب ضرورت پیغام لکھیں"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"بند کریں"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-uz/strings.xml b/java/com/android/dialer/widget/res/values-uz/strings.xml
index 7c6eabcb1..434464aef 100644
--- a/java/com/android/dialer/widget/res/values-uz/strings.xml
+++ b/java/com/android/dialer/widget/res/values-uz/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Boshqa xabar yozing"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Yopish"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-vi/strings.xml b/java/com/android/dialer/widget/res/values-vi/strings.xml
index 6111ce380..1a30f7c96 100644
--- a/java/com/android/dialer/widget/res/values-vi/strings.xml
+++ b/java/com/android/dialer/widget/res/values-vi/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Viết tin nhắn tùy chỉnh"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Đóng"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-zh-rCN/strings.xml b/java/com/android/dialer/widget/res/values-zh-rCN/strings.xml
index b41e758d3..799972393 100644
--- a/java/com/android/dialer/widget/res/values-zh-rCN/strings.xml
+++ b/java/com/android/dialer/widget/res/values-zh-rCN/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"自行撰写信息"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"关闭"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-zh-rHK/strings.xml b/java/com/android/dialer/widget/res/values-zh-rHK/strings.xml
index f6e0afe43..b0bfcc8d9 100644
--- a/java/com/android/dialer/widget/res/values-zh-rHK/strings.xml
+++ b/java/com/android/dialer/widget/res/values-zh-rHK/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"撰寫自訂訊息"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"關閉"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-zh-rTW/strings.xml b/java/com/android/dialer/widget/res/values-zh-rTW/strings.xml
index f6e0afe43..b0bfcc8d9 100644
--- a/java/com/android/dialer/widget/res/values-zh-rTW/strings.xml
+++ b/java/com/android/dialer/widget/res/values-zh-rTW/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"撰寫自訂訊息"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"關閉"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values-zu/strings.xml b/java/com/android/dialer/widget/res/values-zu/strings.xml
index c908618fc..074aa5822 100644
--- a/java/com/android/dialer/widget/res/values-zu/strings.xml
+++ b/java/com/android/dialer/widget/res/values-zu/strings.xml
@@ -2,4 +2,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_message_hint" msgid="2179012696339457461">"Bhala umlayezo wangokwezifiso"</string>
+ <string name="toolbar_close" msgid="1081308076149879833">"Vala"</string>
</resources>
diff --git a/java/com/android/dialer/widget/res/values/dimens.xml b/java/com/android/dialer/widget/res/values/dimens.xml
index 0b1c1f15b..20393a842 100644
--- a/java/com/android/dialer/widget/res/values/dimens.xml
+++ b/java/com/android/dialer/widget/res/values/dimens.xml
@@ -20,6 +20,7 @@
<dimen name="textview_item_padding">16dp</dimen>
<dimen name="message_remaining_char_text_size">12sp</dimen>
<dimen name="message_divider_height">1dp</dimen>
+ <dimen name="send_container_width">48dp</dimen>
<dimen name="toolbar_title_text_size">20sp</dimen>
<dimen name="toolbar_title_small_text_size">14sp</dimen>
diff --git a/java/com/android/dialer/widget/res/values/strings.xml b/java/com/android/dialer/widget/res/values/strings.xml
index 6904c2de1..a5829bb0b 100644
--- a/java/com/android/dialer/widget/res/values/strings.xml
+++ b/java/com/android/dialer/widget/res/values/strings.xml
@@ -2,4 +2,7 @@
<resources>
<!-- Hint in a text field to compose a custom message to send with a phone call [CHAR LIMIT=27] -->
<string name="custom_message_hint">Write a custom message</string>
+
+ <!-- Accessibility string for close/navigation icon in DialerToolbar -->
+ <string name="toolbar_close">Close</string>
</resources> \ No newline at end of file
diff --git a/java/com/android/incallui/AnswerScreenPresenter.java b/java/com/android/incallui/AnswerScreenPresenter.java
index f48413d92..8116f131b 100644
--- a/java/com/android/incallui/AnswerScreenPresenter.java
+++ b/java/com/android/incallui/AnswerScreenPresenter.java
@@ -23,6 +23,8 @@ import android.support.v4.os.UserManagerCompat;
import android.telecom.VideoProfile;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.DialerImpression;
+import com.android.dialer.logging.Logger;
import com.android.incallui.answer.protocol.AnswerScreen;
import com.android.incallui.answer.protocol.AnswerScreenDelegate;
import com.android.incallui.answerproximitysensor.AnswerProximitySensor;
@@ -77,8 +79,18 @@ public class AnswerScreenPresenter
public void onAnswer(boolean answerVideoAsAudio) {
if (answerScreen.isVideoUpgradeRequest()) {
if (answerVideoAsAudio) {
+ Logger.get(context)
+ .logCallImpression(
+ DialerImpression.Type.VIDEO_CALL_REQUEST_ACCEPTED_AS_AUDIO,
+ call.getUniqueCallId(),
+ call.getTimeAddedMs());
call.getVideoTech().acceptVideoRequestAsAudio();
} else {
+ Logger.get(context)
+ .logCallImpression(
+ DialerImpression.Type.VIDEO_CALL_REQUEST_ACCEPTED,
+ call.getUniqueCallId(),
+ call.getTimeAddedMs());
call.getVideoTech().acceptVideoRequest();
}
} else {
@@ -93,6 +105,11 @@ public class AnswerScreenPresenter
@Override
public void onReject() {
if (answerScreen.isVideoUpgradeRequest()) {
+ Logger.get(context)
+ .logCallImpression(
+ DialerImpression.Type.VIDEO_CALL_REQUEST_DECLINED,
+ call.getUniqueCallId(),
+ call.getTimeAddedMs());
call.getVideoTech().declineVideoRequest();
} else {
call.reject(false /* rejectWithMessage */, null);
diff --git a/java/com/android/incallui/CallButtonPresenter.java b/java/com/android/incallui/CallButtonPresenter.java
index d2bd31998..b0c3a99ea 100644
--- a/java/com/android/incallui/CallButtonPresenter.java
+++ b/java/com/android/incallui/CallButtonPresenter.java
@@ -24,15 +24,16 @@ import android.telecom.CallAudioState;
import com.android.contacts.common.compat.CallCompat;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
-import com.android.incallui.AudioModeProvider.AudioModeListener;
import com.android.incallui.InCallCameraManager.Listener;
import com.android.incallui.InCallPresenter.CanAddCallListener;
import com.android.incallui.InCallPresenter.InCallDetailsListener;
import com.android.incallui.InCallPresenter.InCallState;
import com.android.incallui.InCallPresenter.InCallStateListener;
import com.android.incallui.InCallPresenter.IncomingCallListener;
+import com.android.incallui.audiomode.AudioModeProvider;
+import com.android.incallui.audiomode.AudioModeProvider.AudioModeListener;
import com.android.incallui.call.CallList;
import com.android.incallui.call.DialerCall;
import com.android.incallui.call.DialerCall.CameraDirection;
@@ -270,6 +271,11 @@ public class CallButtonPresenter
@Override
public void changeToVideoClicked() {
LogUtil.enterBlock("CallButtonPresenter.changeToVideoClicked");
+ Logger.get(mContext)
+ .logCallImpression(
+ DialerImpression.Type.VIDEO_CALL_UPGRADE_REQUESTED,
+ mCall.getUniqueCallId(),
+ mCall.getTimeAddedMs());
mCall.getVideoTech().upgradeToVideo();
}
diff --git a/java/com/android/incallui/CallCardPresenter.java b/java/com/android/incallui/CallCardPresenter.java
index 6a34688e8..a51f54edb 100644
--- a/java/com/android/incallui/CallCardPresenter.java
+++ b/java/com/android/incallui/CallCardPresenter.java
@@ -50,8 +50,8 @@ import com.android.dialer.compat.ActivityCompat;
import com.android.dialer.enrichedcall.EnrichedCallComponent;
import com.android.dialer.enrichedcall.EnrichedCallManager;
import com.android.dialer.enrichedcall.Session;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
import com.android.dialer.multimedia.MultimediaData;
import com.android.dialer.oem.MotorolaUtils;
import com.android.incallui.ContactInfoCache.ContactCacheEntry;
@@ -663,10 +663,13 @@ public class CallCardPresenter
MultimediaData multimediaData = null;
if (mPrimary.getNumber() != null) {
+ EnrichedCallManager manager = EnrichedCallComponent.get(mContext).getEnrichedCallManager();
Session enrichedCallSession =
- EnrichedCallComponent.get(mContext)
- .getEnrichedCallManager()
- .getSession(mPrimary.getUniqueCallId(), mPrimary.getNumber());
+ manager.getSession(mPrimary.getUniqueCallId(), mPrimary.getNumber());
+
+ mPrimary.setEnrichedCallSession(enrichedCallSession);
+ mPrimary.setEnrichedCallCapabilities(manager.getCapabilities(mPrimary.getNumber()));
+
if (enrichedCallSession != null) {
enrichedCallSession.setUniqueDialerCallId(mPrimary.getUniqueCallId());
multimediaData = enrichedCallSession.getMultimediaData();
diff --git a/java/com/android/incallui/ConferenceManagerFragment.java b/java/com/android/incallui/ConferenceManagerFragment.java
index 8696bb8ec..cef8a3874 100644
--- a/java/com/android/incallui/ConferenceManagerFragment.java
+++ b/java/com/android/incallui/ConferenceManagerFragment.java
@@ -23,7 +23,7 @@ import android.view.ViewGroup;
import android.widget.ListView;
import com.android.contacts.common.ContactPhotoManager;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.ScreenEvent;
+import com.android.dialer.logging.ScreenEvent;
import com.android.incallui.ConferenceManagerPresenter.ConferenceManagerUi;
import com.android.incallui.baseui.BaseFragment;
import com.android.incallui.call.CallList;
diff --git a/java/com/android/incallui/ContactInfoCache.java b/java/com/android/incallui/ContactInfoCache.java
index 9e696b55e..3014de363 100644
--- a/java/com/android/incallui/ContactInfoCache.java
+++ b/java/com/android/incallui/ContactInfoCache.java
@@ -45,7 +45,8 @@ import com.android.dialer.common.Assert;
import com.android.dialer.common.concurrent.DialerExecutor;
import com.android.dialer.common.concurrent.DialerExecutor.Worker;
import com.android.dialer.common.concurrent.DialerExecutors;
-import com.android.dialer.logging.nano.ContactLookupResult;
+import com.android.dialer.logging.ContactLookupResult;
+import com.android.dialer.logging.ContactSource;
import com.android.dialer.oem.CequintCallerIdManager;
import com.android.dialer.oem.CequintCallerIdManager.CequintCallerIdContact;
import com.android.dialer.phonenumbercache.CachedNumberLookupService;
@@ -98,7 +99,7 @@ public class ContactInfoCache implements OnImageLoadCompleteListener {
}
ContactInfo contactInfo = new ContactInfo();
CachedContactInfo cacheInfo = input.service.buildCachedContactInfo(contactInfo);
- cacheInfo.setSource(CachedContactInfo.SOURCE_TYPE_CNAP, "CNAP", 0);
+ cacheInfo.setSource(ContactSource.Type.SOURCE_TYPE_CNAP, "CNAP", 0);
contactInfo.name = input.cnapName;
contactInfo.number = input.number;
contactInfo.type = ContactsContract.CommonDataKinds.Phone.TYPE_MAIN;
@@ -143,8 +144,7 @@ public class ContactInfoCache implements OnImageLoadCompleteListener {
// TODO: get rid of caller info.
final CallerInfo info = CallerInfoUtils.buildCallerInfo(context, call);
- ContactInfoCache.populateCacheEntry(
- context, info, entry, call.getNumberPresentation(), isIncoming);
+ ContactInfoCache.populateCacheEntry(context, info, entry, call.getNumberPresentation());
return entry;
}
@@ -153,8 +153,7 @@ public class ContactInfoCache implements OnImageLoadCompleteListener {
@NonNull Context context,
@NonNull CallerInfo info,
@NonNull ContactCacheEntry cce,
- int presentation,
- boolean isIncoming) {
+ int presentation) {
Objects.requireNonNull(info);
String displayName = null;
String displayNumber = null;
@@ -442,7 +441,7 @@ public class ContactInfoCache implements OnImageLoadCompleteListener {
}
// We always replace the entry. The only exception is the same photo case.
- ContactCacheEntry cacheEntry = buildEntry(mContext, callerInfo, presentationMode, isIncoming);
+ ContactCacheEntry cacheEntry = buildEntry(mContext, callerInfo, presentationMode);
cacheEntry.queryId = queryToken.mQueryId;
ContactCacheEntry existingCacheEntry = mInfoMap.get(callId);
@@ -509,20 +508,26 @@ public class ContactInfoCache implements OnImageLoadCompleteListener {
if (cequintCallerIdContact == null) {
return;
}
+ boolean hasUpdate = false;
if (TextUtils.isEmpty(callerInfo.name) && !TextUtils.isEmpty(cequintCallerIdContact.name)) {
callerInfo.name = cequintCallerIdContact.name;
- callerInfo.contactExists = true;
+ hasUpdate = true;
}
if (!TextUtils.isEmpty(cequintCallerIdContact.geoDescription)) {
callerInfo.geoDescription = cequintCallerIdContact.geoDescription;
callerInfo.shouldShowGeoDescription = true;
- callerInfo.contactExists = true;
+ hasUpdate = true;
}
- if (callerInfo.contactDisplayPhotoUri == null && cequintCallerIdContact.imageUrl != null) {
+ // Don't overwrite photo in local contacts.
+ if (!callerInfo.contactExists
+ && callerInfo.contactDisplayPhotoUri == null
+ && cequintCallerIdContact.imageUrl != null) {
callerInfo.contactDisplayPhotoUri = Uri.parse(cequintCallerIdContact.imageUrl);
- callerInfo.contactExists = true;
+ hasUpdate = true;
}
+ // Set contact to exist to avoid phone number service lookup.
+ callerInfo.contactExists = hasUpdate;
}
/**
@@ -600,10 +605,9 @@ public class ContactInfoCache implements OnImageLoadCompleteListener {
mQueryId = 0;
}
- private ContactCacheEntry buildEntry(
- Context context, CallerInfo info, int presentation, boolean isIncoming) {
+ private ContactCacheEntry buildEntry(Context context, CallerInfo info, int presentation) {
final ContactCacheEntry cce = new ContactCacheEntry();
- populateCacheEntry(context, info, cce, presentation, isIncoming);
+ populateCacheEntry(context, info, cce, presentation);
// This will only be true for emergency numbers
if (info.photoResource != 0) {
@@ -712,7 +716,7 @@ public class ContactInfoCache implements OnImageLoadCompleteListener {
public Uri lookupUri; // Sent to NotificationMananger
public String lookupKey;
- public int contactLookupResult = ContactLookupResult.Type.NOT_FOUND;
+ public ContactLookupResult.Type contactLookupResult = ContactLookupResult.Type.NOT_FOUND;
public long userType = ContactsUtils.USER_TYPE_CURRENT;
Uri contactRingtoneUri;
/** Query id to identify the query session. */
diff --git a/java/com/android/incallui/InCallActivity.java b/java/com/android/incallui/InCallActivity.java
index 90eb0aa6a..03e5ab29a 100644
--- a/java/com/android/incallui/InCallActivity.java
+++ b/java/com/android/incallui/InCallActivity.java
@@ -38,7 +38,7 @@ import com.android.dialer.common.ConfigProviderBindings;
import com.android.dialer.common.LogUtil;
import com.android.dialer.compat.ActivityCompat;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.ScreenEvent;
+import com.android.dialer.logging.ScreenEvent;
import com.android.incallui.answer.bindings.AnswerBindings;
import com.android.incallui.answer.protocol.AnswerScreen;
import com.android.incallui.answer.protocol.AnswerScreenDelegate;
diff --git a/java/com/android/incallui/InCallActivityCommon.java b/java/com/android/incallui/InCallActivityCommon.java
index 2cdb913ce..01dc1bb36 100644
--- a/java/com/android/incallui/InCallActivityCommon.java
+++ b/java/com/android/incallui/InCallActivityCommon.java
@@ -55,8 +55,9 @@ import com.android.dialer.animation.AnimationListenerAdapter;
import com.android.dialer.common.LogUtil;
import com.android.dialer.compat.CompatUtils;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.ScreenEvent;
+import com.android.dialer.logging.ScreenEvent;
import com.android.dialer.util.ViewUtil;
+import com.android.incallui.audiomode.AudioModeProvider;
import com.android.incallui.call.CallList;
import com.android.incallui.call.DialerCall;
import com.android.incallui.call.DialerCall.State;
diff --git a/java/com/android/incallui/InCallPresenter.java b/java/com/android/incallui/InCallPresenter.java
index d3d839909..a1643d67c 100644
--- a/java/com/android/incallui/InCallPresenter.java
+++ b/java/com/android/incallui/InCallPresenter.java
@@ -41,8 +41,8 @@ import com.android.dialer.blocking.FilteredNumberAsyncQueryHandler.OnCheckBlocke
import com.android.dialer.blocking.FilteredNumbersUtil;
import com.android.dialer.common.LogUtil;
import com.android.dialer.enrichedcall.EnrichedCallComponent;
+import com.android.dialer.logging.InteractionEvent;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.InteractionEvent;
import com.android.dialer.postcall.PostCall;
import com.android.dialer.telecom.TelecomUtil;
import com.android.dialer.util.TouchPointManager;
@@ -914,24 +914,6 @@ public class InCallPresenter implements CallList.Listener {
&& !mInCallActivity.isFinishing());
}
- private boolean isActivityVisible() {
- return mInCallActivity != null && mInCallActivity.isVisible();
- }
-
- boolean shouldShowFullScreenNotification() {
- /**
- * This is to cover the case where the incall activity is started but in the background, e.g.
- * when the user pressed Home from the account selection dialog or an existing call. In the case
- * that incall activity is already visible, there's no need to configure the notification with a
- * full screen intent.
- */
- LogUtil.d(
- "InCallPresenter.shouldShowFullScreenNotification",
- "isActivityVisible: %b",
- isActivityVisible());
- return !isActivityVisible();
- }
-
/**
* Determines if the In-Call app is currently changing configuration.
*
diff --git a/java/com/android/incallui/InCallServiceImpl.java b/java/com/android/incallui/InCallServiceImpl.java
index 33e8393ae..4fed014c6 100644
--- a/java/com/android/incallui/InCallServiceImpl.java
+++ b/java/com/android/incallui/InCallServiceImpl.java
@@ -22,6 +22,7 @@ import android.os.IBinder;
import android.telecom.Call;
import android.telecom.CallAudioState;
import android.telecom.InCallService;
+import com.android.incallui.audiomode.AudioModeProvider;
import com.android.incallui.call.CallList;
import com.android.incallui.call.ExternalCallList;
import com.android.incallui.call.TelecomAdapter;
diff --git a/java/com/android/incallui/NotificationBroadcastReceiver.java b/java/com/android/incallui/NotificationBroadcastReceiver.java
index cef18958e..5e757cf01 100644
--- a/java/com/android/incallui/NotificationBroadcastReceiver.java
+++ b/java/com/android/incallui/NotificationBroadcastReceiver.java
@@ -23,8 +23,8 @@ import android.os.Build.VERSION_CODES;
import android.support.annotation.RequiresApi;
import android.telecom.VideoProfile;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
import com.android.incallui.call.CallList;
import com.android.incallui.call.DialerCall;
diff --git a/java/com/android/incallui/ProximitySensor.java b/java/com/android/incallui/ProximitySensor.java
index 229b58ce7..653d85be9 100644
--- a/java/com/android/incallui/ProximitySensor.java
+++ b/java/com/android/incallui/ProximitySensor.java
@@ -24,9 +24,10 @@ import android.support.annotation.NonNull;
import android.telecom.CallAudioState;
import android.view.Display;
import com.android.dialer.common.LogUtil;
-import com.android.incallui.AudioModeProvider.AudioModeListener;
import com.android.incallui.InCallPresenter.InCallState;
import com.android.incallui.InCallPresenter.InCallStateListener;
+import com.android.incallui.audiomode.AudioModeProvider;
+import com.android.incallui.audiomode.AudioModeProvider.AudioModeListener;
import com.android.incallui.call.CallList;
import com.android.incallui.call.DialerCall;
diff --git a/java/com/android/incallui/StatusBarNotifier.java b/java/com/android/incallui/StatusBarNotifier.java
index 405eede34..a6a81c6ef 100644
--- a/java/com/android/incallui/StatusBarNotifier.java
+++ b/java/com/android/incallui/StatusBarNotifier.java
@@ -119,7 +119,6 @@ public class StatusBarNotifier
private String mSavedContentTitle;
private Uri mRingtone;
private StatusBarCallListener mStatusBarCallListener;
- private boolean mShowFullScreenIntent;
public StatusBarNotifier(@NonNull Context context, @NonNull ContactInfoCache contactInfoCache) {
Objects.requireNonNull(context);
@@ -224,7 +223,7 @@ public class StatusBarNotifier
setStatusBarCallListener(null);
}
if (mCurrentNotification != NOTIFICATION_NONE) {
- LogUtil.d("StatusBarNotifier.cancelNotification", "cancel");
+ LogUtil.i("StatusBarNotifier.cancelNotification", "cancel");
mNotificationManager.cancel(mCurrentNotification);
}
mCurrentNotification = NOTIFICATION_NONE;
@@ -324,8 +323,7 @@ public class StatusBarNotifier
contentTitle,
callState,
notificationType,
- contactInfo.contactRingtoneUri,
- InCallPresenter.getInstance().shouldShowFullScreenNotification())) {
+ contactInfo.contactRingtoneUri)) {
return;
}
@@ -361,10 +359,8 @@ public class StatusBarNotifier
if (notificationType == NOTIFICATION_INCOMING_CALL) {
NotificationChannelManager.applyChannel(
builder, mContext, Channel.INCOMING_CALL, accountHandle);
- if (InCallPresenter.getInstance().shouldShowFullScreenNotification()) {
- configureFullScreenIntent(
- builder, createLaunchPendingIntent(true /* isFullScreen */), callList, call);
- }
+ configureFullScreenIntent(
+ builder, createLaunchPendingIntent(true /* isFullScreen */), callList, call);
// Set the notification category and bump the priority for incoming calls
builder.setCategory(Notification.CATEGORY_CALL);
builder.setPriority(Notification.PRIORITY_MAX);
@@ -501,8 +497,7 @@ public class StatusBarNotifier
String contentTitle,
int state,
int notificationType,
- Uri ringtone,
- boolean showFullScreenIntent) {
+ Uri ringtone) {
// The two are different:
// if new title is not null, it should be different from saved version OR
@@ -511,15 +506,17 @@ public class StatusBarNotifier
(contentTitle != null && !contentTitle.equals(mSavedContentTitle))
|| (contentTitle == null && mSavedContentTitle != null);
+ boolean largeIconChanged =
+ mSavedLargeIcon == null ? largeIcon != null : !mSavedLargeIcon.sameAs(largeIcon);
+
// any change means we are definitely updating
boolean retval =
(mSavedIcon != icon)
|| !Objects.equals(mSavedContent, content)
|| (mCallState != state)
- || (mSavedLargeIcon != largeIcon)
+ || largeIconChanged
|| contentTitleChanged
- || !Objects.equals(mRingtone, ringtone)
- || mShowFullScreenIntent != showFullScreenIntent;
+ || !Objects.equals(mRingtone, ringtone);
// If we aren't showing a notification right now or the notification type is changing,
// definitely do an update.
@@ -537,7 +534,6 @@ public class StatusBarNotifier
mSavedLargeIcon = largeIcon;
mSavedContentTitle = contentTitle;
mRingtone = ringtone;
- mShowFullScreenIntent = showFullScreenIntent;
if (retval) {
LogUtil.d(
diff --git a/java/com/android/incallui/answer/impl/AnswerFragment.java b/java/com/android/incallui/answer/impl/AnswerFragment.java
index 9eb29ace0..7fa559d6e 100644
--- a/java/com/android/incallui/answer/impl/AnswerFragment.java
+++ b/java/com/android/incallui/answer/impl/AnswerFragment.java
@@ -53,8 +53,8 @@ import com.android.dialer.common.FragmentUtils;
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.MathUtil;
import com.android.dialer.compat.ActivityCompat;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
import com.android.dialer.multimedia.MultimediaData;
import com.android.dialer.util.ViewUtil;
import com.android.incallui.answer.impl.CreateCustomSmsDialogFragment.CreateCustomSmsHolder;
diff --git a/java/com/android/incallui/answer/impl/answermethod/FlingUpDownMethod.java b/java/com/android/incallui/answer/impl/answermethod/FlingUpDownMethod.java
index 6e8e1f7bf..5c1ee47e6 100644
--- a/java/com/android/incallui/answer/impl/answermethod/FlingUpDownMethod.java
+++ b/java/com/android/incallui/answer/impl/answermethod/FlingUpDownMethod.java
@@ -131,6 +131,7 @@ public class FlingUpDownMethod extends AnswerMethod implements OnProgressChanged
private ImageView contactPuckBackground;
private ImageView contactPuckIcon;
private View incomingDisconnectText;
+ private View spaceHolder;
private Animator lockBounceAnim;
private AnimatorSet lockEntryAnim;
private AnimatorSet lockHintAnim;
@@ -193,33 +194,39 @@ public class FlingUpDownMethod extends AnswerMethod implements OnProgressChanged
swipeToAnswerText = (TextView) view.findViewById(R.id.incoming_swipe_to_answer_text);
swipeToRejectText = (TextView) view.findViewById(R.id.incoming_swipe_to_reject_text);
incomingDisconnectText = view.findViewById(R.id.incoming_will_disconnect_text);
+ incomingDisconnectText.setVisibility(incomingWillDisconnect ? View.VISIBLE : View.GONE);
incomingDisconnectText.setAlpha(incomingWillDisconnect ? 1 : 0);
+ spaceHolder = view.findViewById(R.id.incoming_bouncer_space_holder);
+ spaceHolder.setVisibility(incomingWillDisconnect ? View.GONE : View.VISIBLE);
+
+ view.findViewById(R.id.incoming_swipe_to_answer_container)
+ .setAccessibilityDelegate(
+ new AccessibilityDelegate() {
+ @Override
+ public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(host, info);
+ info.addAction(
+ new AccessibilityAction(
+ R.id.accessibility_action_answer,
+ getString(R.string.call_incoming_answer)));
+ info.addAction(
+ new AccessibilityAction(
+ R.id.accessibility_action_decline,
+ getString(R.string.call_incoming_decline)));
+ }
- view.setAccessibilityDelegate(
- new AccessibilityDelegate() {
- @Override
- public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
- super.onInitializeAccessibilityNodeInfo(host, info);
- info.addAction(
- new AccessibilityAction(
- R.id.accessibility_action_answer, getString(R.string.call_incoming_answer)));
- info.addAction(
- new AccessibilityAction(
- R.id.accessibility_action_decline, getString(R.string.call_incoming_decline)));
- }
-
- @Override
- public boolean performAccessibilityAction(View host, int action, Bundle args) {
- if (action == R.id.accessibility_action_answer) {
- performAccept();
- return true;
- } else if (action == R.id.accessibility_action_decline) {
- performReject();
- return true;
- }
- return super.performAccessibilityAction(host, action, args);
- }
- });
+ @Override
+ public boolean performAccessibilityAction(View host, int action, Bundle args) {
+ if (action == R.id.accessibility_action_answer) {
+ performAccept();
+ return true;
+ } else if (action == R.id.accessibility_action_decline) {
+ performReject();
+ return true;
+ }
+ return super.performAccessibilityAction(host, action, args);
+ }
+ });
swipeProgress = 0;
@@ -367,7 +374,24 @@ public class FlingUpDownMethod extends AnswerMethod implements OnProgressChanged
public void setShowIncomingWillDisconnect(boolean incomingWillDisconnect) {
this.incomingWillDisconnect = incomingWillDisconnect;
if (incomingDisconnectText != null) {
- incomingDisconnectText.animate().alpha(incomingWillDisconnect ? 1 : 0);
+ if (incomingWillDisconnect) {
+ incomingDisconnectText.setVisibility(View.VISIBLE);
+ spaceHolder.setVisibility(View.GONE);
+ incomingDisconnectText.animate().alpha(1);
+ } else {
+ incomingDisconnectText
+ .animate()
+ .alpha(0)
+ .setListener(
+ new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ super.onAnimationEnd(animation);
+ incomingDisconnectText.setVisibility(View.GONE);
+ spaceHolder.setVisibility(View.VISIBLE);
+ }
+ });
+ }
}
}
diff --git a/java/com/android/incallui/answer/impl/answermethod/res/layout/swipe_up_down_method.xml b/java/com/android/incallui/answer/impl/answermethod/res/layout/swipe_up_down_method.xml
index 42b55cf35..9a49075b8 100644
--- a/java/com/android/incallui/answer/impl/answermethod/res/layout/swipe_up_down_method.xml
+++ b/java/com/android/incallui/answer/impl/answermethod/res/layout/swipe_up_down_method.xml
@@ -16,101 +16,108 @@
-->
<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_marginStart="@dimen/answer_swipe_dead_zone_sides"
- android:clipChildren="false"
- android:clipToPadding="false"
- android:layout_marginEnd="@dimen/answer_swipe_dead_zone_sides">
- <LinearLayout
- android:id="@+id/incoming_swipe_to_answer_container"
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:accessibilityLiveRegion="polite"
+ android:layout_marginStart="@dimen/answer_swipe_dead_zone_sides"
+ android:layout_marginEnd="@dimen/answer_swipe_dead_zone_sides"
android:clipChildren="false"
- android:clipToPadding="false"
- android:gravity="center_horizontal|bottom"
- android:orientation="vertical"
- android:visibility="visible">
- <TextView
- android:id="@+id/incoming_will_disconnect_text"
- android:layout_width="wrap_content"
+ android:clipToPadding="false">
+ <LinearLayout
+ android:id="@+id/incoming_swipe_to_answer_container"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="116dp"
- android:layout_gravity="center_horizontal"
- android:alpha="0"
- android:text="@string/call_incoming_will_disconnect"
- android:textColor="@color/blue_grey_100"
- android:textSize="16sp"
- tools:alpha="1"/>
+ android:layout_gravity="center_horizontal|bottom"
+ android:accessibilityLiveRegion="polite"
+ android:clipChildren="false"
+ android:clipToPadding="false"
+ android:orientation="vertical"
+ android:visibility="visible">
<TextView
- android:id="@+id/incoming_swipe_to_answer_text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="18dp"
- android:layout_gravity="center_horizontal"
- android:textAlignment="center"
- android:focusable="false"
- android:text="@string/call_incoming_swipe_to_answer"
- android:textAppearance="@style/Dialer.Incall.TextAppearance.Hint"/>
+ android:id="@+id/incoming_will_disconnect_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="116dp"
+ android:layout_gravity="center_horizontal"
+ android:alpha="0"
+ android:text="@string/call_incoming_will_disconnect"
+ android:textColor="@color/blue_grey_100"
+ android:textSize="16sp"
+ android:visibility="gone"
+ tools:alpha="1"/>
+ <!-- Space holder for animation. -->
+ <Space
+ android:id="@+id/incoming_bouncer_space_holder"
+ android:layout_width="match_parent"
+ android:layout_height="50dp"
+ android:visibility="visible"/>
+ <TextView
+ android:id="@+id/incoming_swipe_to_answer_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="18dp"
+ android:layout_gravity="center_horizontal"
+ android:focusable="false"
+ android:text="@string/call_incoming_swipe_to_answer"
+ android:textAlignment="center"
+ android:textAppearance="@style/Dialer.Incall.TextAppearance.Hint"/>
<FrameLayout
- android:id="@+id/incoming_call_puck_container"
- android:layout_width="@dimen/answer_contact_puck_size_photo"
- android:layout_height="@dimen/answer_contact_puck_size_photo"
- android:layout_marginBottom="10dp"
- android:layout_gravity="center_horizontal"
- android:clipChildren="false"
- android:clipToPadding="false"
- android:contentDescription="@string/a11y_incoming_call_swipe_to_answer">
+ android:id="@+id/incoming_call_puck_container"
+ android:layout_width="@dimen/answer_contact_puck_size_photo"
+ android:layout_height="@dimen/answer_contact_puck_size_photo"
+ android:layout_marginBottom="10dp"
+ android:layout_gravity="center_horizontal"
+ android:clipChildren="false"
+ android:clipToPadding="false"
+ android:contentDescription="@string/a11y_incoming_call_swipe_to_answer">
<!-- Puck background and icon are hosted in the separated views to animate separately. -->
<ImageView
- android:id="@+id/incoming_call_puck_bg"
- android:layout_width="@dimen/answer_contact_puck_size_no_photo"
- android:layout_height="@dimen/answer_contact_puck_size_no_photo"
- android:layout_gravity="center"
- android:background="@drawable/circular_background"
- android:contentDescription="@null"
- android:duplicateParentState="true"
- android:elevation="8dp"
- android:focusable="false"
- android:stateListAnimator="@animator/activated_button_elevation"/>
+ android:id="@+id/incoming_call_puck_bg"
+ android:layout_width="@dimen/answer_contact_puck_size_no_photo"
+ android:layout_height="@dimen/answer_contact_puck_size_no_photo"
+ android:layout_gravity="center"
+ android:background="@drawable/circular_background"
+ android:contentDescription="@null"
+ android:duplicateParentState="true"
+ android:elevation="8dp"
+ android:focusable="false"
+ android:stateListAnimator="@animator/activated_button_elevation"/>
<ImageView
- android:id="@+id/incoming_call_puck_icon"
- android:layout_width="30dp"
- android:layout_height="30dp"
- android:layout_gravity="center"
- android:contentDescription="@null"
- android:duplicateParentState="true"
- android:elevation="16dp"
- android:focusable="false"
- android:outlineProvider="none"
- android:src="@drawable/quantum_ic_call_white_24"
- android:tint="@color/incoming_answer_icon"
- android:tintMode="src_atop"
- tools:outlineProvider="background"/>
+ android:id="@+id/incoming_call_puck_icon"
+ android:layout_width="30dp"
+ android:layout_height="30dp"
+ android:layout_gravity="center"
+ android:contentDescription="@null"
+ android:duplicateParentState="true"
+ android:elevation="16dp"
+ android:focusable="false"
+ android:outlineProvider="none"
+ android:src="@drawable/quantum_ic_call_white_24"
+ android:tint="@color/incoming_answer_icon"
+ android:tintMode="src_atop"
+ tools:outlineProvider="background"/>
</FrameLayout>
<TextView
- android:id="@+id/incoming_swipe_to_reject_text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="20dp"
- android:layout_gravity="center_horizontal"
- android:alpha="0"
- android:focusable="false"
- android:text="@string/call_incoming_swipe_to_reject"
- android:textAppearance="@style/Dialer.Incall.TextAppearance.Hint"
- tools:alpha="1"/>
+ android:id="@+id/incoming_swipe_to_reject_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="20dp"
+ android:layout_gravity="center_horizontal"
+ android:alpha="0"
+ android:focusable="false"
+ android:text="@string/call_incoming_swipe_to_reject"
+ android:textAppearance="@style/Dialer.Incall.TextAppearance.Hint"
+ tools:alpha="1"/>
</LinearLayout>
<FrameLayout
- android:id="@+id/hint_container"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:clipChildren="false"
- android:clipToPadding="false"/>
+ android:id="@+id/hint_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:clipChildren="false"
+ android:clipToPadding="false"/>
</FrameLayout>
diff --git a/java/com/android/incallui/answer/impl/answermethod/res/values-b+sr+Latn/strings.xml b/java/com/android/incallui/answer/impl/answermethod/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..3f8ad9518
--- /dev/null
+++ b/java/com/android/incallui/answer/impl/answermethod/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="call_incoming_swipe_to_answer" msgid="2959042172304267183">"Prevucite nagore da biste odgovorili"</string>
+ <string name="call_incoming_swipe_to_reject" msgid="463322705441386885">"Prevucite nadole da biste odbili"</string>
+ <string name="a11y_incoming_call_swipe_to_answer" msgid="6992663569851713736">"Pomoću dva prsta prevucite nagore da biste odgovorili na poziv ili nadole da biste ga odbili"</string>
+ <string name="call_incoming_will_disconnect" msgid="7095934149229485541">"Ako odgovorite na ovaj poziv, prekinućete video poziv"</string>
+ <string name="a11y_call_incoming_decline_description" msgid="4441041052558364987">"Odbijte"</string>
+ <string name="call_incoming_decline" msgid="2982110738106661231">"Odbij"</string>
+ <string name="a11y_call_incoming_answer_description" msgid="1623200501347799736">"Odgovorite"</string>
+ <string name="call_incoming_answer" msgid="841798555883717852">"Odgovori"</string>
+</resources>
diff --git a/java/com/android/incallui/answer/impl/hint/PawSecretCodeListener.java b/java/com/android/incallui/answer/impl/hint/PawSecretCodeListener.java
index b4fc19c0d..a8737c363 100644
--- a/java/com/android/incallui/answer/impl/hint/PawSecretCodeListener.java
+++ b/java/com/android/incallui/answer/impl/hint/PawSecretCodeListener.java
@@ -27,8 +27,8 @@ import android.widget.Toast;
import com.android.dialer.common.Assert;
import com.android.dialer.common.ConfigProviderBindings;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.DialerImpression.Type;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression.Type;
import java.util.Random;
/**
diff --git a/java/com/android/incallui/answer/impl/hint/res/values-b+sr+Latn/strings.xml b/java/com/android/incallui/answer/impl/hint/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..c36e4c2a9
--- /dev/null
+++ b/java/com/android/incallui/answer/impl/hint/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="event_activated" msgid="4737012691463830969">"Omogućen je režim šape"</string>
+ <string name="event_deactivated" msgid="4504516573331084650">"Onemogućen je režim šape"</string>
+</resources>
diff --git a/java/com/android/incallui/answer/impl/res/layout/fragment_avatar.xml b/java/com/android/incallui/answer/impl/res/layout/fragment_avatar.xml
index d656ceb4e..f8e48942c 100644
--- a/java/com/android/incallui/answer/impl/res/layout/fragment_avatar.xml
+++ b/java/com/android/incallui/answer/impl/res/layout/fragment_avatar.xml
@@ -21,6 +21,5 @@
android:id="@id/contactgrid_avatar"
android:layout_width="@dimen/answer_avatar_size"
android:layout_height="@dimen/answer_avatar_size"
- android:layout_marginTop="20dp"
- android:layout_gravity="center_horizontal"
+ android:layout_gravity="center"
android:elevation="@dimen/answer_data_elevation"/>
diff --git a/java/com/android/incallui/answer/impl/res/layout/fragment_incoming_call.xml b/java/com/android/incallui/answer/impl/res/layout/fragment_incoming_call.xml
index 2e42a6ac8..cd85e2f5b 100644
--- a/java/com/android/incallui/answer/impl/res/layout/fragment_incoming_call.xml
+++ b/java/com/android/incallui/answer/impl/res/layout/fragment_incoming_call.xml
@@ -15,15 +15,15 @@
~ limitations under the License
-->
<com.android.incallui.answer.impl.AffordanceHolderLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- xmlns:tools="http://schemas.android.com/tools"
- android:id="@+id/incoming_container"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:clipChildren="false"
- android:clipToPadding="false"
- android:keepScreenOn="true">
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/incoming_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:clipChildren="false"
+ android:clipToPadding="false"
+ android:keepScreenOn="true">
<TextureView
android:id="@+id/incoming_preview_texture_view"
@@ -38,124 +38,131 @@
android:layout_height="match_parent"
android:importantForAccessibility="no"
android:visibility="gone"
- app:scaleWidth="@bool/scale_width"
- app:scaleHeight="@bool/scale_height"/>
+ app:scaleHeight="@bool/scale_height"
+ app:scaleWidth="@bool/scale_width"/>
<View
- android:id="@+id/incoming_preview_texture_view_overlay"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/videocall_overlay_background_color"
- android:visibility="gone"/>
+ android:id="@+id/incoming_preview_texture_view_overlay"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@color/videocall_overlay_background_color"
+ android:visibility="gone"/>
<FrameLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:fitsSystemWindows="true">
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:fitsSystemWindows="true">
<TextView
- android:id="@+id/videocall_video_off"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:padding="64dp"
- android:accessibilityTraversalBefore="@+id/videocall_speaker_button"
- android:drawablePadding="8dp"
- android:drawableTop="@drawable/quantum_ic_videocam_off_white_36"
- android:gravity="center"
- android:text="@string/call_incoming_video_is_off"
- android:textAppearance="@style/Dialer.Incall.TextAppearance"
- android:visibility="gone"/>
+ android:id="@+id/videocall_video_off"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:padding="64dp"
+ android:accessibilityTraversalBefore="@+id/videocall_speaker_button"
+ android:drawablePadding="8dp"
+ android:drawableTop="@drawable/quantum_ic_videocam_off_white_36"
+ android:gravity="center"
+ android:text="@string/call_incoming_video_is_off"
+ android:textAppearance="@style/Dialer.Incall.TextAppearance"
+ android:visibility="gone"/>
<LinearLayout
- android:id="@+id/incall_contact_grid"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_marginTop="24dp"
- android:clipChildren="false"
- android:clipToPadding="false"
- android:gravity="top|center_horizontal"
- android:orientation="vertical">
+ android:id="@+id/incall_contact_grid"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_marginTop="24dp"
+ android:clipChildren="false"
+ android:clipToPadding="false"
+ android:gravity="top|center_horizontal"
+ android:orientation="vertical">
<include
- android:id="@id/contactgrid_top_row"
- layout="@layout/incall_contactgrid_top_row"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="8dp"
- android:layout_marginStart="24dp"
- android:layout_marginEnd="24dp"/>
+ android:id="@id/contactgrid_top_row"
+ layout="@layout/incall_contactgrid_top_row"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="8dp"
+ android:layout_marginStart="24dp"
+ android:layout_marginEnd="24dp"/>
<!-- We have to keep deprecated singleLine to allow long text being truncated with ellipses.
b/31396406 -->
<com.android.incallui.autoresizetext.AutoResizeTextView
- android:id="@id/contactgrid_contact_name"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="8dp"
- android:layout_marginStart="24dp"
- android:layout_marginEnd="24dp"
- android:singleLine="true"
- android:textAppearance="@style/Dialer.Incall.TextAppearance.Large"
- android:textSize="@dimen/answer_contact_name_text_size"
- app:autoResizeText_minTextSize="@dimen/answer_contact_name_min_size"
- tools:ignore="Deprecated"
- tools:text="Jake Peralta"/>
+ android:id="@id/contactgrid_contact_name"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="8dp"
+ android:layout_marginStart="24dp"
+ android:layout_marginEnd="24dp"
+ android:singleLine="true"
+ android:textAppearance="@style/Dialer.Incall.TextAppearance.Large"
+ android:textSize="@dimen/answer_contact_name_text_size"
+ app:autoResizeText_minTextSize="@dimen/answer_contact_name_min_size"
+ tools:ignore="Deprecated"
+ tools:text="Jake Peralta"/>
<include
- android:id="@id/contactgrid_bottom_row"
- layout="@layout/incall_contactgrid_bottom_row"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="24dp"
- android:layout_marginEnd="24dp"/>
+ android:id="@id/contactgrid_bottom_row"
+ layout="@layout/incall_contactgrid_bottom_row"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="24dp"
+ android:layout_marginEnd="24dp"/>
<TextView
- android:id="@+id/incall_important_call_badge"
- android:layout_width="wrap_content"
- android:layout_height="48dp"
- android:layout_marginTop="4dp"
- android:layout_marginBottom="@dimen/answer_importance_margin_bottom"
- android:elevation="@dimen/answer_data_elevation"
- android:gravity="center"
- android:singleLine="true"
- android:text="@string/call_incoming_important"
- android:textAllCaps="true"
- android:textAppearance="@style/Dialer.Incall.TextAppearance"
- android:textColor="@android:color/black"/>
+ android:id="@+id/incall_important_call_badge"
+ android:layout_width="wrap_content"
+ android:layout_height="48dp"
+ android:layout_marginTop="4dp"
+ android:layout_marginBottom="@dimen/answer_importance_margin_bottom"
+ android:elevation="@dimen/answer_data_elevation"
+ android:gravity="center"
+ android:singleLine="true"
+ android:text="@string/call_incoming_important"
+ android:textAllCaps="true"
+ android:textAppearance="@style/Dialer.Incall.TextAppearance"
+ android:textColor="@android:color/black"/>
<FrameLayout
- android:id="@+id/incall_location_holder"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"/>
+ android:id="@+id/incall_location_holder"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"/>
<FrameLayout
- android:id="@+id/incall_data_container"
- android:layout_width="match_parent"
- android:layout_height="@dimen/answer_data_size"
- android:clipChildren="false"
- android:clipToPadding="false"/>
+ android:id="@+id/incall_data_container"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:clipChildren="false"
+ android:clipToPadding="false"/>
+
+ <!-- Space holder for answer method. This is used to get better scaling to make room for
+ incall_data_container on different screen size. -->
+ <Space
+ android:layout_width="match_parent"
+ android:layout_height="220dp"/>
</LinearLayout>
<FrameLayout
- android:id="@+id/answer_method_container"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:clipChildren="false"
- android:clipToPadding="false"/>
+ android:id="@+id/answer_method_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:clipChildren="false"
+ android:clipToPadding="false"/>
</FrameLayout>
<com.android.incallui.answer.impl.affordance.SwipeButtonView
- android:id="@+id/incoming_secondary_button"
- android:layout_width="56dp"
- android:layout_height="56dp"
- android:layout_gravity="bottom|start"
- android:scaleType="center"
- android:src="@drawable/quantum_ic_message_white_24"
- android:visibility="invisible"
- tools:visibility="visible"/>
+ android:id="@+id/incoming_secondary_button"
+ android:layout_width="56dp"
+ android:layout_height="56dp"
+ android:layout_gravity="bottom|start"
+ android:scaleType="center"
+ android:src="@drawable/quantum_ic_message_white_24"
+ android:visibility="invisible"
+ tools:visibility="visible"/>
<com.android.incallui.answer.impl.affordance.SwipeButtonView
android:id="@+id/incoming_secondary_button2"
diff --git a/java/com/android/incallui/answer/impl/res/values-b+sr+Latn/strings.xml b/java/com/android/incallui/answer/impl/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..593778b7a
--- /dev/null
+++ b/java/com/android/incallui/answer/impl/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="call_incoming_swipe_to_decline_with_message" msgid="2426342919316424240">"Prevucite od ikone da biste odbili porukom"</string>
+ <string name="call_incoming_swipe_to_answer_video_as_audio" msgid="2656902519734774070">"Prevucite od ikone da biste odgovorili audio pozivom"</string>
+ <string name="call_incoming_default_label_answer_and_release_second" msgid="4543429977872844314">"Prevucite nagore da biste odgovorili i zadržali poziv koji je u toku"</string>
+ <string name="call_incoming_default_label_answer_and_release_third" msgid="1738895612225349741">"Prevucite nagore da biste odgovorili i završili poziv koji je na čekanju"</string>
+ <string name="call_incoming_swipe_to_answer_and_release" msgid="662432029870261061">"Prevucite od ikone da biste se javili i završili poziv koji je u toku"</string>
+ <string name="call_incoming_message_custom" msgid="5819492800418293238">"Napišite sami…"</string>
+ <string name="call_incoming_audio_handset" msgid="2299009191401671619">"Telefon"</string>
+ <string name="call_incoming_audio_speakerphone" msgid="5632622369522427991">"Spikerfon"</string>
+ <string name="call_incoming_respond_via_sms_custom_message" msgid="6808438125627371020">"Napišite sami…"</string>
+ <string name="call_incoming_custom_message_cancel" msgid="5231860339073505201">"Otkaži"</string>
+ <string name="call_incoming_custom_message_send" msgid="3826716354040318205">"Pošalji"</string>
+ <string name="a11y_incoming_call_reject_with_sms" msgid="6101839791429796754">"Odbijte ovaj poziv porukom"</string>
+ <string name="a11y_incoming_call_answer_video_as_audio" msgid="3890612269318682756">"Odgovorite audio pozivom"</string>
+ <string name="a11y_incoming_call_answer_and_release" msgid="4896746774725239464">"Javite se i završite poziv koji je u toku"</string>
+ <string name="a11y_description_incoming_call_reject_with_sms" msgid="4705064921696291310">"Odbijte porukom"</string>
+ <string name="a11y_description_incoming_call_answer_video_as_audio" msgid="1562530317428907884">"Odgovorite audio pozivom"</string>
+ <string name="a11y_description_incoming_call_answer_and_release" msgid="8511087499748888476">"Javite se i završite poziv koji je u toku"</string>
+ <string name="call_incoming_video_is_off" msgid="3216603035158629403">"Kamera je isključena"</string>
+ <string name="a11y_incoming_call_swipe_gesture_prompt" msgid="8682480557168484972">"Prevucite nagore pomoću dva prsta da biste odgovorili. Prevucite nadole pomoću dva prsta da biste odbili."</string>
+ <string name="call_incoming_important" msgid="6477906345540334049">"Važan poziv"</string>
+</resources>
diff --git a/java/com/android/incallui/answer/impl/res/values-h480dp/dimens.xml b/java/com/android/incallui/answer/impl/res/values-h480dp/dimens.xml
index 5dc3f2ac5..eab321fbd 100644
--- a/java/com/android/incallui/answer/impl/res/values-h480dp/dimens.xml
+++ b/java/com/android/incallui/answer/impl/res/values-h480dp/dimens.xml
@@ -15,7 +15,6 @@
~ limitations under the License
-->
<resources>
- <dimen name="answer_data_size">150dp</dimen>
<dimen name="answer_avatar_size">100dp</dimen>
<dimen name="answer_importance_margin_bottom">8dp</dimen>
<bool name="answer_important_call_allowed">true</bool>
diff --git a/java/com/android/incallui/answer/impl/res/values-h540dp/dimens.xml b/java/com/android/incallui/answer/impl/res/values-h540dp/dimens.xml
index 69716e0bd..d5e829928 100644
--- a/java/com/android/incallui/answer/impl/res/values-h540dp/dimens.xml
+++ b/java/com/android/incallui/answer/impl/res/values-h540dp/dimens.xml
@@ -15,7 +15,6 @@
~ limitations under the License
-->
<resources>
- <dimen name="answer_data_size">258dp</dimen>
<dimen name="answer_avatar_size">172dp</dimen>
<dimen name="answer_importance_margin_bottom">8dp</dimen>
</resources>
diff --git a/java/com/android/incallui/answer/impl/res/values/dimens.xml b/java/com/android/incallui/answer/impl/res/values/dimens.xml
index 50aec0328..0bda9d3c7 100644
--- a/java/com/android/incallui/answer/impl/res/values/dimens.xml
+++ b/java/com/android/incallui/answer/impl/res/values/dimens.xml
@@ -17,7 +17,6 @@
<resources>
<dimen name="answer_contact_name_text_size">24sp</dimen>
<dimen name="answer_contact_name_min_size">24sp</dimen>
- <dimen name="answer_data_size">0dp</dimen>
<dimen name="answer_avatar_size">0dp</dimen>
<dimen name="answer_importance_margin_bottom">0dp</dimen>
<bool name="answer_important_call_allowed">false</bool>
diff --git a/java/com/android/incallui/AudioModeProvider.java b/java/com/android/incallui/audiomode/AudioModeProvider.java
index 698db0ab9..f62afa7f2 100644
--- a/java/com/android/incallui/AudioModeProvider.java
+++ b/java/com/android/incallui/audiomode/AudioModeProvider.java
@@ -14,7 +14,7 @@
* limitations under the License
*/
-package com.android.incallui;
+package com.android.incallui.audiomode;
import android.telecom.CallAudioState;
import java.util.ArrayList;
diff --git a/java/com/android/incallui/audioroute/res/values-b+sr+Latn/strings.xml b/java/com/android/incallui/audioroute/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..0df469fb6
--- /dev/null
+++ b/java/com/android/incallui/audioroute/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="audioroute_bluetooth" msgid="3426527851663711141">"Bluetooth"</string>
+ <string name="audioroute_speaker" msgid="3269659224838962927">"Zvučnik"</string>
+ <string name="audioroute_phone" msgid="4006113852056568310">"Telefon"</string>
+ <string name="audioroute_headset" msgid="3911496379650036544">"Žičane slušalice"</string>
+</resources>
diff --git a/java/com/android/incallui/bindings/PhoneNumberService.java b/java/com/android/incallui/bindings/PhoneNumberService.java
index bd2741a1d..c40891a2c 100644
--- a/java/com/android/incallui/bindings/PhoneNumberService.java
+++ b/java/com/android/incallui/bindings/PhoneNumberService.java
@@ -17,6 +17,7 @@
package com.android.incallui.bindings;
import android.graphics.Bitmap;
+import com.android.dialer.logging.ContactLookupResult;
/** Provides phone number lookup services. */
public interface PhoneNumberService {
@@ -72,6 +73,6 @@ public interface PhoneNumberService {
boolean isBusiness();
- int getLookupSource();
+ ContactLookupResult.Type getLookupSource();
}
}
diff --git a/java/com/android/incallui/call/CallList.java b/java/com/android/incallui/call/CallList.java
index ab2feba3e..26fd926d1 100644
--- a/java/com/android/incallui/call/CallList.java
+++ b/java/com/android/incallui/call/CallList.java
@@ -33,8 +33,8 @@ import com.android.dialer.blocking.FilteredNumberAsyncQueryHandler;
import com.android.dialer.blocking.FilteredNumbersUtil;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
import com.android.dialer.shortcuts.ShortcutUsageReporter;
import com.android.dialer.spam.Spam;
import com.android.dialer.spam.SpamBindings;
@@ -198,7 +198,7 @@ public class CallList implements DialerCallDelegate {
private void logSecondIncomingCall(@NonNull Context context, @NonNull DialerCall incomingCall) {
DialerCall firstCall = getFirstCall();
if (firstCall != null) {
- int impression = 0;
+ DialerImpression.Type impression;
if (firstCall.isVideoCall()) {
if (incomingCall.isVideoCall()) {
impression = DialerImpression.Type.VIDEO_CALL_WITH_INCOMING_VIDEO_CALL;
@@ -212,7 +212,7 @@ public class CallList implements DialerCallDelegate {
impression = DialerImpression.Type.VOICE_CALL_WITH_INCOMING_VOICE_CALL;
}
}
- Assert.checkArgument(impression != 0);
+ Assert.checkArgument(impression != null);
Logger.get(context)
.logCallImpression(
impression, incomingCall.getUniqueCallId(), incomingCall.getTimeAddedMs());
diff --git a/java/com/android/incallui/call/DialerCall.java b/java/com/android/incallui/call/DialerCall.java
index f37ce27a7..71dfd4caa 100644
--- a/java/com/android/incallui/call/DialerCall.java
+++ b/java/com/android/incallui/call/DialerCall.java
@@ -28,6 +28,7 @@ import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.telecom.Call;
import android.telecom.Call.Details;
+import android.telecom.CallAudioState;
import android.telecom.Connection;
import android.telecom.DisconnectCause;
import android.telecom.GatewayInfo;
@@ -42,15 +43,20 @@ import android.text.TextUtils;
import com.android.contacts.common.compat.CallCompat;
import com.android.contacts.common.compat.TelephonyManagerCompat;
import com.android.contacts.common.compat.telecom.TelecomManagerCompat;
+import com.android.dialer.callintent.CallInitiationType;
import com.android.dialer.callintent.CallIntentParser;
-import com.android.dialer.callintent.nano.CallInitiationType;
-import com.android.dialer.callintent.nano.CallSpecificAppData;
+import com.android.dialer.callintent.CallSpecificAppData;
import com.android.dialer.common.Assert;
import com.android.dialer.common.ConfigProviderBindings;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.enrichedcall.EnrichedCallCapabilities;
import com.android.dialer.enrichedcall.EnrichedCallComponent;
+import com.android.dialer.enrichedcall.Session;
import com.android.dialer.lightbringer.LightbringerComponent;
-import com.android.dialer.logging.nano.ContactLookupResult;
+import com.android.dialer.logging.ContactLookupResult;
+import com.android.dialer.logging.DialerImpression;
+import com.android.dialer.logging.Logger;
+import com.android.incallui.audiomode.AudioModeProvider;
import com.android.incallui.latencyreport.LatencyReport;
import com.android.incallui.util.TelecomCallUtil;
import com.android.incallui.videotech.VideoTech;
@@ -125,6 +131,8 @@ public class DialerCall implements VideoTechListener {
private String callProviderLabel;
private String callbackNumber;
private int mCameraDirection = CameraDirection.CAMERA_DIRECTION_UNKNOWN;
+ private EnrichedCallCapabilities mEnrichedCallCapabilities;
+ private Session mEnrichedCallSession;
public static String getNumberFromHandle(Uri handle) {
return handle == null ? "" : handle.getSchemeSpecificPart();
@@ -793,13 +801,19 @@ public class DialerCall implements VideoTechListener {
mLogState.callSpecificAppData = CallIntentParser.getCallSpecificAppData(getIntentExtras());
if (mLogState.callSpecificAppData == null) {
- mLogState.callSpecificAppData = new CallSpecificAppData();
- mLogState.callSpecificAppData.callInitiationType =
- CallInitiationType.Type.EXTERNAL_INITIATION;
+
+ mLogState.callSpecificAppData =
+ CallSpecificAppData.newBuilder()
+ .setCallInitiationType(CallInitiationType.Type.EXTERNAL_INITIATION)
+ .build();
}
if (getState() == State.INCOMING) {
- mLogState.callSpecificAppData.callInitiationType =
- CallInitiationType.Type.INCOMING_INITIATION;
+ mLogState.callSpecificAppData =
+ mLogState
+ .callSpecificAppData
+ .toBuilder()
+ .setCallInitiationType(CallInitiationType.Type.INCOMING_INITIATION)
+ .build();
}
}
@@ -900,6 +914,25 @@ public class DialerCall implements VideoTechListener {
return mLatencyReport;
}
+ @Nullable
+ public EnrichedCallCapabilities getEnrichedCallCapabilities() {
+ return mEnrichedCallCapabilities;
+ }
+
+ public void setEnrichedCallCapabilities(
+ @Nullable EnrichedCallCapabilities mEnrichedCallCapabilities) {
+ this.mEnrichedCallCapabilities = mEnrichedCallCapabilities;
+ }
+
+ @Nullable
+ public Session getEnrichedCallSession() {
+ return mEnrichedCallSession;
+ }
+
+ public void setEnrichedCallSession(@Nullable Session mEnrichedCallSession) {
+ this.mEnrichedCallSession = mEnrichedCallSession;
+ }
+
public void unregisterCallback() {
mTelecomCall.unregisterCallback(mTelecomCallCallback);
}
@@ -1063,6 +1096,34 @@ public class DialerCall implements VideoTechListener {
}
update();
+
+ Logger.get(mContext)
+ .logCallImpression(
+ DialerImpression.Type.VIDEO_CALL_REQUEST_RECEIVED, getUniqueCallId(), getTimeAddedMs());
+ }
+
+ @Override
+ public void onUpgradedToVideo(boolean switchToSpeaker) {
+ LogUtil.enterBlock("DialerCall.onUpgradedToVideo");
+
+ if (!switchToSpeaker) {
+ return;
+ }
+
+ CallAudioState audioState = AudioModeProvider.getInstance().getAudioState();
+
+ if (0 != (CallAudioState.ROUTE_BLUETOOTH & audioState.getSupportedRouteMask())) {
+ LogUtil.e(
+ "DialerCall.onUpgradedToVideo",
+ "toggling speakerphone not allowed when bluetooth supported.");
+ return;
+ }
+
+ if (audioState.getRoute() == CallAudioState.ROUTE_SPEAKER) {
+ return;
+ }
+
+ TelecomAdapter.getInstance().setAudioRoute(CallAudioState.ROUTE_SPEAKER);
}
/**
@@ -1174,24 +1235,25 @@ public class DialerCall implements VideoTechListener {
public DisconnectCause disconnectCause;
public boolean isIncoming = false;
- public int contactLookupResult = ContactLookupResult.Type.UNKNOWN_LOOKUP_RESULT_TYPE;
+ public ContactLookupResult.Type contactLookupResult =
+ ContactLookupResult.Type.UNKNOWN_LOOKUP_RESULT_TYPE;
public CallSpecificAppData callSpecificAppData;
// If this was a conference call, the total number of calls involved in the conference.
public int conferencedCalls = 0;
public long duration = 0;
public boolean isLogged = false;
- private static String lookupToString(int lookupType) {
+ private static String lookupToString(ContactLookupResult.Type lookupType) {
switch (lookupType) {
- case ContactLookupResult.Type.LOCAL_CONTACT:
+ case LOCAL_CONTACT:
return "Local";
- case ContactLookupResult.Type.LOCAL_CACHE:
+ case LOCAL_CACHE:
return "Cache";
- case ContactLookupResult.Type.REMOTE:
+ case REMOTE:
return "Remote";
- case ContactLookupResult.Type.EMERGENCY:
+ case EMERGENCY:
return "Emergency";
- case ContactLookupResult.Type.VOICEMAIL:
+ case VOICEMAIL:
return "Voicemail";
default:
return "Not found";
@@ -1202,35 +1264,35 @@ public class DialerCall implements VideoTechListener {
if (callSpecificAppData == null) {
return "null";
}
- switch (callSpecificAppData.callInitiationType) {
- case CallInitiationType.Type.INCOMING_INITIATION:
+ switch (callSpecificAppData.getCallInitiationType()) {
+ case INCOMING_INITIATION:
return "Incoming";
- case CallInitiationType.Type.DIALPAD:
+ case DIALPAD:
return "Dialpad";
- case CallInitiationType.Type.SPEED_DIAL:
+ case SPEED_DIAL:
return "Speed Dial";
- case CallInitiationType.Type.REMOTE_DIRECTORY:
+ case REMOTE_DIRECTORY:
return "Remote Directory";
- case CallInitiationType.Type.SMART_DIAL:
+ case SMART_DIAL:
return "Smart Dial";
- case CallInitiationType.Type.REGULAR_SEARCH:
+ case REGULAR_SEARCH:
return "Regular Search";
- case CallInitiationType.Type.CALL_LOG:
+ case CALL_LOG:
return "DialerCall Log";
- case CallInitiationType.Type.CALL_LOG_FILTER:
+ case CALL_LOG_FILTER:
return "DialerCall Log Filter";
- case CallInitiationType.Type.VOICEMAIL_LOG:
+ case VOICEMAIL_LOG:
return "Voicemail Log";
- case CallInitiationType.Type.CALL_DETAILS:
+ case CALL_DETAILS:
return "DialerCall Details";
- case CallInitiationType.Type.QUICK_CONTACTS:
+ case QUICK_CONTACTS:
return "Quick Contacts";
- case CallInitiationType.Type.EXTERNAL_INITIATION:
+ case EXTERNAL_INITIATION:
return "External";
- case CallInitiationType.Type.LAUNCHER_SHORTCUT:
+ case LAUNCHER_SHORTCUT:
return "Launcher Shortcut";
default:
- return "Unknown: " + callSpecificAppData.callInitiationType;
+ return "Unknown: " + callSpecificAppData.getCallInitiationType();
}
}
@@ -1264,10 +1326,11 @@ public class DialerCall implements VideoTechListener {
String phoneNumber = call.getNumber();
phoneNumber = phoneNumber != null ? phoneNumber : "";
+ phoneNumber = phoneNumber.replaceAll("[^0-9]", "");
// Insert order here determines the priority of that video tech option
- this.videoTechs = new ArrayList<>();
- videoTechs.add(new ImsVideoTech(call, call.mTelecomCall));
+ videoTechs = new ArrayList<>();
+ videoTechs.add(new ImsVideoTech(Logger.get(call.mContext), call, call.mTelecomCall));
VideoTech rcsVideoTech =
EnrichedCallComponent.get(call.mContext)
diff --git a/java/com/android/incallui/calllocation/impl/LocationFragment.java b/java/com/android/incallui/calllocation/impl/LocationFragment.java
index 3c5d2f972..c0592b64a 100644
--- a/java/com/android/incallui/calllocation/impl/LocationFragment.java
+++ b/java/com/android/incallui/calllocation/impl/LocationFragment.java
@@ -30,8 +30,8 @@ import android.widget.ImageView;
import android.widget.TextView;
import android.widget.ViewAnimator;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
import com.android.incallui.baseui.BaseFragment;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
diff --git a/java/com/android/incallui/calllocation/impl/LocationPresenter.java b/java/com/android/incallui/calllocation/impl/LocationPresenter.java
index 155d9fdfd..1199308a5 100644
--- a/java/com/android/incallui/calllocation/impl/LocationPresenter.java
+++ b/java/com/android/incallui/calllocation/impl/LocationPresenter.java
@@ -21,8 +21,8 @@ import android.graphics.drawable.Drawable;
import android.location.Location;
import android.os.AsyncTask;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
import com.android.incallui.baseui.Presenter;
import com.android.incallui.baseui.Ui;
import com.google.android.gms.location.LocationListener;
diff --git a/java/com/android/incallui/commontheme/res/values-b+sr+Latn/strings.xml b/java/com/android/incallui/commontheme/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..36430c42b
--- /dev/null
+++ b/java/com/android/incallui/commontheme/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="incall_content_description_end_call" msgid="8232796487777787200">"Završi poziv"</string>
+ <string name="incall_content_description_muted" msgid="2130133443150389474">"Zvuk je isključen"</string>
+ <string name="incall_content_description_unmuted" msgid="4023577547526525202">"Zvuk je uključen"</string>
+ <string name="incall_content_description_swap_calls" msgid="5233257839262161417">"Zameni pozive"</string>
+ <string name="incall_content_description_merge_calls" msgid="5198778837993669729">"Objedini pozive"</string>
+ <string name="incall_content_description_earpiece" msgid="2786221842272370555">"Slušalica telefona"</string>
+ <string name="incall_content_description_speaker" msgid="7837829930201265549">"Zvučnik"</string>
+ <string name="incall_content_description_bluetooth" msgid="6988919010980910001">"Bluetooth"</string>
+ <string name="incall_content_description_headset" msgid="3170439802944346719">"Žičane slušalice"</string>
+ <string name="incall_content_description_hold" msgid="3335508251734906019">"Stavi poziv na čekanje"</string>
+ <string name="incall_content_description_unhold" msgid="3862584118869933593">"Nastavi poziv"</string>
+ <string name="incall_content_description_video_on" msgid="899266487647420613">"Uključi video"</string>
+ <string name="incall_content_description_video_off" msgid="762985912616707076">"Isključi video"</string>
+ <string name="incall_content_description_swap_video" msgid="297943299827908998">"Zameni video"</string>
+</resources>
diff --git a/java/com/android/incallui/contactgrid/res/values-b+sr+Latn/strings.xml b/java/com/android/incallui/contactgrid/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..f1a938ea9
--- /dev/null
+++ b/java/com/android/incallui/contactgrid/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="incall_calling_via_template" msgid="3416867359475780924">"Pozivamo preko <xliff:g id="PROVIDER_NAME">%s</xliff:g>"</string>
+ <string name="incall_connecting" msgid="1708280493198276616">"Pozivamo…"</string>
+ <string name="incall_transferring" msgid="7909128243635579407">"Prenosimo…"</string>
+ <string name="incall_video_call_requesting" msgid="5251915562785911238">"Upućujemo video poziv…"</string>
+ <string name="incall_wifi_video_call_requesting" msgid="8783968191180862607">"Upućuje se Wi-Fi video poziv…"</string>
+ <string name="incall_video_call_request_failed" msgid="5014067473831870379">"Povezivanje nije uspelo"</string>
+ <string name="incall_video_call_request_rejected" msgid="5357441169519503234">"Poziv je odbijen"</string>
+ <string name="incall_video_call_request_timed_out" msgid="6804535684856203120">"Vremensko ograničenje poziva je isteklo"</string>
+ <string name="incall_hanging_up" msgid="2166116351937190949">"Prekidamo vezu"</string>
+ <string name="incall_call_ended" msgid="6294704948774348480">"Poziv je završen"</string>
+ <string name="incall_remotely_held" msgid="8561379039177396615">"Na čekanju"</string>
+ <string name="contact_grid_incoming_video_call" msgid="4935122585117803710">"Video poziv od"</string>
+ <string name="contact_grid_incoming_wifi_video_call" msgid="5938822096623593533">"Wi-Fi video poziv od"</string>
+ <string name="contact_grid_incoming_voice_call" msgid="7165853925114955346">"Poziv od"</string>
+ <string name="contact_grid_incoming_work_call" msgid="837605505036615004">"Poslovni poziv od"</string>
+ <string name="contact_grid_incoming_via_template" msgid="7747391077955623969">"Dolazni poziv preko <xliff:g id="PROVIDER_NAME">%s</xliff:g>"</string>
+ <string name="contact_grid_incoming_suspected_spam" msgid="285365265897630425">"Potencijalno nepoželjan pozivalac"</string>
+ <string name="contact_grid_callback_number" msgid="1284649030313415807">"Broj za povratni poziv: <xliff:g id="DARK_NUMBER">%1$s</xliff:g>"</string>
+</resources>
diff --git a/java/com/android/incallui/hold/res/values-b+sr+Latn/strings.xml b/java/com/android/incallui/hold/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..cc132ca23
--- /dev/null
+++ b/java/com/android/incallui/hold/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="incall_on_hold" msgid="5618253281695138626">"Na čekanju"</string>
+</resources>
diff --git a/java/com/android/incallui/incall/impl/ButtonChooserFactory.java b/java/com/android/incallui/incall/impl/ButtonChooserFactory.java
index 1b168a6f7..0dcfdb5fe 100644
--- a/java/com/android/incallui/incall/impl/ButtonChooserFactory.java
+++ b/java/com/android/incallui/incall/impl/ButtonChooserFactory.java
@@ -71,6 +71,8 @@ class ButtonChooserFactory {
mapping.put(
InCallButtonIds.BUTTON_MANAGE_VOICE_CONFERENCE,
MappingInfo.builder(4).setSlotOrder(0).build());
+ mapping.put(
+ InCallButtonIds.BUTTON_UPGRADE_TO_VIDEO, MappingInfo.builder(4).setSlotOrder(10).build());
mapping.put(InCallButtonIds.BUTTON_SWAP, MappingInfo.builder(5).setSlotOrder(0).build());
return new ButtonChooser(new MappedButtonConfig(mapping));
@@ -82,7 +84,9 @@ class ButtonChooserFactory {
InCallButtonIds.BUTTON_SWITCH_TO_SECONDARY, MappingInfo.builder(4).setSlotOrder(0).build());
mapping.put(
InCallButtonIds.BUTTON_MANAGE_VOICE_CONFERENCE,
- MappingInfo.builder(4).setSlotOrder(10).build());
+ MappingInfo.builder(4).setSlotOrder(5).build());
+ mapping.put(
+ InCallButtonIds.BUTTON_UPGRADE_TO_VIDEO, MappingInfo.builder(4).setSlotOrder(10).build());
mapping.put(InCallButtonIds.BUTTON_HOLD, MappingInfo.builder(5).setSlotOrder(0).build());
return new ButtonChooser(new MappedButtonConfig(mapping));
diff --git a/java/com/android/incallui/incall/impl/InCallFragment.java b/java/com/android/incallui/incall/impl/InCallFragment.java
index b02237dcf..ac3c57ca9 100644
--- a/java/com/android/incallui/incall/impl/InCallFragment.java
+++ b/java/com/android/incallui/incall/impl/InCallFragment.java
@@ -272,9 +272,9 @@ public class InCallFragment extends Fragment
paginator.setupWithViewPager(pager);
if (!stateRestored) {
handler.postDelayed(pagerRunnable, 4_000);
- } else {
- paginator.setVisibility(View.GONE);
}
+ } else {
+ paginator.setVisibility(View.GONE);
}
}
diff --git a/java/com/android/incallui/incall/impl/res/layout/frag_incall_voice.xml b/java/com/android/incallui/incall/impl/res/layout/frag_incall_voice.xml
index e4bc942bb..44431413c 100644
--- a/java/com/android/incallui/incall/impl/res/layout/frag_incall_voice.xml
+++ b/java/com/android/incallui/incall/impl/res/layout/frag_incall_voice.xml
@@ -12,6 +12,8 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:clipChildren="false"
+ android:clipToPadding="false"
android:fitsSystemWindows="true">
<LinearLayout
@@ -82,6 +84,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
+ android:clipChildren="false"
+ android:clipToPadding="false"
tools:background="@android:color/white"
tools:visibility="gone"/>
<ImageButton
diff --git a/java/com/android/incallui/incall/impl/res/values-b+sr+Latn/strings.xml b/java/com/android/incallui/incall/impl/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..bff7ed079
--- /dev/null
+++ b/java/com/android/incallui/incall/impl/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="incall_label_videocall" msgid="2208755440134676113">"Video poziv"</string>
+ <string name="incall_label_hold" msgid="4223472584896867896">"Na čekanje"</string>
+ <string name="incall_label_add_call" msgid="5641663436373994915">"Dodaj poziv"</string>
+ <string name="incall_label_mute" msgid="2180667027331706737">"Isključi zvuk"</string>
+ <string name="incall_label_dialpad" msgid="8609779533654156550">"Tastatura"</string>
+ <string name="incall_label_speaker" msgid="8100402799687856933">"Zvučnik"</string>
+ <string name="incall_talkback_speaker_on" msgid="5819463769258124228">", uključen"</string>
+ <string name="incall_talkback_speaker_off" msgid="7486836772563090186">", isključen"</string>
+ <string name="incall_label_merge" msgid="720076442985913175">"Objedini"</string>
+ <string name="incall_label_manage" msgid="2175471192903568159">"Upravljaj"</string>
+ <string name="a11y_description_incall_label_manage_content" msgid="8298638893449287602">"Upravljajte pozivaocima"</string>
+ <string name="incall_label_swap" msgid="10458642864243507">"Zameni"</string>
+ <string name="incall_label_audio" msgid="8616473242030174797">"Zvuk"</string>
+ <string name="incall_note_sent" msgid="4524130323127388367">"Beleška je poslata"</string>
+</resources>
diff --git a/java/com/android/incallui/res/drawable-hdpi/ic_block_grey600_24dp.png b/java/com/android/incallui/res/drawable-hdpi/ic_block_grey600_24dp.png
new file mode 100644
index 000000000..1e9294c12
--- /dev/null
+++ b/java/com/android/incallui/res/drawable-hdpi/ic_block_grey600_24dp.png
Binary files differ
diff --git a/java/com/android/incallui/res/drawable-hdpi/ic_call_end_white_24dp.png b/java/com/android/incallui/res/drawable-hdpi/ic_call_end_white_24dp.png
new file mode 100644
index 000000000..757d339c4
--- /dev/null
+++ b/java/com/android/incallui/res/drawable-hdpi/ic_call_end_white_24dp.png
Binary files differ
diff --git a/java/com/android/incallui/res/drawable-hdpi/ic_call_split_white_24dp.png b/java/com/android/incallui/res/drawable-hdpi/ic_call_split_white_24dp.png
new file mode 100644
index 000000000..4e3dbf55d
--- /dev/null
+++ b/java/com/android/incallui/res/drawable-hdpi/ic_call_split_white_24dp.png
Binary files differ
diff --git a/java/com/android/incallui/res/drawable-hdpi/ic_close_grey600_24dp.png b/java/com/android/incallui/res/drawable-hdpi/ic_close_grey600_24dp.png
new file mode 100644
index 000000000..9ab350e9a
--- /dev/null
+++ b/java/com/android/incallui/res/drawable-hdpi/ic_close_grey600_24dp.png
Binary files differ
diff --git a/java/com/android/incallui/res/drawable-hdpi/ic_location_on_white_24dp.png b/java/com/android/incallui/res/drawable-hdpi/ic_location_on_white_24dp.png
new file mode 100644
index 000000000..7c281c3f5
--- /dev/null
+++ b/java/com/android/incallui/res/drawable-hdpi/ic_location_on_white_24dp.png
Binary files differ
diff --git a/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_01.png b/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_01.png
new file mode 100644
index 000000000..e4ff6db13
--- /dev/null
+++ b/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_01.png
Binary files differ
diff --git a/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_02.png b/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_02.png
new file mode 100644
index 000000000..bc2b3d2f8
--- /dev/null
+++ b/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_02.png
Binary files differ
diff --git a/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_03.png b/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_03.png
new file mode 100644
index 000000000..fa936cbdc
--- /dev/null
+++ b/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_03.png
Binary files differ
diff --git a/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_04.png b/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_04.png
new file mode 100644
index 000000000..ef5137976
--- /dev/null
+++ b/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_04.png
Binary files differ
diff --git a/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_05.png b/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_05.png
new file mode 100644
index 000000000..3712d164d
--- /dev/null
+++ b/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_05.png
Binary files differ
diff --git a/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_06.png b/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_06.png
new file mode 100644
index 000000000..c6a4216a3
--- /dev/null
+++ b/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_06.png
Binary files differ
diff --git a/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_07.png b/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_07.png
new file mode 100644
index 000000000..e4ff6db13
--- /dev/null
+++ b/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_07.png
Binary files differ
diff --git a/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_08.png b/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_08.png
new file mode 100644
index 000000000..e4ff6db13
--- /dev/null
+++ b/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_08.png
Binary files differ
diff --git a/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_09.png b/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_09.png
new file mode 100644
index 000000000..e4ff6db13
--- /dev/null
+++ b/java/com/android/incallui/res/drawable-hdpi/ic_ongoing_phone_24px_09.png
Binary files differ
diff --git a/java/com/android/incallui/res/drawable-hdpi/ic_person_add_grey600_24dp.png b/java/com/android/incallui/res/drawable-hdpi/ic_person_add_grey600_24dp.png
new file mode 100644
index 000000000..185d03393
--- /dev/null
+++ b/java/com/android/incallui/res/drawable-hdpi/ic_person_add_grey600_24dp.png
Binary files differ
diff --git a/java/com/android/incallui/res/drawable-hdpi/ic_phone_paused_white_24dp.png b/java/com/android/incallui/res/drawable-hdpi/ic_phone_paused_white_24dp.png
new file mode 100644
index 000000000..a2177f58a
--- /dev/null
+++ b/java/com/android/incallui/res/drawable-hdpi/ic_phone_paused_white_24dp.png
Binary files differ
diff --git a/java/com/android/incallui/res/drawable-hdpi/ic_question_mark.png b/java/com/android/incallui/res/drawable-hdpi/ic_question_mark.png
new file mode 100644
index 000000000..bd9489c85
--- /dev/null
+++ b/java/com/android/incallui/res/drawable-hdpi/ic_question_mark.png
Binary files differ
diff --git a/java/com/android/incallui/res/drawable-hdpi/ic_schedule_white_24dp.png b/java/com/android/incallui/res/drawable-hdpi/ic_schedule_white_24dp.png
new file mode 100644
index 000000000..f3581d104
--- /dev/null
+++ b/java/com/android/incallui/res/drawable-hdpi/ic_schedule_white_24dp.png
Binary files differ
diff --git a/java/com/android/incallui/res/drawable-hdpi/img_business.png b/java/com/android/incallui/res/drawable-hdpi/img_business.png
new file mode 100644
index 000000000..f70634262
--- /dev/null
+++ b/java/com/android/incallui/res/drawable-hdpi/img_business.png
Binary files differ
diff --git a/java/com/android/incallui/res/drawable-hdpi/img_conference.png b/java/com/android/incallui/res/drawable-hdpi/img_conference.png
new file mode 100644
index 000000000..3d9f683a5
--- /dev/null
+++ b/java/com/android/incallui/res/drawable-hdpi/img_conference.png
Binary files differ
diff --git a/java/com/android/incallui/res/drawable-hdpi/img_no_image.png b/java/com/android/incallui/res/drawable-hdpi/img_no_image.png
new file mode 100644
index 000000000..fd0ab3211
--- /dev/null
+++ b/java/com/android/incallui/res/drawable-hdpi/img_no_image.png
Binary files differ
diff --git a/java/com/android/incallui/res/drawable-hdpi/img_phone.png b/java/com/android/incallui/res/drawable-hdpi/img_phone.png
new file mode 100644
index 000000000..748312e6e
--- /dev/null
+++ b/java/com/android/incallui/res/drawable-hdpi/img_phone.png
Binary files differ
diff --git a/java/com/android/incallui/res/layout/incall_dialpad_fragment.xml b/java/com/android/incallui/res/layout/incall_dialpad_fragment.xml
index 0621d48aa..075a46bd0 100644
--- a/java/com/android/incallui/res/layout/incall_dialpad_fragment.xml
+++ b/java/com/android/incallui/res/layout/incall_dialpad_fragment.xml
@@ -19,6 +19,8 @@
class="com.android.incallui.DialpadFragment$DialpadSlidingLinearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:clipToPadding="false"
+ android:clipChildren="false"
android:orientation="vertical">
<include layout="@layout/dialpad_view"/>
</view>
diff --git a/java/com/android/incallui/res/values-af/strings.xml b/java/com/android/incallui/res/values-af/strings.xml
index a46963fad..5dacaaa8d 100644
--- a/java/com/android/incallui/res/values-af/strings.xml
+++ b/java/com/android/incallui/res/values-af/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Inkomende Wi-Fi-werkoproep"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Inkomende verdagte strooipos-oproep"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Inkomende videoversoek"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Nuwe stemboodskap"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Nuwe stemboodskap (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Bel <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Stemboodskapnommer onbekend"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Geen diens nie"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Gekose netwerk (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) nie beskikbaar nie"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Antwoord"</string>
diff --git a/java/com/android/incallui/res/values-am/strings.xml b/java/com/android/incallui/res/values-am/strings.xml
index 4bbbe3a9e..249447fee 100644
--- a/java/com/android/incallui/res/values-am/strings.xml
+++ b/java/com/android/incallui/res/values-am/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"ገቢ የWi-Fi የሥራ ጥሪ"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"መጪ የተጠረጠረ የአይፈለጌ መልዕክት ጥሪ"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"ገቢ የቪዲዮ ጥያቄ"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"አዲስ የድምፅ መልዕክት"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"አዲስ የድምፅ መልዕክት<xliff:g id="COUNT">%d</xliff:g>"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"ደውል <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"የማይታወቅ የድምፅ መልዕክት ቁጥር"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"ምንም አገልግሎት የለም"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"የተመረጠ አውታረመረብ(<xliff:g id="OPERATOR_NAME">%s</xliff:g>) የለም"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"መልስ"</string>
diff --git a/java/com/android/incallui/res/values-ar/strings.xml b/java/com/android/incallui/res/values-ar/strings.xml
index d6bdaf5f8..7c3585c7a 100644
--- a/java/com/android/incallui/res/values-ar/strings.xml
+++ b/java/com/android/incallui/res/values-ar/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"‏مكالمة عمل واردة عبر اتصال Wi-Fi"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"مكالمة واردة يشتبه في كونها غير مرغوب فيها"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"طلب فيديو وارد"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"بريد صوتي جديد"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"بريد صوتي جديد (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"طلب <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"رقم البريد الصوتي غير معروف"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"لا خدمة"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"الشبكة المحددة (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) غير متاحة"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"رد"</string>
diff --git a/java/com/android/incallui/res/values-az/strings.xml b/java/com/android/incallui/res/values-az/strings.xml
index 0f03d1d93..dc43014fb 100644
--- a/java/com/android/incallui/res/values-az/strings.xml
+++ b/java/com/android/incallui/res/values-az/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Daxil olan Wi-Fi iş çağrısı"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Şübhəli spam zəngi"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Gələn video çağrı"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Yeni səsli poçt"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Yeni səsli poçt (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Yığın <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Səsli poçt nömrəsi naməlumdur"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Xidmət yoxdur"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Seçilmiş (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) şəbəkə əlçatmazdır"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Cavab"</string>
diff --git a/java/com/android/incallui/res/values-b+sr+Latn/strings.xml b/java/com/android/incallui/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..3dddf653f
--- /dev/null
+++ b/java/com/android/incallui/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2013 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="phoneAppLabel" product="default" msgid="4266606423746318128">"Telefon"</string>
+ <string name="inCallLabel" msgid="8627766543550519912">"InCallUI"</string>
+ <string name="confCall" msgid="36560628097626181">"Konferencijski poziv"</string>
+ <string name="call_lost" msgid="2082971531689406145">"Poziv je prekinut"</string>
+ <string name="wait_prompt_str" msgid="3509685348904329594">"Želite li da pošaljete sledeće tonove?\n"</string>
+ <string name="pause_prompt_str" msgid="5712344742516488080">"Tonovi slanja\n"</string>
+ <string name="send_button" msgid="6976782353456252579">"Pošalji"</string>
+ <string name="pause_prompt_yes" msgid="4642047011233552973">"Da"</string>
+ <string name="pause_prompt_no" msgid="4691320111774935838">"Ne"</string>
+ <string name="wild_prompt_str" msgid="1399377741491574104">"Zamenite džoker znak sa"</string>
+ <string name="caller_manage_header" msgid="7358710345135355578">"Konferencijski poziv <xliff:g id="CONF_CALL_TIME">%s</xliff:g>"</string>
+ <string name="voicemail_settings_number_label" msgid="8935904934161608885">"Broj govorne pošte"</string>
+ <string name="notification_dialing" msgid="9072177265772083826">"Poziva se"</string>
+ <string name="notification_missedCallTicker" msgid="238492086972857643">"Propušten poziv od: <xliff:g id="MISSED_CALL_FROM">%s</xliff:g>"</string>
+ <string name="notification_ongoing_call" msgid="8712641937577776125">"Aktuelni poziv"</string>
+ <string name="notification_ongoing_work_call" msgid="3189581218078981547">"Tekući poziv za Work"</string>
+ <string name="notification_ongoing_call_wifi" msgid="297183051021070949">"Tekući Wi-Fi poziv"</string>
+ <string name="notification_ongoing_work_call_wifi" msgid="6769311641293583197">"Tekući poziv za Work preko Wi-Fi-ja"</string>
+ <string name="notification_on_hold" msgid="7141827443379205682">"Na čekanju"</string>
+ <string name="notification_incoming_call" msgid="7520580807513849283">"Dolazni poziv"</string>
+ <string name="notification_incoming_call_with_photo" msgid="4360505044807517422">"Dolazni poziv sa slikom"</string>
+ <string name="notification_incoming_call_with_message" msgid="5608687985694956601">"Dolazni poziv sa porukom"</string>
+ <string name="notification_incoming_call_with_location" msgid="4519498445081598767">"Dolazni poziv sa lokacijom"</string>
+ <string name="notification_incoming_call_with_photo_message" msgid="316806247057497525">"Dolazni poziv sa slikom i porukom"</string>
+ <string name="notification_incoming_call_with_photo_location" msgid="3523930283842222367">"Dolazni poziv sa slikom i lokacijom"</string>
+ <string name="notification_incoming_call_with_message_location" msgid="319374298517482028">"Dolazni poziv sa porukom i lokacijom"</string>
+ <string name="notification_incoming_call_with_photo_message_location" msgid="596658237891406809">"Dolazni poziv sa slikom, porukom i lokacijom"</string>
+ <string name="notification_incoming_call_attachments" msgid="3708414495376236948">"Dolazni poziv sa prilozima"</string>
+ <string name="important_notification_incoming_call" msgid="2867013954509930989">"Važan dolazni poziv"</string>
+ <string name="important_notification_incoming_call_with_photo" msgid="4908333121583658560">"Važan dolazni poziv sa slikom"</string>
+ <string name="important_notification_incoming_call_with_message" msgid="1614505248246685319">"Važan dolazni poziv sa porukom"</string>
+ <string name="important_notification_incoming_call_with_location" msgid="7387284065036564352">"Važan dolazni poziv sa lokacijom"</string>
+ <string name="important_notification_incoming_call_with_photo_message" msgid="4577220919701434817">"Važan dolazni poziv sa slikom i porukom"</string>
+ <string name="important_notification_incoming_call_with_photo_location" msgid="7172208615619394502">"Važan dolazni poziv sa slikom i lokacijom"</string>
+ <string name="important_notification_incoming_call_with_message_location" msgid="7244079127080064796">"Važan dolazni poziv sa porukom i lokacijom"</string>
+ <string name="important_notification_incoming_call_with_photo_message_location" msgid="513692941317253479">"Važan dolazni poziv sa slikom, porukom i lokacijom"</string>
+ <string name="important_notification_incoming_call_attachments" msgid="4594375776340303751">"Važan dolazni poziv sa prilozima"</string>
+ <string name="notification_incoming_work_call" msgid="5291275092734261918">"Dolazni poziv za Work"</string>
+ <string name="notification_incoming_call_wifi" msgid="1039173395425774684">"Dolazni Wi-Fi poziv"</string>
+ <string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Dolazni poziv za Work preko Wi-Fi-ja"</string>
+ <string name="notification_incoming_spam_call" msgid="7591506944666791937">"Sumnja na nepoželjan dolazni poziv"</string>
+ <string name="notification_requesting_video_call" msgid="1807679328811515758">"Zahtev za dolazni video poziv"</string>
+ <string name="notification_network_selection_title" msgid="8639159088474275747">"Nema usluge"</string>
+ <string name="notification_network_selection_text" msgid="7190860774239009625">"Izabrana mreža (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) nije dostupna"</string>
+ <string name="notification_action_answer" msgid="8748275902211192568">"Odgovori"</string>
+ <string name="notification_action_end_call" msgid="7467258454170007765">"Prekini vezu"</string>
+ <string name="notification_action_answer_video" msgid="8488108892919917287">"Video"</string>
+ <string name="notification_action_answer_voice" msgid="6237890905749760509">"Glasovni"</string>
+ <string name="notification_action_accept" msgid="1272761514200507143">"Prihvati"</string>
+ <string name="notification_action_dismiss" msgid="3128241581632616226">"Odbij"</string>
+ <string name="notification_external_call" msgid="2504334597315343920">"Poziv je u toku na drugom uređaju"</string>
+ <string name="notification_external_video_call" msgid="7709394856028436683">"Video poziv je u toku na drugom uređaju"</string>
+ <string name="notification_take_call" msgid="5631659438864492229">"Preuzmi poziv"</string>
+ <string name="notification_take_video_call" msgid="4473387503712341390">"Preuzmi video poziv"</string>
+ <string name="incall_error_power_off" msgid="3244691852792529453">"Da biste uputili poziv, prvo isključite režim rada u avionu."</string>
+ <string name="incall_error_emergency_only" msgid="8313690034696753566">"Nije registrovano na mreži."</string>
+ <string name="incall_error_out_of_service" msgid="539611768312332950">"Mobilna mreža nije dostupna."</string>
+ <string name="incall_error_no_phone_number_supplied" msgid="293343960362630925">"Da biste uputili poziv, unesite važeći broj."</string>
+ <string name="incall_error_call_failed" msgid="5560521345862514733">"Poziv nije uspeo."</string>
+ <string name="incall_status_dialed_mmi" msgid="3341365334358686873">"Pokretanje MMI sekvence"</string>
+ <string name="incall_error_supp_service_unknown" msgid="3062751096566282959">"Usluga nije podržana."</string>
+ <string name="incall_error_supp_service_switch" msgid="759346040980722884">"Zamena poziva nije uspela."</string>
+ <string name="incall_error_supp_service_separate" msgid="5250304200901095519">"Razdvajanje poziva nije uspelo."</string>
+ <string name="incall_error_supp_service_transfer" msgid="556522021433482116">"Prebacivanje nije uspelo."</string>
+ <string name="incall_error_supp_service_conference" msgid="9211560861266632111">"Konferencijski poziv nije uspeo."</string>
+ <string name="incall_error_supp_service_reject" msgid="2724981515194352120">"Odbijanje poziva nije uspelo."</string>
+ <string name="incall_error_supp_service_hangup" msgid="4659922482839313098">"Uspostavljanje poziva nije uspelo."</string>
+ <string name="emergency_enable_radio_dialog_title" msgid="5964415982020440543">"Hitan poziv"</string>
+ <string name="emergency_enable_radio_dialog_message" msgid="6927454354381787268">"Uključivanje radija…"</string>
+ <string name="emergency_enable_radio_dialog_retry" msgid="8760220613410560290">"Nema mreže. Ponovni pokušaj…"</string>
+ <string name="dial_emergency_error" msgid="6953255422990366011">"Poziv nije uspeo. <xliff:g id="NON_EMERGENCY_NUMBER">%s</xliff:g> nije broj za hitne slučajeve."</string>
+ <string name="dial_emergency_empty_error" msgid="6668006522178181198">"Poziv nije uspeo. Pozovite broj za hitne slučajeve."</string>
+ <string name="dialerKeyboardHintText" msgid="6275105254377292585">"Koristite tastaturu za pozivanje"</string>
+ <string name="player_started" msgid="9177182657338033086">"Plejer je pokrenut"</string>
+ <string name="player_stopped" msgid="5040965200339765956">"Plejer je zaustavljen"</string>
+ <string name="camera_not_ready" msgid="3629017450703828964">"Kamera nije spremna"</string>
+ <string name="camera_ready" msgid="4312684554501216898">"Kamera je spremna"</string>
+ <string name="unknown_call_session_event" msgid="797786212356595358">"Nepoznat događaj sesije poziva"</string>
+ <string name="other_settings" msgid="2537377721890761197">"Druga podešavanja poziva"</string>
+ <string name="goPrivate" msgid="5269514638004595378">"idi na privatno"</string>
+ <string name="selectContact" msgid="1703433172800564849">"izaberite kontakt"</string>
+ <string name="preference_category_ringtone" msgid="8566115267004890115">"Melodija zvona i vibracija"</string>
+ <string name="manageConferenceLabel" msgid="3589379023518128318">"Upravljaj konferencijskim pozivom"</string>
+ <string name="emergency_call_dialog_number_for_display" msgid="461645337084699104">"Broj za hitne slučajeve"</string>
+ <string name="child_number" msgid="3398257437107259682">"na <xliff:g id="CHILD_NUMBER">%s</xliff:g>"</string>
+ <string name="person_contact_context_title" msgid="9186980175313563725">"Nedavne poruke"</string>
+ <string name="business_contact_context_title" msgid="4796616668776688978">"Informacije o preduzeću"</string>
+ <string name="distance_imperial_away" msgid="66546464027126106">"Udaljenost je <xliff:g id="DISTANCE">%.1f</xliff:g> mi"</string>
+ <string name="distance_metric_away" msgid="4535553190850854545">"Udaljenost je <xliff:g id="DISTANCE">%.1f</xliff:g> km"</string>
+ <string name="display_address" msgid="2909385132133621873">"<xliff:g id="STREET_ADDRESS">%1$s</xliff:g>, <xliff:g id="LOCALITY">%2$s</xliff:g>"</string>
+ <string name="open_time_span" msgid="3333746415188434992">"<xliff:g id="OPEN_TIME">%1$s</xliff:g>–<xliff:g id="CLOSE_TIME">%2$s</xliff:g>"</string>
+ <string name="opening_hours" msgid="2908934145495754020">"<xliff:g id="EARLIER_TIMES">%1$s</xliff:g>, <xliff:g id="LATER_TIME">%2$s</xliff:g>"</string>
+ <string name="opens_tomorrow_at" msgid="2896787795283597856">"Otvara se sutra u <xliff:g id="OPEN_TIME">%s</xliff:g>"</string>
+ <string name="opens_today_at" msgid="4701005560156621184">"Otvara se danas u <xliff:g id="OPEN_TIME">%s</xliff:g>"</string>
+ <string name="closes_today_at" msgid="2668928851103904896">"Zatvara se u <xliff:g id="CLOSE_TIME">%s</xliff:g>"</string>
+ <string name="closed_today_at" msgid="4203311397205549440">"Zatvorilo se danas u <xliff:g id="CLOSE_TIME">%s</xliff:g>"</string>
+ <string name="open_now" msgid="5897306702060039512">"Trenutno otvoreno"</string>
+ <string name="closed_now" msgid="3962291301467974921">"Trenutno zatvoreno"</string>
+ <string name="non_spam_notification_title" msgid="3290544768406546372">"Poznat vam je broj <xliff:g id="NUMBER">%1$s</xliff:g>?"</string>
+ <string name="spam_notification_title" msgid="2439276063775520534">"Da li je <xliff:g id="NUMBER">%1$s</xliff:g> nepoželjan?"</string>
+ <string name="spam_notification_block_report_toast_text" msgid="6844067640633690292">"Blokirali ste <xliff:g id="NUMBER">%1$s</xliff:g>, a poziv ste prijavili kao nepoželjan."</string>
+ <string name="spam_notification_not_spam_toast_text" msgid="8321993839027073785">"Prijavili ste da poziv sa <xliff:g id="NUMBER">%1$s</xliff:g> nije nepoželjan."</string>
+ <string name="spam_notification_non_spam_call_collapsed_text" msgid="6482092382445364016">"Dodirnite da biste dodali kontakte ili blokirali nepoželjan broj."</string>
+ <string name="spam_notification_non_spam_call_expanded_text" msgid="3598209932872915536">"Prvi put ste primili poziv sa ovog broja. Ako je nepoželjan, možete da ga blokirate i prijavite."</string>
+ <string name="spam_notification_spam_call_collapsed_text" msgid="3865687645128037638">"Dodirnite da biste prijavili da poziv NIJE NEPOŽELJAN ili blokirajte broj."</string>
+ <string name="spam_notification_spam_call_expanded_text" msgid="1062029525759401658">"Sumnjamo da je ovaj poziv nepoželjan. Ako nije, dodirnite NIJE NEPOŽELJNO da biste prijavili grešku."</string>
+ <string name="spam_notification_report_spam_action_text" msgid="4829510418690824538">"Blokiraj i prijavi"</string>
+ <string name="spam_notification_add_contact_action_text" msgid="307315138401483232">"Dodaj kontakt"</string>
+ <string name="spam_notification_not_spam_action_text" msgid="2576048366011852090">"Nije nepoželjan"</string>
+ <string name="spam_notification_block_spam_action_text" msgid="80045727259264724">"Blokiraj broj"</string>
+ <string name="spam_notification_dialog_add_contact_action_text" msgid="5619696845681999506">"Dodaj u kontakte"</string>
+ <string name="spam_notification_dialog_block_report_spam_action_text" msgid="1821506089128547428">"Blokiraj i prijavi nepoželjan poziv"</string>
+ <string name="spam_notification_dialog_was_not_spam_action_text" msgid="4953789750391355251">"Nije nepoželjan"</string>
+ <string name="callFailed_simError" msgid="4587775795711340072">"Nema SIM kartice ili postoji greška na njoj"</string>
+ <string name="conference_caller_disconnect_content_description" msgid="2821988368803183644">"Završite poziv"</string>
+ <string name="conference_call_name" msgid="8189987124611337174">"Konferencijski poziv"</string>
+ <string name="generic_conference_call_name" msgid="1546941472424243894">"U pozivu"</string>
+ <string name="video_call_wifi_to_lte_handover_toast" msgid="2495974172657183700">"Poziv se nastavlja pomoću mobilnih podataka…"</string>
+ <string name="video_call_lte_to_wifi_failed_title" msgid="2793524281399509056">"Prebacivanje na Wi-Fi mrežu nije uspelo"</string>
+ <string name="video_call_lte_to_wifi_failed_message" msgid="5950700221126447109">"Video poziv će ostati na mobilnoj mreži. Mogu da važe standardne naknade za prenos podataka."</string>
+ <string name="video_call_lte_to_wifi_failed_do_not_show" msgid="7609115874511223150">"Ne prikazuj ovo ponovo"</string>
+</resources>
diff --git a/java/com/android/incallui/res/values-be/strings.xml b/java/com/android/incallui/res/values-be/strings.xml
index 6509bde94..46b5d3941 100644
--- a/java/com/android/incallui/res/values-be/strings.xml
+++ b/java/com/android/incallui/res/values-be/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Уваходны выклік па працы праз Wi-Fi"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Уваходны выклiк ад абанента, якога падазраваюць у спаме"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Запыт уваходнага відэавыкліку"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Новая галасавая пошта"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Новыя паведамленнi галасавой пошты (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Набраць <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Невядомы нумар галасавой пошты"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Не абслугоўваецца"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Выбраная сетка (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) недаступная"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Адказаць"</string>
diff --git a/java/com/android/incallui/res/values-bg/strings.xml b/java/com/android/incallui/res/values-bg/strings.xml
index 1f37ac6b2..84bffa02c 100644
--- a/java/com/android/incallui/res/values-bg/strings.xml
+++ b/java/com/android/incallui/res/values-bg/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Входящо служебно обаждане през Wi-Fi"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Входящо обаждане – възможен спам"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Входяща заявка за видеовръзка"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Нова гласова поща"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Нова гласова поща на (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Набиране на <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Неизвестен номер за гласова поща"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Няма покритие"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Избраната мрежа (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) не е налична"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Отговор"</string>
diff --git a/java/com/android/incallui/res/values-bn/strings.xml b/java/com/android/incallui/res/values-bn/strings.xml
index 638236767..fc9383002 100644
--- a/java/com/android/incallui/res/values-bn/strings.xml
+++ b/java/com/android/incallui/res/values-bn/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"আগত ওয়াই-ফাই কাজের কল"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"আগত সন্দেহভাজন স্প্যাম কল"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"আগত ভিডিও অনুরোধ"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"নতুন ভয়েসমেল"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"নতুন ভয়েসমেল (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> এ ডায়াল করুন"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"ভয়েসমেল নম্বর অজানা"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"কোনো পরিষেবা নেই"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"নির্বাচিত নেটওয়ার্ক (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) অনুপলব্ধ"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"উত্তর"</string>
diff --git a/java/com/android/incallui/res/values-bs/strings.xml b/java/com/android/incallui/res/values-bs/strings.xml
index 4f4bfc706..c6950802f 100644
--- a/java/com/android/incallui/res/values-bs/strings.xml
+++ b/java/com/android/incallui/res/values-bs/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Dolazni Wi-Fi poslovni poziv"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Mogući neželjeni dolazni poziv"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Zahtjev za dolazni videopoziv"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Nova govorna pošta"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Nova govorna pošta (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Pozovi <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Nepoznat broj govorne pošte"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Nema mreže"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Odabrana mreža (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) je nedostupna"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Odgovori"</string>
@@ -140,6 +136,6 @@
<string name="generic_conference_call_name" msgid="1546941472424243894">"Poziv u toku"</string>
<string name="video_call_wifi_to_lte_handover_toast" msgid="2495974172657183700">"Poziv se nastavlja pomoću mobilnih podataka…"</string>
<string name="video_call_lte_to_wifi_failed_title" msgid="2793524281399509056">"Prebacivanje na Wi-Fi mrežu nije moguće"</string>
- <string name="video_call_lte_to_wifi_failed_message" msgid="5950700221126447109">"Videopoziv će ostati na mobilnoj mreži. Moguće je naplaćivanje standardnih naknada za prijenos podataka."</string>
+ <string name="video_call_lte_to_wifi_failed_message" msgid="5950700221126447109">"Videopoziv će ostati na mobilnoj mreži. Mogu nastati standardni troškovi prijenosa podataka."</string>
<string name="video_call_lte_to_wifi_failed_do_not_show" msgid="7609115874511223150">"Ne prikazuj ponovo"</string>
</resources>
diff --git a/java/com/android/incallui/res/values-ca/strings.xml b/java/com/android/incallui/res/values-ca/strings.xml
index 102e2fee4..b961c62b6 100644
--- a/java/com/android/incallui/res/values-ca/strings.xml
+++ b/java/com/android/incallui/res/values-ca/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Trucada de feina per Wi-Fi entrant"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Presumpta trucada brossa entrant"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Sol·licitud de vídeo entrant"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Missatge de veu nou"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Bústia de veu nou (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Marca <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Número de la bústia de veu desconegut"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Sense servei"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"La xarxa seleccionada (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) no està disponible"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Respon"</string>
diff --git a/java/com/android/incallui/res/values-cs/strings.xml b/java/com/android/incallui/res/values-cs/strings.xml
index 2ec55e2e1..9d69cfac7 100644
--- a/java/com/android/incallui/res/values-cs/strings.xml
+++ b/java/com/android/incallui/res/values-cs/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Příchozí pracovní hovor (Wi-Fi)"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"U příchozího hovoru máme podezření, že se jedná o spam"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Příchozí žádost o videohovor"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Nová hlasová zpráva"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Nová hlasová zpráva (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Volat hlasovou schránku <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Číslo hlasové schránky je neznámé."</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Žádný signál"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Vybraná síť (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) není k dispozici"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Přijmout"</string>
diff --git a/java/com/android/incallui/res/values-da/strings.xml b/java/com/android/incallui/res/values-da/strings.xml
index 07450353c..19de78382 100644
--- a/java/com/android/incallui/res/values-da/strings.xml
+++ b/java/com/android/incallui/res/values-da/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Indgående Wi-Fi-opkald i forbindelse med arbejde"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Indgående formodet spamopkald"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Indgående videoanmodning"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Ny telefonsvarerbesked"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Nye telefonsvarerbeskeder (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Ring til <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Telefonsvarernummeret er ukendt"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Ingen dækning"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Det valgte netværk (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) er ikke tilgængeligt"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Svar"</string>
diff --git a/java/com/android/incallui/res/values-de/strings.xml b/java/com/android/incallui/res/values-de/strings.xml
index 178dbbe58..a5f96027b 100644
--- a/java/com/android/incallui/res/values-de/strings.xml
+++ b/java/com/android/incallui/res/values-de/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Eingehender geschäftlicher WLAN-Anruf"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Verdacht auf eingehenden Spam-Anruf"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Eingehende Videoanfrage"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Neue Nachricht"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Neue Nachricht (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> wählen"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Mailboxnummer unbekannt"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"kein Dienst"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Ausgewähltes Netzwerk (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) nicht verfügbar"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Annehmen"</string>
diff --git a/java/com/android/incallui/res/values-el/strings.xml b/java/com/android/incallui/res/values-el/strings.xml
index cd2834f0e..8ff6d2f5f 100644
--- a/java/com/android/incallui/res/values-el/strings.xml
+++ b/java/com/android/incallui/res/values-el/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Εισερχόμενη κλήση εργασίας μέσω Wi-Fi"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Πιθανώς ανεπιθύμητη εισερχόμενη κλήση"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Αίτημα εισερχόμενου βίντεο"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Νέο μήνυμα στον αυτόματο τηλεφωνητή"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Νέο μήνυμα στον αυτόματο τηλεφωνητή (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Καλέστε <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Ο αριθμός αυτόματου τηλεφωνητή είναι άγνωστος"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Δίκτυο μη διαθέσιμο"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Επιλεγμένο δίκτυο (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) μη διαθέσιμο"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Απάντηση"</string>
diff --git a/java/com/android/incallui/res/values-en-rAU/strings.xml b/java/com/android/incallui/res/values-en-rAU/strings.xml
index 67eab7953..5e0d20737 100644
--- a/java/com/android/incallui/res/values-en-rAU/strings.xml
+++ b/java/com/android/incallui/res/values-en-rAU/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Incoming Wi-Fi work call"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Incoming suspected spam call"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Incoming video request"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"New voicemail"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"New voicemail (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Dial <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Voicemail number unknown"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"No service"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Selected network (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) unavailable"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Answer"</string>
diff --git a/java/com/android/incallui/res/values-en-rGB/strings.xml b/java/com/android/incallui/res/values-en-rGB/strings.xml
index 67eab7953..5e0d20737 100644
--- a/java/com/android/incallui/res/values-en-rGB/strings.xml
+++ b/java/com/android/incallui/res/values-en-rGB/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Incoming Wi-Fi work call"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Incoming suspected spam call"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Incoming video request"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"New voicemail"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"New voicemail (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Dial <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Voicemail number unknown"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"No service"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Selected network (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) unavailable"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Answer"</string>
diff --git a/java/com/android/incallui/res/values-en-rIN/strings.xml b/java/com/android/incallui/res/values-en-rIN/strings.xml
index 67eab7953..5e0d20737 100644
--- a/java/com/android/incallui/res/values-en-rIN/strings.xml
+++ b/java/com/android/incallui/res/values-en-rIN/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Incoming Wi-Fi work call"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Incoming suspected spam call"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Incoming video request"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"New voicemail"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"New voicemail (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Dial <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Voicemail number unknown"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"No service"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Selected network (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) unavailable"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Answer"</string>
diff --git a/java/com/android/incallui/res/values-es-rUS/strings.xml b/java/com/android/incallui/res/values-es-rUS/strings.xml
index a25b0ee83..d0167118f 100644
--- a/java/com/android/incallui/res/values-es-rUS/strings.xml
+++ b/java/com/android/incallui/res/values-es-rUS/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Llamada de trabajo con Wi-Fi entrante"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Posible llamada entrante de spam"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Solicitud de videollamada entrante"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Correo de voz nuevo"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Correo de voz nuevo (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Marcar <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Número de correo de voz desconocido"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Sin servicio"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"La red seleccionada (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) no está disponible"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Responder"</string>
diff --git a/java/com/android/incallui/res/values-es/strings.xml b/java/com/android/incallui/res/values-es/strings.xml
index 8a42515e7..e6e51859e 100644
--- a/java/com/android/incallui/res/values-es/strings.xml
+++ b/java/com/android/incallui/res/values-es/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Llamada Wi-Fi de trabajo entrante"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Llamada entrante sospechosa de spam"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Solicitud de videollamada entrante"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Nuevo mensaje de voz"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Buzón de voz nuevo (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Marcar <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Número del buzón de voz desconocido"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Sin servicio"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"La red seleccionada (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) no está disponible."</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Responder"</string>
diff --git a/java/com/android/incallui/res/values-et/strings.xml b/java/com/android/incallui/res/values-et/strings.xml
index d34980eb3..9eaa65f42 100644
--- a/java/com/android/incallui/res/values-et/strings.xml
+++ b/java/com/android/incallui/res/values-et/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Sissetulev töökõne WiFi kaudu"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Arvatav sissetulev rämpskõne"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Sissetulev videotaotlus"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Uus kõnepost"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Uus kõnepost (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Valige <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Kõneposti number teadmata"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Teenus puudub"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Valitud võrk (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) pole saadaval"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Vastamine"</string>
diff --git a/java/com/android/incallui/res/values-eu/strings.xml b/java/com/android/incallui/res/values-eu/strings.xml
index 0d3ce76e4..4db9e10fe 100644
--- a/java/com/android/incallui/res/values-eu/strings.xml
+++ b/java/com/android/incallui/res/values-eu/strings.xml
@@ -37,49 +37,28 @@
<string name="notification_ongoing_work_call_wifi" msgid="6769311641293583197">"Wi-Fi bidezko laneko dei bat abian da"</string>
<string name="notification_on_hold" msgid="7141827443379205682">"Zain"</string>
<string name="notification_incoming_call" msgid="7520580807513849283">"Sarrerako deia"</string>
- <!-- no translation found for notification_incoming_call_with_photo (4360505044807517422) -->
- <skip />
- <!-- no translation found for notification_incoming_call_with_message (5608687985694956601) -->
- <skip />
- <!-- no translation found for notification_incoming_call_with_location (4519498445081598767) -->
- <skip />
- <!-- no translation found for notification_incoming_call_with_photo_message (316806247057497525) -->
- <skip />
- <!-- no translation found for notification_incoming_call_with_photo_location (3523930283842222367) -->
- <skip />
- <!-- no translation found for notification_incoming_call_with_message_location (319374298517482028) -->
- <skip />
- <!-- no translation found for notification_incoming_call_with_photo_message_location (596658237891406809) -->
- <skip />
- <!-- no translation found for notification_incoming_call_attachments (3708414495376236948) -->
- <skip />
- <!-- no translation found for important_notification_incoming_call (2867013954509930989) -->
- <skip />
- <!-- no translation found for important_notification_incoming_call_with_photo (4908333121583658560) -->
- <skip />
- <!-- no translation found for important_notification_incoming_call_with_message (1614505248246685319) -->
- <skip />
- <!-- no translation found for important_notification_incoming_call_with_location (7387284065036564352) -->
- <skip />
- <!-- no translation found for important_notification_incoming_call_with_photo_message (4577220919701434817) -->
- <skip />
- <!-- no translation found for important_notification_incoming_call_with_photo_location (7172208615619394502) -->
- <skip />
- <!-- no translation found for important_notification_incoming_call_with_message_location (7244079127080064796) -->
- <skip />
- <!-- no translation found for important_notification_incoming_call_with_photo_message_location (513692941317253479) -->
- <skip />
- <!-- no translation found for important_notification_incoming_call_attachments (4594375776340303751) -->
- <skip />
+ <string name="notification_incoming_call_with_photo" msgid="4360505044807517422">"Jasotako deia, argazkia duena"</string>
+ <string name="notification_incoming_call_with_message" msgid="5608687985694956601">"Jasoka deia, mezua duena"</string>
+ <string name="notification_incoming_call_with_location" msgid="4519498445081598767">"Jasotako deia, kokapena duena"</string>
+ <string name="notification_incoming_call_with_photo_message" msgid="316806247057497525">"Jasotako deia, argazkia eta mezua dituena"</string>
+ <string name="notification_incoming_call_with_photo_location" msgid="3523930283842222367">"Jasotako deia, argazkia eta kokapena dituena"</string>
+ <string name="notification_incoming_call_with_message_location" msgid="319374298517482028">"Jasotako deia, mezua eta kokapena dituena"</string>
+ <string name="notification_incoming_call_with_photo_message_location" msgid="596658237891406809">"Jasotako deia, argazkia, mezua eta kokap. dituena"</string>
+ <string name="notification_incoming_call_attachments" msgid="3708414495376236948">"Jasotako deia, eranskinak dituena"</string>
+ <string name="important_notification_incoming_call" msgid="2867013954509930989">"Jasotako dei garrantzitsua"</string>
+ <string name="important_notification_incoming_call_with_photo" msgid="4908333121583658560">"Jasotako dei garrantzitsua, argazkia duena"</string>
+ <string name="important_notification_incoming_call_with_message" msgid="1614505248246685319">"Jasotako dei garrantzitsua, mezua duena"</string>
+ <string name="important_notification_incoming_call_with_location" msgid="7387284065036564352">"Jasotako dei garrantzitsua, kokapena duena"</string>
+ <string name="important_notification_incoming_call_with_photo_message" msgid="4577220919701434817">"Jasotako dei garrantz., argazkia eta mezua dituena"</string>
+ <string name="important_notification_incoming_call_with_photo_location" msgid="7172208615619394502">"Jasotako dei garrantz., argazkia eta kok. dituena"</string>
+ <string name="important_notification_incoming_call_with_message_location" msgid="7244079127080064796">"Jasotako dei garrantz., mezua eta kokapena dituena"</string>
+ <string name="important_notification_incoming_call_with_photo_message_location" msgid="513692941317253479">"Jasotako dei garrant., arg., mez. eta kok. dituena"</string>
+ <string name="important_notification_incoming_call_attachments" msgid="4594375776340303751">"Jasotako dei garrantzitsua, eranskinak dituena"</string>
<string name="notification_incoming_work_call" msgid="5291275092734261918">"Laneko dei bat jaso da"</string>
<string name="notification_incoming_call_wifi" msgid="1039173395425774684">"Sarrerako Wi-Fi deia"</string>
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Wi-Fi bidezko laneko dei bat jaso da"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Ustezko spam-deia jaso duzu"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Sarrerako bideo-eskaera"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Ahots-mezu berria"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Ahots-mezu berriak (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Markatu <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Erantzungailuaren zenbakia ezezaguna da"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Ez dago zerbitzurik"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Hautatutako sarea (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) ez dago erabilgarri"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Erantzun"</string>
diff --git a/java/com/android/incallui/res/values-fa/strings.xml b/java/com/android/incallui/res/values-fa/strings.xml
index bce99b7f3..f816bd063 100644
--- a/java/com/android/incallui/res/values-fa/strings.xml
+++ b/java/com/android/incallui/res/values-fa/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"‏تماس کاری Wi-Fi ورودی"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"تماس هرزنامه احتمالی ورودی"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"درخواست تماس ویدئویی ورودی"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"پست صوتی جدید"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"پست صوتی جدید (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"شماره گیری <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"شماره پست صوتی ناشناس"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"بدون سرویس"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"شبکه انتخابی (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) قابل دسترس نیست"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"پاسخ"</string>
diff --git a/java/com/android/incallui/res/values-fi/strings.xml b/java/com/android/incallui/res/values-fi/strings.xml
index 57b4449ee..995e7a328 100644
--- a/java/com/android/incallui/res/values-fi/strings.xml
+++ b/java/com/android/incallui/res/values-fi/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Saapuva Wi-Fi-työpuhelu"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Tämä puhelu saattaa olla häirikköpuhelu."</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Saapuva videopyyntö"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Uusia viestejä vastaajassa"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Uusia viestejä vastaajassa (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Soita numeroon <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Puhelinvastaajan numero tuntematon"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Katvealueella"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Valittu verkko (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) ei käytettävissä."</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Vastaa"</string>
diff --git a/java/com/android/incallui/res/values-fr-rCA/strings.xml b/java/com/android/incallui/res/values-fr-rCA/strings.xml
index b0b01fc18..6f4d8daa4 100644
--- a/java/com/android/incallui/res/values-fr-rCA/strings.xml
+++ b/java/com/android/incallui/res/values-fr-rCA/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Appel Wi-Fi entrant - travail"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"L\'appel entrant est suspect"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Demande de vidéo reçue"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Nouveau message vocal"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Nouveaux messages vocaux (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Composer <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Numéro de messagerie vocale inconnu"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Aucun service"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Réseau sélectionné (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) non disponible"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Répondre"</string>
diff --git a/java/com/android/incallui/res/values-fr/strings.xml b/java/com/android/incallui/res/values-fr/strings.xml
index 0a9d4a0fe..c77fc190e 100644
--- a/java/com/android/incallui/res/values-fr/strings.xml
+++ b/java/com/android/incallui/res/values-fr/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Appel Wi-Fi professionnel entrant"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Appel entrant indésirable suspecté"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Demande de vidéo reçue"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Nouveau message vocal"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Nouveaux messages vocaux (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Composer le <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Numéro de messagerie vocale inconnu"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Aucun service"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Réseau sélectionné (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) non disponible"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Répondre"</string>
diff --git a/java/com/android/incallui/res/values-gl/strings.xml b/java/com/android/incallui/res/values-gl/strings.xml
index 675a77ff0..53278e58e 100644
--- a/java/com/android/incallui/res/values-gl/strings.xml
+++ b/java/com/android/incallui/res/values-gl/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Chamada wifi de traballo entrante"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Chamada entrante sospeitosa de spam"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Solicitude de vídeo entrante"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Novo correo de voz"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Novo correo de voz (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Marcar o <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Número de correo de voz descoñecido"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Sen servizo"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Rede seleccionada (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) non dispoñible"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Responder"</string>
diff --git a/java/com/android/incallui/res/values-gu/strings.xml b/java/com/android/incallui/res/values-gu/strings.xml
index 9088624f6..8b1ebe8e0 100644
--- a/java/com/android/incallui/res/values-gu/strings.xml
+++ b/java/com/android/incallui/res/values-gu/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"ઇનકમિંગ Wi-Fi કાર્ય કૉલ"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"ઇનકમિંગ શંકાસ્પદ સ્પામ કૉલ"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"આવનાર વિડિઓ વિનંતી"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"નવો વૉઇસમેઇલ"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"નવો વૉઇસમેઇલ (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> ડાયલ કરો"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"વૉઇસમેઇલ નંબર અજાણ"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"કોઈ સેવા નથી"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"પસંદ કરેલ નેટવર્ક (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) અનુપલબ્ધ"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"જવાબ"</string>
diff --git a/java/com/android/incallui/res/values-hi/strings.xml b/java/com/android/incallui/res/values-hi/strings.xml
index 8d5e1bb5f..09563dfc4 100644
--- a/java/com/android/incallui/res/values-hi/strings.xml
+++ b/java/com/android/incallui/res/values-hi/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"कार्यस्थल की वाई-फ़ाई आवक कॉल"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"संदिग्ध आवक स्पैम कॉल"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"इनकमिंग वीडियो अनुरोध"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"नया वॉयस मेल"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"नई वॉयस मेल (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> डायल करें"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"वॉयस मेल नंबर अज्ञात"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"कोई सेवा नहीं"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"चयनित नेटवर्क (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) अनुपलब्ध"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"उत्तर"</string>
diff --git a/java/com/android/incallui/res/values-hr/strings.xml b/java/com/android/incallui/res/values-hr/strings.xml
index ff43e6836..6b07bed46 100644
--- a/java/com/android/incallui/res/values-hr/strings.xml
+++ b/java/com/android/incallui/res/values-hr/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Dolazni poslovni Wi-Fi poziv"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Mogući neželjeni dolazni poziv"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Dolazni zahtjev za videopoziv"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Nova govorna pošta"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Nova govorna pošta (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Biraj <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Nepoznat je broj govorne pošte"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Nema usluge"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Odabrana mreža (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) je onemogućena"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Odgovori"</string>
diff --git a/java/com/android/incallui/res/values-hu/strings.xml b/java/com/android/incallui/res/values-hu/strings.xml
index 3fad07190..08d374b41 100644
--- a/java/com/android/incallui/res/values-hu/strings.xml
+++ b/java/com/android/incallui/res/values-hu/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Bejövő munkahelyi hívás Wi-Fin keresztül"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Bejövő gyanús spamhívás"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Bejövő videokérés"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Új hangposta"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Új hangpostaüzenet (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> tárcsázása"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"A hangposta száma ismeretlen"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Nincs szolgáltatás"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"A kiválasztott hálózat (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) nem érhető el"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Fogadás"</string>
diff --git a/java/com/android/incallui/res/values-hy/strings.xml b/java/com/android/incallui/res/values-hy/strings.xml
index aabeae2d5..759581bcc 100644
--- a/java/com/android/incallui/res/values-hy/strings.xml
+++ b/java/com/android/incallui/res/values-hy/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Մուտքային աշխատանքային Wi-Fi զանգ"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Մուտքային զանգը հավանաբար լցոն է"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Մուտքային տեսազանգի հայցում"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Նոր ձայնային հաղորդագրություն"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Նոր ձայնային նամակ (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Զանգել <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Ձայնային փոստի համարն անհայտ է"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Ծառայություններ չկան"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Ընտրված ցանցը (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) անհասանելի է"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Պատասխանել"</string>
diff --git a/java/com/android/incallui/res/values-in/strings.xml b/java/com/android/incallui/res/values-in/strings.xml
index e2b040540..279e72d21 100644
--- a/java/com/android/incallui/res/values-in/strings.xml
+++ b/java/com/android/incallui/res/values-in/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Panggilan telepon Wi-Fi kerja yang masuk"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Panggilan masuk yang diduga spam"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Permintaan video masuk"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Kotak pesan baru"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Kotak pesan baru (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Telepon <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Nomor kotak pesan tidak dikenal"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Tidak ada layanan"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Jaringan yang dipilih (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) tidak tersedia"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Jawab"</string>
diff --git a/java/com/android/incallui/res/values-is/strings.xml b/java/com/android/incallui/res/values-is/strings.xml
index ede4a4cbe..795e952c6 100644
--- a/java/com/android/incallui/res/values-is/strings.xml
+++ b/java/com/android/incallui/res/values-is/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Vinnusímtal berst um Wi-Fi"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Símtal sem berst er hugsanlega úr ruslnúmeri"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Myndbeiðni berst"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Ný skilaboð í talhólfinu"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Ný skilaboð í talhólfinu (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Hringja í <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Talhólfsnúmer ekki þekkt"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Ekkert símasamband"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Valið símkerfi (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) er ekki tiltækt"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Svara"</string>
diff --git a/java/com/android/incallui/res/values-it/strings.xml b/java/com/android/incallui/res/values-it/strings.xml
index 8e872b8d5..836b93452 100644
--- a/java/com/android/incallui/res/values-it/strings.xml
+++ b/java/com/android/incallui/res/values-it/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Chiamata di lavoro in arrivo tramite Wi-Fi"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Chiamata di presunto spam in arrivo"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Richiesta video in arrivo"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Nuovo msg vocale"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Nuovo msg vocale (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Componi <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Numero segreteria sconosciuto"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Nessun servizio"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Rete selezionata (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) non disponibile"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Rispondi"</string>
diff --git a/java/com/android/incallui/res/values-iw/strings.xml b/java/com/android/incallui/res/values-iw/strings.xml
index 6310aa1ca..195cb0f25 100644
--- a/java/com/android/incallui/res/values-iw/strings.xml
+++ b/java/com/android/incallui/res/values-iw/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"‏שיחת עבודה נכנסת ברשת WiFi"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"השיחה הנכנסת חשודה כספאם"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"בקשת וידאו נכנסת"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"דואר קולי חדש"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"דואר קולי חדש (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"‏חייג ‎<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>‎"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"המספר של הדואר הקולי אינו ידוע"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"אין שירות"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"הרשת שנבחרה (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) לא זמינה"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"ענה"</string>
diff --git a/java/com/android/incallui/res/values-ja/strings.xml b/java/com/android/incallui/res/values-ja/strings.xml
index b621250e9..0e186fa3d 100644
--- a/java/com/android/incallui/res/values-ja/strings.xml
+++ b/java/com/android/incallui/res/values-ja/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"仕事の Wi-Fi 通話が着信中"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"迷惑電話の疑いがある通話を着信しています"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"ビデオハングアウトリクエスト着信"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"新しいボイスメール"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"新しいボイスメール(<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>にダイヤル"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"ボイスメールの番号が不明です"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"通信サービスなし"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"選択したネットワーク(<xliff:g id="OPERATOR_NAME">%s</xliff:g>)が利用できません"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"電話に出る"</string>
diff --git a/java/com/android/incallui/res/values-ka/strings.xml b/java/com/android/incallui/res/values-ka/strings.xml
index 1bb9ae79d..6c46bd0c7 100644
--- a/java/com/android/incallui/res/values-ka/strings.xml
+++ b/java/com/android/incallui/res/values-ka/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"შემომავალი Wi-Fi ზარი (სამსახური)"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"შემომავალი ზარი - სავარაუდოდ სპამი"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"შემომავალი ვიდეოს მოთხოვნა"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"ახალი ხმოვანი ფოსტა"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"ახალი ხმოვანი ფოსტა (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>-ზე დარეკვა"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"ხმოვანი ფოსტის ნომერი უცნობია"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"სერვისი არ არის"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"ხელმისაწვდომია არჩეული ქსელი (<xliff:g id="OPERATOR_NAME">%s</xliff:g>)"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"პასუხი"</string>
diff --git a/java/com/android/incallui/res/values-kk/strings.xml b/java/com/android/incallui/res/values-kk/strings.xml
index a08bf54bc..310ba4d28 100644
--- a/java/com/android/incallui/res/values-kk/strings.xml
+++ b/java/com/android/incallui/res/values-kk/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Кіріс Wi-Fi жұмыс қоңырауы"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Кіріс қоңырауы спам болуы мүмкін"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Кіріс бейне сұрау"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Жаңа дауыс хабары"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"(<xliff:g id="COUNT">%d</xliff:g>) дауыс хабары"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> нөмірін теру"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Дауыс хабарының нөмірі белгісіз"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Қызмет көрсетілмейді"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Таңдалған (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) желісі қол жетімсіз"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Жауап"</string>
diff --git a/java/com/android/incallui/res/values-km/strings.xml b/java/com/android/incallui/res/values-km/strings.xml
index 6b2c65e8a..4fbafef71 100644
--- a/java/com/android/incallui/res/values-km/strings.xml
+++ b/java/com/android/incallui/res/values-km/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"កំពុងហៅចូលពីកន្លែងការងារតាម Wi-Fi"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"ការ​ហៅ​បន្លំ​​ចូល​​​ដែល​សង្ស័យ"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"សំណើ​ការ​ហៅ​ជា​វីដេអូ​ចូល"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"សារ​ជា​សំឡេង​ថ្មី"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"សារ​ជា​សំឡេង​ថ្មី (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"ចុច <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"មិន​ស្គាល់​ចំនួន​សារ​ជា​សំឡេង"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"គ្មាន​សេវា"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"បណ្ដាញ​ដែល​បាន​ជ្រើស ( <xliff:g id="OPERATOR_NAME">%s</xliff:g> ) មិន​អាច​ប្រើ​បាន​ទេ"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"ឆ្លើយតប"</string>
diff --git a/java/com/android/incallui/res/values-kn/strings.xml b/java/com/android/incallui/res/values-kn/strings.xml
index 7559d1b61..5d47c7e0e 100644
--- a/java/com/android/incallui/res/values-kn/strings.xml
+++ b/java/com/android/incallui/res/values-kn/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"ಒಳಬರುವ ವೈ-ಫೈ ಕೆಲಸದ ಕರೆ"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"ಒಳಬರುವ ಶಂಕಿತ ಸ್ಪ್ಯಾಮ್ ಕರೆ"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"ಒಳಬರುವ ವೀಡಿಯೊ ವಿನಂತಿ"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"ಹೊಸ ಧ್ವನಿಮೇಲ್‌"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"ಹೊಸ ಧ್ವನಿಮೇಲ್‌‌ (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> ಗೆ ಡಯಲ್‌‌ ಮಾಡು"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"ಅಪರಿಚಿತ ಧ್ವನಿಮೇಲ್‌ ಸಂಖ್ಯೆ"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"ಯಾವುದೇ ಸೇವೆಯಿಲ್ಲ"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"ಆಯ್ಕೆಮಾಡಿದ (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) ನೆಟ್‌ವರ್ಕ್‌ ಲಭ್ಯವಿಲ್ಲ"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"ಉತ್ತರ"</string>
diff --git a/java/com/android/incallui/res/values-ko/strings.xml b/java/com/android/incallui/res/values-ko/strings.xml
index 3778b585d..44c53389a 100644
--- a/java/com/android/incallui/res/values-ko/strings.xml
+++ b/java/com/android/incallui/res/values-ko/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"수신 Wi-Fi 업무 전화"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"의심스러운 스팸 발신자로부터 온 전화"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"수신 동영상 요청"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"새 음성사서함"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"새 음성사서함(<xliff:g id="COUNT">%d</xliff:g>개)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>(으)로 전화걸기"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"알 수 없는 음성사서함 번호"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"서비스 불가"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"선택한 네트워크(<xliff:g id="OPERATOR_NAME">%s</xliff:g>)를 사용할 수 없음"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"통화"</string>
diff --git a/java/com/android/incallui/res/values-ky/strings.xml b/java/com/android/incallui/res/values-ky/strings.xml
index e010022f3..0f8ee3cd8 100644
--- a/java/com/android/incallui/res/values-ky/strings.xml
+++ b/java/com/android/incallui/res/values-ky/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Жумуш боюнча келип жаткан Wi-Fi чалуу"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Келип жаткан чалуу спам окшойт"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Келип жаткан видео сурамы"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Жаңы үн почтасы"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Жаңы үн почтасы (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> номерин терүү"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Үн почтасынын номери белгисиз"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Байланыш жок"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Тандалган тармак (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) жеткиликсиз"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Жооп берүү"</string>
diff --git a/java/com/android/incallui/res/values-lo/strings.xml b/java/com/android/incallui/res/values-lo/strings.xml
index fcd7f5fb6..56335d416 100644
--- a/java/com/android/incallui/res/values-lo/strings.xml
+++ b/java/com/android/incallui/res/values-lo/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"ສາຍໂທເຂົ້າ Wi-Fi ຈາກບ່ອນເຮັດວຽກ"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"ມີການໂທທີ່ຄາດວ່າເປັນສະແປມໂທເຂົ້າມາ"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"​ຄຳ​ຮ້ອງ​ຂໍ​ວິ​ດີ​ໂອ​ເຂົ້າ​ມາ"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"ຂໍ້ຄວາມສຽງໃໝ່"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"ຂໍ້ຄວາມສຽງໃໝ່ (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"ໂທຫາ <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"ບໍ່ຮູ້ຈັກເບີຂໍ້ຄວາມສຽງ"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"ບໍ່ມີບໍລິການ"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"ບໍ່ສາມາດໃຊ້ເຄືອຂ່າຍທີ່ເລືອກ (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) ໄດ້"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"ຄໍາ​ຕອບ"</string>
diff --git a/java/com/android/incallui/res/values-lt/strings.xml b/java/com/android/incallui/res/values-lt/strings.xml
index 7d79fce96..4d4a0c098 100644
--- a/java/com/android/incallui/res/values-lt/strings.xml
+++ b/java/com/android/incallui/res/values-lt/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Gaunamasis „Wi-Fi“ darbo skambutis"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Gaunamasis įtartinas šlamšto skambutis"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Gaunama vaizdo skambučio užklausa"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Naujas balso pašto pranešimas"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Naujas balso pašto pranešimas (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Rinkti <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Nežinomas balso pašto numeris"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Nėra paslaugos"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Pasirinktas tinklas (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) negalimas"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Atsakyti"</string>
diff --git a/java/com/android/incallui/res/values-lv/strings.xml b/java/com/android/incallui/res/values-lv/strings.xml
index f144a9a5d..9be46c4fd 100644
--- a/java/com/android/incallui/res/values-lv/strings.xml
+++ b/java/com/android/incallui/res/values-lv/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Ienākošs darba Wi-Fi zvans"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Ienākošs, iespējams, nevēlams zvans"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Ienākošs video pieprasījums"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Jauns balss pasts"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Jauns balss pasts (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Sastādiet šādu numuru: <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Balss pasta numurs nav zināms."</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Nav pakalpojuma"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Atlasītais tīkls (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) nav pieejams"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Atbildēt"</string>
diff --git a/java/com/android/incallui/res/values-mk/strings.xml b/java/com/android/incallui/res/values-mk/strings.xml
index 4bc848ebe..8c641fb90 100644
--- a/java/com/android/incallui/res/values-mk/strings.xml
+++ b/java/com/android/incallui/res/values-mk/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Дојдовен работен повик преку Wi-Fi"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Дојдовниот повик може да е спам"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Дојдовно побарување за видео"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Нова говорна пошта"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Нова говорна пошта (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Бирај <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Бројот на говорна пошта е непознат"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Нема услуга"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Одбраната мрежа (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) е недостапна"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Одговори"</string>
diff --git a/java/com/android/incallui/res/values-ml/strings.xml b/java/com/android/incallui/res/values-ml/strings.xml
index 4364f8a3d..e207ccd45 100644
--- a/java/com/android/incallui/res/values-ml/strings.xml
+++ b/java/com/android/incallui/res/values-ml/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"ഇൻകമിംഗ് വൈഫൈ ഔദ്യോഗിക കോൾ"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"സംശയാസ്‌പദമായ ഇൻകമിംഗ് സ്‌പാം കോൾ"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"ഇൻകമിംഗ് വീഡിയോ അഭ്യർത്ഥന"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"പുതിയ വോയ്‌സ്‌മെയിൽ"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"പുതിയ വോയ്‌സ്‌മെയിൽ (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> ഡയൽ ചെയ്യുക"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"വോയ്‌സ്‌മെയിൽ നമ്പർ അജ്ഞാതമാണ്"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"സേവനമില്ല"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"തിരഞ്ഞെടുത്ത നെറ്റ്‌വർക്ക് (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) ലഭ്യമല്ല"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"മറുപടി"</string>
diff --git a/java/com/android/incallui/res/values-mn/strings.xml b/java/com/android/incallui/res/values-mn/strings.xml
index 25d788dd4..0e269170b 100644
--- a/java/com/android/incallui/res/values-mn/strings.xml
+++ b/java/com/android/incallui/res/values-mn/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Ирж буй Wi-Fi албаны дуудлага"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Орж ирсэн сэжигтэй спам дуудлага"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Ирж буй видео хүсэлт"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Шинэ дуут шуудан"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Шинэ дуут шуудан (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> руу залгах"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Дуут шуудангийн дугаар тодорхойгүй"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Үйлчилгээ байхгүй"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Сонгосон сүлжээ (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) ашиглах боломжгүй"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Хариулах"</string>
diff --git a/java/com/android/incallui/res/values-mr/strings.xml b/java/com/android/incallui/res/values-mr/strings.xml
index d966e1476..c56c61012 100644
--- a/java/com/android/incallui/res/values-mr/strings.xml
+++ b/java/com/android/incallui/res/values-mr/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"येणारा वाय-फाय कार्य कॉल"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"येणारा संशयित स्पॅम कॉल"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"येणारी व्हिडिओ विनंती"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"नवीन व्हॉइसमेल"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"नवीन व्हॉइसमेल (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> डायल करा"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"व्हॉइसमेल नंबर अज्ञात"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"सेवा नाही"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"निवडलेले नेटवर्क (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) अनुपलब्‍ध"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"उत्तर"</string>
diff --git a/java/com/android/incallui/res/values-ms/strings.xml b/java/com/android/incallui/res/values-ms/strings.xml
index 2268a5977..a5be5934d 100644
--- a/java/com/android/incallui/res/values-ms/strings.xml
+++ b/java/com/android/incallui/res/values-ms/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Panggilan masuk melalui Wi-Fi daripada tempat kerja"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Disyaki panggilan spam masuk"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Permintaan video masuk"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Mel suara baharu"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Mel suara baharu (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Dail <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Nombor mel suara tidak dikenali"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Tiada perkhidmatan"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Rangkaian pilihan (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) tidak tersedia"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Jawapan"</string>
diff --git a/java/com/android/incallui/res/values-my/strings.xml b/java/com/android/incallui/res/values-my/strings.xml
index a1c8bea6a..5cca49874 100644
--- a/java/com/android/incallui/res/values-my/strings.xml
+++ b/java/com/android/incallui/res/values-my/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Wi-Fi အလုပ်မှ အဝင် ခေါ်ဆိုမှု"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"ခေါ်နေသော မသင်္ကာဖွယ်ရာ စပမ်းခေါ်ဆိုမှု"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"အသံ ခေါ်ဆိုမှုအဖြစ် တောင်းဆိုမှု"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"အသံမေးလ်အသစ်"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"အသံစာ အသစ် (<xliff:g id="COUNT">%d</xliff:g>) စောင်"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> ကိုခေါ်ပါ"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"အသံဖုန်းခေါ်မှုနံပါတ် မသိပါ"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"ဝန်ဆောင်မှု မရှိပါ"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"ရွေးချယ်ထားသော ကွန်ရက် (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) မရရှိနိုင်ပါ"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"အဖြေ"</string>
diff --git a/java/com/android/incallui/res/values-nb/strings.xml b/java/com/android/incallui/res/values-nb/strings.xml
index bb2cf692d..d0883a2cc 100644
--- a/java/com/android/incallui/res/values-nb/strings.xml
+++ b/java/com/android/incallui/res/values-nb/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Innkommende jobbanrop via Wi-Fi"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Innkommende anrop fra en mulig useriøs oppringer"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Innkommende videoforespørsel"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Ny talemelding"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Nye talemeldinger (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Ring <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Mangler nummer til talepostkasse"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Ingen tjeneste"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Valgt nettverk (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) er ikke tilgjengelig"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Svar"</string>
diff --git a/java/com/android/incallui/res/values-ne/strings.xml b/java/com/android/incallui/res/values-ne/strings.xml
index 5b5ff1bb5..b5894797c 100644
--- a/java/com/android/incallui/res/values-ne/strings.xml
+++ b/java/com/android/incallui/res/values-ne/strings.xml
@@ -37,32 +37,28 @@
<string name="notification_ongoing_work_call_wifi" msgid="6769311641293583197">"चालू रहेको Wi-Fi कार्यको कल"</string>
<string name="notification_on_hold" msgid="7141827443379205682">"होल्डमा"</string>
<string name="notification_incoming_call" msgid="7520580807513849283">"आगमन कल"</string>
- <string name="notification_incoming_call_with_photo" msgid="4360505044807517422">"तस्बिर सहितको आगमन कल"</string>
- <string name="notification_incoming_call_with_message" msgid="5608687985694956601">"सन्देश सहितको आगमन कल"</string>
- <string name="notification_incoming_call_with_location" msgid="4519498445081598767">"स्थान सहितको आगमन कल"</string>
- <string name="notification_incoming_call_with_photo_message" msgid="316806247057497525">"तस्बिर र सन्देश सहितको आगमन कल"</string>
- <string name="notification_incoming_call_with_photo_location" msgid="3523930283842222367">"तस्बिर र स्थान सहितको आगमन कल"</string>
- <string name="notification_incoming_call_with_message_location" msgid="319374298517482028">"सन्देश र स्थान सहितको आगमन कल"</string>
- <string name="notification_incoming_call_with_photo_message_location" msgid="596658237891406809">"तस्बिर, सन्देश र स्थान सहितको आगमन कल"</string>
- <string name="notification_incoming_call_attachments" msgid="3708414495376236948">"समावेश गरिएको वस्तु सहितको आगमन कल"</string>
+ <string name="notification_incoming_call_with_photo" msgid="4360505044807517422">"तस्बिरसहितको आगमन कल"</string>
+ <string name="notification_incoming_call_with_message" msgid="5608687985694956601">"सन्देशसहितको आगमन कल"</string>
+ <string name="notification_incoming_call_with_location" msgid="4519498445081598767">"स्थानसहितको आगमन कल"</string>
+ <string name="notification_incoming_call_with_photo_message" msgid="316806247057497525">"तस्बिर र सन्देशसहितको आगमन कल"</string>
+ <string name="notification_incoming_call_with_photo_location" msgid="3523930283842222367">"तस्बिर र स्थानसहितको आगमन कल"</string>
+ <string name="notification_incoming_call_with_message_location" msgid="319374298517482028">"सन्देश र स्थानसहितको आगमन कल"</string>
+ <string name="notification_incoming_call_with_photo_message_location" msgid="596658237891406809">"तस्बिर, सन्देश र स्थानसहितको आगमन कल"</string>
+ <string name="notification_incoming_call_attachments" msgid="3708414495376236948">"समावेश गरिएको वस्तुसहितको आगमन कल"</string>
<string name="important_notification_incoming_call" msgid="2867013954509930989">"महत्त्वपूर्ण आगमन कल"</string>
- <string name="important_notification_incoming_call_with_photo" msgid="4908333121583658560">"तस्बिर सहितको महत्त्वपूर्ण आगमन कल"</string>
- <string name="important_notification_incoming_call_with_message" msgid="1614505248246685319">"सन्देश सहितको महत्त्वपूर्ण आगमन कल"</string>
- <string name="important_notification_incoming_call_with_location" msgid="7387284065036564352">"स्थान सहितको महत्त्वपूर्ण आगमन कल"</string>
- <string name="important_notification_incoming_call_with_photo_message" msgid="4577220919701434817">"तस्बिर र सन्देश सहितको महत्त्वपूर्ण आगमन कल"</string>
- <string name="important_notification_incoming_call_with_photo_location" msgid="7172208615619394502">"तस्बिर र स्थान सहितको महत्त्वपूर्ण आगमन कल"</string>
- <string name="important_notification_incoming_call_with_message_location" msgid="7244079127080064796">"सन्देश र स्थान सहितको महत्त्वपूर्ण आगमन कल"</string>
- <string name="important_notification_incoming_call_with_photo_message_location" msgid="513692941317253479">"तस्बिर, सन्देश र स्थान सहितको महत्त्वपूर्ण आगमन कल"</string>
- <string name="important_notification_incoming_call_attachments" msgid="4594375776340303751">"समावेश गरिएको वस्तु सहितको महत्त्वपूर्ण आगमन कल"</string>
+ <string name="important_notification_incoming_call_with_photo" msgid="4908333121583658560">"तस्बिरसहितको महत्त्वपूर्ण आगमन कल"</string>
+ <string name="important_notification_incoming_call_with_message" msgid="1614505248246685319">"सन्देशसहितको महत्त्वपूर्ण आगमन कल"</string>
+ <string name="important_notification_incoming_call_with_location" msgid="7387284065036564352">"स्थानसहितको महत्त्वपूर्ण आगमन कल"</string>
+ <string name="important_notification_incoming_call_with_photo_message" msgid="4577220919701434817">"तस्बिर र सन्देशसहितको महत्त्वपूर्ण आगमन कल"</string>
+ <string name="important_notification_incoming_call_with_photo_location" msgid="7172208615619394502">"तस्बिर र स्थानसहितको महत्त्वपूर्ण आगमन कल"</string>
+ <string name="important_notification_incoming_call_with_message_location" msgid="7244079127080064796">"सन्देश र स्थानसहितको महत्त्वपूर्ण आगमन कल"</string>
+ <string name="important_notification_incoming_call_with_photo_message_location" msgid="513692941317253479">"तस्बिर, सन्देश र स्थानसहितको महत्त्वपूर्ण आगमन कल"</string>
+ <string name="important_notification_incoming_call_attachments" msgid="4594375776340303751">"समावेश गरिएको वस्तुसहितको महत्त्वपूर्ण आगमन कल"</string>
<string name="notification_incoming_work_call" msgid="5291275092734261918">"आगमन कार्यको कल"</string>
<string name="notification_incoming_call_wifi" msgid="1039173395425774684">"आगमन Wi-Fi कल"</string>
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"आगमन Wi-Fi कार्यको कल"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"शंकास्पद आगमन स्प्याम कल"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"आगमन भिडियो अनुरोध"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"नयाँ भ्वाइस मेल"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"नयाँ भ्वाइसमेल ( <xliff:g id="COUNT">%d</xliff:g> )"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>मा डायल गर्नुहोस्"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"अज्ञात भवाइसमेल नम्बर"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"सेवा छैन"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"चयन गरिएको नेटवर्क ( <xliff:g id="OPERATOR_NAME">%s</xliff:g> ) अनुपलब्ध"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"उत्तर"</string>
diff --git a/java/com/android/incallui/res/values-nl/strings.xml b/java/com/android/incallui/res/values-nl/strings.xml
index 8601fe27e..930acdc86 100644
--- a/java/com/android/incallui/res/values-nl/strings.xml
+++ b/java/com/android/incallui/res/values-nl/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Inkomende zakelijke oproep via wifi"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Inkomende vermoedelijke spamoproep"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Binnenkomend videoverzoek"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Nieuwe voicemail"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Nieuwe voicemail (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> bellen"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Voicemailnummer onbekend"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Geen service"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Geselecteerd netwerk (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) niet beschikbaar"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Antwoord"</string>
diff --git a/java/com/android/incallui/res/values-no/strings.xml b/java/com/android/incallui/res/values-no/strings.xml
index bb2cf692d..d0883a2cc 100644
--- a/java/com/android/incallui/res/values-no/strings.xml
+++ b/java/com/android/incallui/res/values-no/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Innkommende jobbanrop via Wi-Fi"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Innkommende anrop fra en mulig useriøs oppringer"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Innkommende videoforespørsel"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Ny talemelding"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Nye talemeldinger (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Ring <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Mangler nummer til talepostkasse"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Ingen tjeneste"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Valgt nettverk (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) er ikke tilgjengelig"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Svar"</string>
diff --git a/java/com/android/incallui/res/values-pa/strings.xml b/java/com/android/incallui/res/values-pa/strings.xml
index ebd8a25e6..22cd7da3b 100644
--- a/java/com/android/incallui/res/values-pa/strings.xml
+++ b/java/com/android/incallui/res/values-pa/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"ਕੰਮ ਸਬੰਧਿਤ ਆ ਰਹੀ Wi-Fi ਕਾਲ"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"ਸ਼ੱਕੀ ਸਪੈਮ ਕਾਲ ਆ ਰਹੀ ਹੈ"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"ਇਨਕਮਿੰਗ ਵੀਡੀਓ ਬੇਨਤੀ"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"ਨਵੀਂ ਵੌਇਸਮੇਲ"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"ਨਵੀਂ ਵੌਇਸਮੇਲ (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> ਡਾਇਲ ਕਰੋ"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"ਵੌਇਸਮੇਲ ਨੰਬਰ ਅਗਿਆਤ"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"ਕੋਈ ਸੇਵਾ ਨਹੀਂ"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"ਚੁਣੇ ਗਏ ਨੈਟਵਰਕ (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) ਅਣਉਪਲਬਧ"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"ਜਵਾਬ ਦਿਓ"</string>
diff --git a/java/com/android/incallui/res/values-pl/strings.xml b/java/com/android/incallui/res/values-pl/strings.xml
index 5f818ae7b..77c83399f 100644
--- a/java/com/android/incallui/res/values-pl/strings.xml
+++ b/java/com/android/incallui/res/values-pl/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Przychodzące połączenie służbowe przez Wi-Fi"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Przychodzące połączenie podejrzanie o spam"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Przychodzące żądanie wideo"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Nowa poczta głosowa"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Nowa poczta głosowa (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Zadzwoń do <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Nieznany numer poczty głosowej"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Brak usługi"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Wybrana sieć (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) jest niedostępna"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Odbierz"</string>
diff --git a/java/com/android/incallui/res/values-pt-rBR/strings.xml b/java/com/android/incallui/res/values-pt-rBR/strings.xml
index 29254dc68..b0e46dfa3 100644
--- a/java/com/android/incallui/res/values-pt-rBR/strings.xml
+++ b/java/com/android/incallui/res/values-pt-rBR/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Chamada de trabalho recebida por Wi-Fi"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Chamada recebida suspeita (spam)"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Recebendo solicitação de vídeo"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Novo correio de voz"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Novo correio de voz (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Discar <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Número correio de voz desconhecido"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Sem serviço"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"A rede selecionada (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) não está disponível"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Atender"</string>
diff --git a/java/com/android/incallui/res/values-pt-rPT/strings.xml b/java/com/android/incallui/res/values-pt-rPT/strings.xml
index 7ec6bfece..b42b0e56c 100644
--- a/java/com/android/incallui/res/values-pt-rPT/strings.xml
+++ b/java/com/android/incallui/res/values-pt-rPT/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Chamada de trabalho recebida por Wi-Fi"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"A receber chamada spam suspeita"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Pedido de vídeo recebido"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Novo correio de voz"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Novo correio de voz (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Marcar <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Número do correio de voz desconhecido"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Nenhum serviço"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Rede selecionada (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) indisponível"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Atender"</string>
diff --git a/java/com/android/incallui/res/values-pt/strings.xml b/java/com/android/incallui/res/values-pt/strings.xml
index 29254dc68..b0e46dfa3 100644
--- a/java/com/android/incallui/res/values-pt/strings.xml
+++ b/java/com/android/incallui/res/values-pt/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Chamada de trabalho recebida por Wi-Fi"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Chamada recebida suspeita (spam)"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Recebendo solicitação de vídeo"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Novo correio de voz"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Novo correio de voz (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Discar <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Número correio de voz desconhecido"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Sem serviço"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"A rede selecionada (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) não está disponível"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Atender"</string>
diff --git a/java/com/android/incallui/res/values-ro/strings.xml b/java/com/android/incallui/res/values-ro/strings.xml
index cd31f807b..db8be10e2 100644
--- a/java/com/android/incallui/res/values-ro/strings.xml
+++ b/java/com/android/incallui/res/values-ro/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Apel de serviciu prin Wi-Fi primit"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Un apel primit posibil spam"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Solicitare de trecere la apel video"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Mesaj vocal nou"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Mesaj vocal nou (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Apelați <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Număr mesagerie vocală necunoscut"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Fără serviciu"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Rețeaua selectată (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) nu este disponibilă"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Răspundeți"</string>
diff --git a/java/com/android/incallui/res/values-ru/strings.xml b/java/com/android/incallui/res/values-ru/strings.xml
index fd0773daa..8fd924ec6 100644
--- a/java/com/android/incallui/res/values-ru/strings.xml
+++ b/java/com/android/incallui/res/values-ru/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Входящий Wi-Fi-звонок (работа)"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Входящий вызов: подозрение на спам"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Входящий видеовызов"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Новое сообщение голосовой почты"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Новое сообщение голосовой почты (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Позвонить <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Номер голосовой почты неизвестен"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Сеть не найдена"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Выбранная сеть (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) недоступна."</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Ответить"</string>
diff --git a/java/com/android/incallui/res/values-si/strings.xml b/java/com/android/incallui/res/values-si/strings.xml
index 1d24a5b9d..989879ae0 100644
--- a/java/com/android/incallui/res/values-si/strings.xml
+++ b/java/com/android/incallui/res/values-si/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"පැමිණෙන Wi-Fi කාර්යාල ඇමතුම"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"එන සැකසහිත අයාචිත තැපැල් ඇමතුම"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"පැමිණෙන වීඩියෝ ඉල්ලීම"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"නව හඬතැපෑල"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"නව හඬ තැපැල් (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> අමතන්න"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"හඬතැපැල් අංකය නොදනී"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"සේවාව නැත"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"තෝරා ඇති ජාලය (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) නොමැත"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"පිළිතුරු දෙන්න"</string>
diff --git a/java/com/android/incallui/res/values-sk/strings.xml b/java/com/android/incallui/res/values-sk/strings.xml
index 38326bc66..d09ba44d0 100644
--- a/java/com/android/incallui/res/values-sk/strings.xml
+++ b/java/com/android/incallui/res/values-sk/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Prichádzajúci pracovný hovor cez Wi-Fi"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Prichádzajúci hovor, pri ktorom je podozrenie, že ide o spam"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Prichádzajúca žiadosť o video"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Nová hlasová správa"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Nová hlasová správa (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Zavolať hlasovú schránku <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Číslo hlasovej schránky je neznáme"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Žiadny signál"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Vybratá sieť (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) nie je k dispozícii"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Prijať"</string>
diff --git a/java/com/android/incallui/res/values-sl/strings.xml b/java/com/android/incallui/res/values-sl/strings.xml
index 0b360d396..b083e1bae 100644
--- a/java/com/android/incallui/res/values-sl/strings.xml
+++ b/java/com/android/incallui/res/values-sl/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Dohodni delovni klic prek omrežja Wi-Fi"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Domnevno neželeni dohodni klic"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Dohodna zahteva za video"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Nova glasovna pošta"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Nova glasovna pošta (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Kliči <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Neznana številka glasovne pošte"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Ni storitve"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Izbrano omrežje (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) ni na voljo"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Odgovori"</string>
diff --git a/java/com/android/incallui/res/values-sq/strings.xml b/java/com/android/incallui/res/values-sq/strings.xml
index d1546530b..fd1964266 100644
--- a/java/com/android/incallui/res/values-sq/strings.xml
+++ b/java/com/android/incallui/res/values-sq/strings.xml
@@ -39,30 +39,26 @@
<string name="notification_incoming_call" msgid="7520580807513849283">"Telefonatë hyrëse"</string>
<string name="notification_incoming_call_with_photo" msgid="4360505044807517422">"Telefonatë hyrëse me fotografi"</string>
<string name="notification_incoming_call_with_message" msgid="5608687985694956601">"Telefonatë hyrëse me mesazh"</string>
- <string name="notification_incoming_call_with_location" msgid="4519498445081598767">"Telefonatë hyrëse me vendndodhjen"</string>
+ <string name="notification_incoming_call_with_location" msgid="4519498445081598767">"Telefonatë hyrëse me vendndodhje"</string>
<string name="notification_incoming_call_with_photo_message" msgid="316806247057497525">"Telefonatë hyrëse me fotografi dhe mesazh"</string>
- <string name="notification_incoming_call_with_photo_location" msgid="3523930283842222367">"Telefonatë hyrëse me fotografi dhe vendndodhjen"</string>
- <string name="notification_incoming_call_with_message_location" msgid="319374298517482028">"Telefonatë hyrëse me mesazh dhe vendndodhjen"</string>
- <string name="notification_incoming_call_with_photo_message_location" msgid="596658237891406809">"Telefonatë me fotografi, mesazh dhe vendndodhjen"</string>
+ <string name="notification_incoming_call_with_photo_location" msgid="3523930283842222367">"Telefonatë hyrëse me fotografi dhe vendndodhje"</string>
+ <string name="notification_incoming_call_with_message_location" msgid="319374298517482028">"Telefonatë hyrëse me mesazh dhe vendndodhje"</string>
+ <string name="notification_incoming_call_with_photo_message_location" msgid="596658237891406809">"Telefonatë me fotografi, mesazh dhe vendndodhje"</string>
<string name="notification_incoming_call_attachments" msgid="3708414495376236948">"Telefonatë hyrëse me bashkëngjitje"</string>
<string name="important_notification_incoming_call" msgid="2867013954509930989">"Telefonatë hyrëse e rëndësishme"</string>
<string name="important_notification_incoming_call_with_photo" msgid="4908333121583658560">"Telefonatë hyrëse e rëndësishme me fotografi"</string>
<string name="important_notification_incoming_call_with_message" msgid="1614505248246685319">"Telefonatë hyrëse e rëndësishme me mesazh"</string>
- <string name="important_notification_incoming_call_with_location" msgid="7387284065036564352">"Telefonatë hyrëse e rëndësishme me vendndodhjen"</string>
+ <string name="important_notification_incoming_call_with_location" msgid="7387284065036564352">"Telefonatë hyrëse e rëndësishme me vendndodhje"</string>
<string name="important_notification_incoming_call_with_photo_message" msgid="4577220919701434817">"Telefonatë e rëndësishme me fotografi dhe mesazh"</string>
- <string name="important_notification_incoming_call_with_photo_location" msgid="7172208615619394502">"Telefonatë e rëndësishme me foto dhe vendndodhjen"</string>
- <string name="important_notification_incoming_call_with_message_location" msgid="7244079127080064796">"Telefonatë e rëndësishme me mesazh e vendndodhjen"</string>
- <string name="important_notification_incoming_call_with_photo_message_location" msgid="513692941317253479">"Tel. e rëndësishme me foto, mesazh e vendndodhjen"</string>
+ <string name="important_notification_incoming_call_with_photo_location" msgid="7172208615619394502">"Telefonatë e rëndësishme me foto dhe vendndodhje"</string>
+ <string name="important_notification_incoming_call_with_message_location" msgid="7244079127080064796">"Telefonatë e rëndësishme me mesazh e vendndodhje"</string>
+ <string name="important_notification_incoming_call_with_photo_message_location" msgid="513692941317253479">"Tel. e rëndësishme me foto, mesazh e vendndodhje"</string>
<string name="important_notification_incoming_call_attachments" msgid="4594375776340303751">"Telefonatë hyrëse e rëndësishme me bashkëngjitje"</string>
<string name="notification_incoming_work_call" msgid="5291275092734261918">"Telefonatë pune hyrëse"</string>
<string name="notification_incoming_call_wifi" msgid="1039173395425774684">"Telefonatë hyrëse Wi-Fi"</string>
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Telefonatë pune hyrëse përmes Wi-Fi"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Telefonatë e dyshuar si e padëshiruar"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Kërkesë për video hyrëse"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Postë e re zanore"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Postë e re zanore (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Formo numrin <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Numri i postës zanore është i panjohur"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Nuk ka shërbim"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Rrjeti i përzgjedhur (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) nuk mundësohet"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Përgjigju"</string>
diff --git a/java/com/android/incallui/res/values-sr/strings.xml b/java/com/android/incallui/res/values-sr/strings.xml
index 89b3e7def..4fa7a6133 100644
--- a/java/com/android/incallui/res/values-sr/strings.xml
+++ b/java/com/android/incallui/res/values-sr/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Долазни позив за Work преко Wi-Fi-ја"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Сумња на непожељан долазни позив"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Захтев за долазни видео позив"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Нова говорна пошта"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Нова говорна пошта (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Позови <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Непознат број говорне поште"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Нема услуге"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Изабрана мрежа (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) није доступна"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Одговори"</string>
diff --git a/java/com/android/incallui/res/values-sv/strings.xml b/java/com/android/incallui/res/values-sv/strings.xml
index 66d2732a8..6d58d90f3 100644
--- a/java/com/android/incallui/res/values-sv/strings.xml
+++ b/java/com/android/incallui/res/values-sv/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Inkommande jobbsamtal via Wi-Fi"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Inkommande misstänkt spamsamtal"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Inkommande begäran om videosamtal"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Nytt röstmeddelande"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Nytt röstmeddelande (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Ring <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Nummer till röstbrevlåda okänt"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Ingen tjänst"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Det valda nätverket (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) är inte tillgängligt"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Svara"</string>
diff --git a/java/com/android/incallui/res/values-sw/strings.xml b/java/com/android/incallui/res/values-sw/strings.xml
index 914e22821..8b2fb95b4 100644
--- a/java/com/android/incallui/res/values-sw/strings.xml
+++ b/java/com/android/incallui/res/values-sw/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Simu ya Wi-Fi ya kazi inayoingia"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Simu inayoingia inashukiwa kuwa taka"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Ombi linaloingia la video"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Ujumbe mpya wa sauti"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Barua mpya ya sauti <xliff:g id="COUNT">%d</xliff:g>"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Piga <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Nambari ya ujumbe wa sauti haijulikani."</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Hakuna huduma"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Mtandao uliochaguliwa <xliff:g id="OPERATOR_NAME">%s</xliff:g> haupatikani"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Jibu"</string>
diff --git a/java/com/android/incallui/res/values-ta/strings.xml b/java/com/android/incallui/res/values-ta/strings.xml
index 1eb9ce5bb..bae8d6a67 100644
--- a/java/com/android/incallui/res/values-ta/strings.xml
+++ b/java/com/android/incallui/res/values-ta/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"உள்வரும் வைஃபை அழைப்பு (பணி)"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"உள்வரும் சந்தேகத்திற்குரிய ஸ்பேம் அழைப்பு"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"உள்வரும் வீடியோ கோரிக்கை"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"புதிய குரலஞ்சல்"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"புதிய குரலஞ்சல் (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> ஐ அழை"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"குரலஞ்சல் எண் அறியப்படவில்லை"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"சேவை இல்லை"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"தேர்ந்தெடுத்த நெட்வொர்க் (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) கிடைக்கவில்லை"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"பதிலளி"</string>
diff --git a/java/com/android/incallui/res/values-te/strings.xml b/java/com/android/incallui/res/values-te/strings.xml
index fc9723d01..6b833886b 100644
--- a/java/com/android/incallui/res/values-te/strings.xml
+++ b/java/com/android/incallui/res/values-te/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"ఇన్‌కమింగ్ Wi-Fi కార్యాలయ కాల్"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"అనుమానాస్పద స్పామ్ కాల్ వస్తోంది"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"ఇన్‌కమింగ్ వీడియో అభ్యర్థన"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"కొత్త వాయిస్ మెయిల్"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"కొత్త వాయిస్ మెయిల్ (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>కు డయల్ చేయండి"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"వాయిస్ మెయిల్ నంబర్ తెలియదు"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"సేవ లేదు"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"ఎంచుకున్న నెట్‌వర్క్ (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) అందుబాటులో లేదు"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"సమాధానం ఇవ్వండి"</string>
diff --git a/java/com/android/incallui/res/values-th/strings.xml b/java/com/android/incallui/res/values-th/strings.xml
index 8fef8a696..11023b93a 100644
--- a/java/com/android/incallui/res/values-th/strings.xml
+++ b/java/com/android/incallui/res/values-th/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"มีสายเรียกเข้าจากที่ทำงานผ่าน Wi-Fi"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"สายเรียกเข้าที่สงสัยว่าเป็นสแปม"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"คำขอโทรเข้าเป็นวิดีโอ"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"ข้อความเสียงใหม่"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"ข้อความเสียงใหม่ (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"หมุนหมายเลข <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"ไม่ทราบหมายเลขข้อความเสียง"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"ไม่มีบริการ"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"เครือข่ายที่เลือกไว้ (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) ไม่พร้อมใช้งาน"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"รับสาย"</string>
diff --git a/java/com/android/incallui/res/values-tl/strings.xml b/java/com/android/incallui/res/values-tl/strings.xml
index 725fc4838..00a4623b5 100644
--- a/java/com/android/incallui/res/values-tl/strings.xml
+++ b/java/com/android/incallui/res/values-tl/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Papasok na tawag sa trabaho sa pamamagitan ng Wi-Fi"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Papasok na pinaghihinalaang spam na tawag"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Papasok na kahilingan ng video"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Bagong voicemail"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Bagong voicemail (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"I-dial ang <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Hindi kilala ang numero ng voicemail"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Walang serbisyo"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Hindi available ang mga piniling network (<xliff:g id="OPERATOR_NAME">%s</xliff:g>)"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Sagutin"</string>
diff --git a/java/com/android/incallui/res/values-tr/strings.xml b/java/com/android/incallui/res/values-tr/strings.xml
index 1d88d5af8..9820a6989 100644
--- a/java/com/android/incallui/res/values-tr/strings.xml
+++ b/java/com/android/incallui/res/values-tr/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Gelen kablosuz iş çağrısı"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Spam olabilecek gelen arama"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Gelen video isteği"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Yeni sesli mesaj"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Yeni sesli mesaj (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Çevir: <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Sesli mesaj numarası bilinmiyor"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Hizmet yok"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Seçili ağ (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) kullanılamıyor"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Yanıtla"</string>
diff --git a/java/com/android/incallui/res/values-uk/strings.xml b/java/com/android/incallui/res/values-uk/strings.xml
index 09168001e..b3b297dc7 100644
--- a/java/com/android/incallui/res/values-uk/strings.xml
+++ b/java/com/android/incallui/res/values-uk/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Вхідний дзвінок на робочий телефон через Wi-Fi"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Цей дзвінок може бути спамом"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Запит на вхідний відеодзвінок"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Нове голосове повідомлення"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Нове голосове повідомлення (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Набрати <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Невідомий номер голосової пошти"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Нема служби"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Вибрана мережа (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) недоступна"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Відповісти"</string>
diff --git a/java/com/android/incallui/res/values-ur/strings.xml b/java/com/android/incallui/res/values-ur/strings.xml
index bf8c8e19c..e3326a27e 100644
--- a/java/com/android/incallui/res/values-ur/strings.xml
+++ b/java/com/android/incallui/res/values-ur/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"‏کام سے متعلق آنے والی Wi-Fi کال"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"آنے والی مشتبہ سپام کال"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"اِن کمنگ ویڈیو درخواست"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"نیا صوتی میل"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"نیا صوتی میل (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> ڈائل کریں"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"صوتی میل نمبر نامعلوم ہے"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"کوئی سروس نہیں ہے"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"منتخب کردہ نیٹ ورک (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) دستیاب نہیں ہے"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"جواب دیں"</string>
diff --git a/java/com/android/incallui/res/values-uz/strings.xml b/java/com/android/incallui/res/values-uz/strings.xml
index 2577e1947..14486c621 100644
--- a/java/com/android/incallui/res/values-uz/strings.xml
+++ b/java/com/android/incallui/res/values-uz/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Kiruvchi Wi-Fi ishchi qo‘ng‘irog‘i"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Shubhali kiruvchi qo‘ng‘iroq"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Kiruvchi video so\'rovi"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Yangi ovozli xabar"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Yangi ovozli xabar (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>ni terish"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Ovozli pochta raqami noma’lum"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Xizmat mavjud emas"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Tanlangan tarmoq (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) mavjud emas"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Javob"</string>
diff --git a/java/com/android/incallui/res/values-vi/strings.xml b/java/com/android/incallui/res/values-vi/strings.xml
index 845c9e8dc..b466b020d 100644
--- a/java/com/android/incallui/res/values-vi/strings.xml
+++ b/java/com/android/incallui/res/values-vi/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Cuộc gọi đến qua Wi-Fi về công việc"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Cuộc gọi spam đến bị nghi ngờ"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Yêu cầu video đến"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Thư thoại mới"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Thư thoại mới (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Quay số <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Số thư thoại không xác định"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Không có dịch vụ nào"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Mạng được chọn (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) không khả dụng"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Trả lời"</string>
diff --git a/java/com/android/incallui/res/values-zh-rCN/strings.xml b/java/com/android/incallui/res/values-zh-rCN/strings.xml
index 7168254bf..e26ab0ca2 100644
--- a/java/com/android/incallui/res/values-zh-rCN/strings.xml
+++ b/java/com/android/incallui/res/values-zh-rCN/strings.xml
@@ -38,31 +38,27 @@
<string name="notification_on_hold" msgid="7141827443379205682">"保持"</string>
<string name="notification_incoming_call" msgid="7520580807513849283">"来电"</string>
<string name="notification_incoming_call_with_photo" msgid="4360505044807517422">"包含照片的来电"</string>
- <string name="notification_incoming_call_with_message" msgid="5608687985694956601">"包含信息的来电"</string>
+ <string name="notification_incoming_call_with_message" msgid="5608687985694956601">"包含讯息的来电"</string>
<string name="notification_incoming_call_with_location" msgid="4519498445081598767">"包含位置信息的来电"</string>
- <string name="notification_incoming_call_with_photo_message" msgid="316806247057497525">"包含照片和信息的来电"</string>
+ <string name="notification_incoming_call_with_photo_message" msgid="316806247057497525">"包含照片和讯息的来电"</string>
<string name="notification_incoming_call_with_photo_location" msgid="3523930283842222367">"包含照片和位置信息的来电"</string>
- <string name="notification_incoming_call_with_message_location" msgid="319374298517482028">"包含信息和位置信息的来电"</string>
- <string name="notification_incoming_call_with_photo_message_location" msgid="596658237891406809">"包含照片、信息和位置信息的来电"</string>
+ <string name="notification_incoming_call_with_message_location" msgid="319374298517482028">"包含讯息和位置信息的来电"</string>
+ <string name="notification_incoming_call_with_photo_message_location" msgid="596658237891406809">"包含照片、讯息和位置信息的来电"</string>
<string name="notification_incoming_call_attachments" msgid="3708414495376236948">"包含附件的来电"</string>
<string name="important_notification_incoming_call" msgid="2867013954509930989">"重要来电"</string>
<string name="important_notification_incoming_call_with_photo" msgid="4908333121583658560">"包含照片的重要来电"</string>
- <string name="important_notification_incoming_call_with_message" msgid="1614505248246685319">"包含信息的重要来电"</string>
+ <string name="important_notification_incoming_call_with_message" msgid="1614505248246685319">"包含讯息的重要来电"</string>
<string name="important_notification_incoming_call_with_location" msgid="7387284065036564352">"包含位置信息的重要来电"</string>
- <string name="important_notification_incoming_call_with_photo_message" msgid="4577220919701434817">"包含照片和信息的重要来电"</string>
+ <string name="important_notification_incoming_call_with_photo_message" msgid="4577220919701434817">"包含照片和讯息的重要来电"</string>
<string name="important_notification_incoming_call_with_photo_location" msgid="7172208615619394502">"包含照片和位置信息的重要来电"</string>
- <string name="important_notification_incoming_call_with_message_location" msgid="7244079127080064796">"包含信息和位置信息的重要来电"</string>
- <string name="important_notification_incoming_call_with_photo_message_location" msgid="513692941317253479">"包含照片、信息和位置信息的重要来电"</string>
+ <string name="important_notification_incoming_call_with_message_location" msgid="7244079127080064796">"包含讯息和位置信息的重要来电"</string>
+ <string name="important_notification_incoming_call_with_photo_message_location" msgid="513692941317253479">"包含照片、讯息和位置信息的重要来电"</string>
<string name="important_notification_incoming_call_attachments" msgid="4594375776340303751">"包含附件的重要来电"</string>
<string name="notification_incoming_work_call" msgid="5291275092734261918">"工作来电"</string>
<string name="notification_incoming_call_wifi" msgid="1039173395425774684">"WLAN 来电"</string>
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"WLAN 工作来电"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"有疑似骚扰来电"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"收到视频通话邀请"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"新语音邮件"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"新语音邮件 (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"拨打 <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"语音信箱号码未知"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"无服务"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"所选网络(<xliff:g id="OPERATOR_NAME">%s</xliff:g>)不可用"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"接听"</string>
diff --git a/java/com/android/incallui/res/values-zh-rHK/strings.xml b/java/com/android/incallui/res/values-zh-rHK/strings.xml
index 00fe6f385..5eb8892e9 100644
--- a/java/com/android/incallui/res/values-zh-rHK/strings.xml
+++ b/java/com/android/incallui/res/values-zh-rHK/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Wi-Fi 工作來電"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"疑似收到垃圾來電"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"收到視像要求"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"新留言"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"新留言 (<xliff:g id="COUNT">%d</xliff:g> 個)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"撥號 <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"沒有可用的留言信箱號碼"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"沒有服務"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"您所選取的網絡 (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) 無法使用"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"接聽"</string>
diff --git a/java/com/android/incallui/res/values-zh-rTW/strings.xml b/java/com/android/incallui/res/values-zh-rTW/strings.xml
index c9f4748e5..9f028661e 100644
--- a/java/com/android/incallui/res/values-zh-rTW/strings.xml
+++ b/java/com/android/incallui/res/values-zh-rTW/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"公司來電 (透過 Wi-Fi)"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"可疑的騷擾/廣告來電"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"收到視訊要求"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"新留言"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"新留言 (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"撥打 <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"無語音信箱號碼"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"沒有服務"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"您所選取的網路 (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) 無法使用"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"接聽"</string>
diff --git a/java/com/android/incallui/res/values-zu/strings.xml b/java/com/android/incallui/res/values-zu/strings.xml
index 7c5b1ab28..db415cc45 100644
--- a/java/com/android/incallui/res/values-zu/strings.xml
+++ b/java/com/android/incallui/res/values-zu/strings.xml
@@ -59,10 +59,6 @@
<string name="notification_incoming_work_call_wifi" msgid="322580182203435905">"Ikholi engenayo yomsebenzi ye-Wi-Fi"</string>
<string name="notification_incoming_spam_call" msgid="7591506944666791937">"Ikholi engenayo osolisayo kagaxekile"</string>
<string name="notification_requesting_video_call" msgid="1807679328811515758">"Isicelo sevidiyo engenayo"</string>
- <string name="notification_voicemail_title" msgid="3870308666991926655">"Umlayezo wezwi omusha"</string>
- <string name="notification_voicemail_title_count" msgid="6918714157574015331">"Umyalezo wezwi omusha (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="notification_voicemail_text_format" msgid="6080732264937745523">"Dayela <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
- <string name="notification_voicemail_no_vm_number" msgid="260803154697293622">"Inombolo yevoyisimeyili ayaziwa"</string>
<string name="notification_network_selection_title" msgid="8639159088474275747">"Ayikho isevisi"</string>
<string name="notification_network_selection_text" msgid="7190860774239009625">"Inethiwekhi ekhethiwe <xliff:g id="OPERATOR_NAME">%s</xliff:g> ayitholakali"</string>
<string name="notification_action_answer" msgid="8748275902211192568">"Phendula"</string>
diff --git a/java/com/android/incallui/res/values/strings.xml b/java/com/android/incallui/res/values/strings.xml
index 18d593091..aede4289b 100644
--- a/java/com/android/incallui/res/values/strings.xml
+++ b/java/com/android/incallui/res/values/strings.xml
@@ -134,17 +134,6 @@
<string name="notification_incoming_spam_call">Incoming suspected spam call</string>
<!-- The "label" of the in-call Notification for upgrading an existing call to a video call. -->
<string name="notification_requesting_video_call">Incoming video request</string>
- <!-- Label for the "Voicemail" notification item, when expanded. -->
- <string name="notification_voicemail_title">New voicemail</string>
- <!-- Label for the expanded "Voicemail" notification item,
- including a count of messages. -->
- <string name="notification_voicemail_title_count">New voicemail (<xliff:g id="count">%d</xliff:g>)</string>
- <!-- Message displayed in the "Voicemail" notification item, allowing the user
- to dial the indicated number. -->
- <string name="notification_voicemail_text_format">Dial <xliff:g id="voicemail_number">%s</xliff:g></string>
- <!-- Message displayed in the "Voicemail" notification item,
- indicating that there's no voicemail number available -->
- <string name="notification_voicemail_no_vm_number">Voicemail number unknown</string>
<!-- Label for the "No service" notification item, when expanded. -->
<string name="notification_network_selection_title">No service</string>
<!-- Label for the expanded "No service" notification item, including the
diff --git a/java/com/android/incallui/res/values/styles.xml b/java/com/android/incallui/res/values/styles.xml
index 96e3d4d59..68a38f0b2 100644
--- a/java/com/android/incallui/res/values/styles.xml
+++ b/java/com/android/incallui/res/values/styles.xml
@@ -63,6 +63,7 @@
<item name="dialpad_end_key_spacing">
@dimen/incall_end_call_spacing
</item>
+ <item name="dialpad_elevation">10dp</item>
</style>
<style name="AfterCallNotificationTheme" parent="@style/Theme.AppCompat.Light.Dialog.MinWidth">
diff --git a/java/com/android/incallui/spam/SpamCallListListener.java b/java/com/android/incallui/spam/SpamCallListListener.java
index ed0a99e2a..67dec93ad 100644
--- a/java/com/android/incallui/spam/SpamCallListListener.java
+++ b/java/com/android/incallui/spam/SpamCallListListener.java
@@ -31,9 +31,9 @@ import com.android.contacts.common.compat.PhoneNumberUtilsCompat;
import com.android.dialer.blocking.FilteredNumberCompat;
import com.android.dialer.blocking.FilteredNumbersUtil;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.ContactLookupResult;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.ContactLookupResult;
-import com.android.dialer.logging.nano.DialerImpression;
import com.android.dialer.notification.NotificationChannelManager;
import com.android.dialer.notification.NotificationChannelManager.Channel;
import com.android.dialer.spam.Spam;
diff --git a/java/com/android/incallui/spam/SpamNotificationActivity.java b/java/com/android/incallui/spam/SpamNotificationActivity.java
index 88d6bdfda..98cc2f3da 100644
--- a/java/com/android/incallui/spam/SpamNotificationActivity.java
+++ b/java/com/android/incallui/spam/SpamNotificationActivity.java
@@ -34,9 +34,10 @@ import com.android.dialer.blocking.BlockedNumbersMigrator;
import com.android.dialer.blocking.FilteredNumberAsyncQueryHandler;
import com.android.dialer.blocking.FilteredNumberCompat;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.ContactLookupResult;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
-import com.android.dialer.logging.nano.ReportingLocation;
+import com.android.dialer.logging.ReportingLocation;
import com.android.dialer.spam.Spam;
import com.android.incallui.R;
import com.android.incallui.call.DialerCall;
@@ -108,7 +109,8 @@ public class SpamNotificationActivity extends FragmentActivity {
return PhoneNumberUtilsCompat.createTtsSpannable(number).toString();
}
- private static void logCallImpression(Context context, Bundle bundle, int impression) {
+ private static void logCallImpression(
+ Context context, Bundle bundle, DialerImpression.Type impression) {
Logger.get(context)
.logCallImpression(
impression,
@@ -122,7 +124,8 @@ public class SpamNotificationActivity extends FragmentActivity {
bundle.putBoolean(CALL_INFO_KEY_IS_SPAM, call.isSpam());
bundle.putString(CALL_INFO_KEY_CALL_ID, call.getUniqueCallId());
bundle.putLong(CALL_INFO_KEY_START_TIME_MILLIS, call.getTimeAddedMs());
- bundle.putInt(CALL_INFO_CONTACT_LOOKUP_RESULT_TYPE, call.getLogState().contactLookupResult);
+ bundle.putInt(
+ CALL_INFO_CONTACT_LOOKUP_RESULT_TYPE, call.getLogState().contactLookupResult.getNumber());
return bundle;
}
@@ -142,7 +145,9 @@ public class SpamNotificationActivity extends FragmentActivity {
Intent intent = getIntent();
String number = getCallInfo().getString(CALL_INFO_KEY_PHONE_NUMBER);
boolean isSpam = getCallInfo().getBoolean(CALL_INFO_KEY_IS_SPAM);
- int contactLookupResultType = getCallInfo().getInt(CALL_INFO_CONTACT_LOOKUP_RESULT_TYPE, 0);
+ ContactLookupResult.Type contactLookupResultType =
+ ContactLookupResult.Type.forNumber(
+ getCallInfo().getInt(CALL_INFO_CONTACT_LOOKUP_RESULT_TYPE, 0));
switch (intent.getAction()) {
case ACTION_ADD_TO_CONTACTS:
logCallImpression(DialerImpression.Type.SPAM_AFTER_CALL_NOTIFICATION_ADD_TO_CONTACTS);
@@ -164,6 +169,7 @@ public class SpamNotificationActivity extends FragmentActivity {
showNonSpamDialog();
}
break;
+ default: // fall out
}
}
@@ -179,7 +185,8 @@ public class SpamNotificationActivity extends FragmentActivity {
}
/** Creates and displays the dialog for whitelisting a number. */
- private void maybeShowNotSpamDialog(final String number, final int contactLookupResultType) {
+ private void maybeShowNotSpamDialog(
+ final String number, final ContactLookupResult.Type contactLookupResultType) {
if (Spam.get(this).isDialogEnabledForSpamNotification()) {
BlockReportSpamDialogs.ReportNotSpamDialogFragment.newInstance(
getFormattedNumber(number),
@@ -198,7 +205,7 @@ public class SpamNotificationActivity extends FragmentActivity {
/** Creates and displays the dialog for blocking/reporting a number as spam. */
private void maybeShowBlockReportSpamDialog(
- final String number, final int contactLookupResultType) {
+ final String number, final ContactLookupResult.Type contactLookupResultType) {
if (Spam.get(this).isDialogEnabledForSpamNotification()) {
maybeShowBlockNumberMigrationDialog(
new BlockedNumbersMigrator.Listener() {
@@ -252,7 +259,7 @@ public class SpamNotificationActivity extends FragmentActivity {
/** Block and report the number as spam. */
private void blockReportNumberAndFinish(
- String number, boolean reportAsSpam, int contactLookupResultType) {
+ String number, boolean reportAsSpam, ContactLookupResult.Type contactLookupResultType) {
if (reportAsSpam) {
logCallImpression(DialerImpression.Type.SPAM_AFTER_CALL_NOTIFICATION_MARKED_NUMBER_AS_SPAM);
Spam.get(this)
@@ -271,7 +278,8 @@ public class SpamNotificationActivity extends FragmentActivity {
}
/** Report the number as not spam. */
- private void reportNotSpamAndFinish(String number, int contactLookupResultType) {
+ private void reportNotSpamAndFinish(
+ String number, ContactLookupResult.Type contactLookupResultType) {
logCallImpression(DialerImpression.Type.SPAM_AFTER_CALL_NOTIFICATION_REPORT_NUMBER_AS_NOT_SPAM);
Spam.get(this)
.reportNotSpamFromAfterCallNotification(
@@ -307,7 +315,7 @@ public class SpamNotificationActivity extends FragmentActivity {
return getIntent().getBundleExtra(EXTRA_CALL_INFO);
}
- private void logCallImpression(int impression) {
+ private void logCallImpression(DialerImpression.Type impression) {
logCallImpression(this, getCallInfo(), impression);
}
@@ -356,8 +364,9 @@ public class SpamNotificationActivity extends FragmentActivity {
final SpamNotificationActivity spamNotificationActivity =
(SpamNotificationActivity) getActivity();
final String number = getArguments().getString(CALL_INFO_KEY_PHONE_NUMBER);
- final int contactLookupResultType =
- getArguments().getInt(CALL_INFO_CONTACT_LOOKUP_RESULT_TYPE, 0);
+ final ContactLookupResult.Type contactLookupResultType =
+ ContactLookupResult.Type.forNumber(
+ getArguments().getInt(CALL_INFO_CONTACT_LOOKUP_RESULT_TYPE, 0));
return new AlertDialog.Builder(getActivity())
.setCancelable(false)
@@ -442,8 +451,9 @@ public class SpamNotificationActivity extends FragmentActivity {
final SpamNotificationActivity spamNotificationActivity =
(SpamNotificationActivity) getActivity();
final String number = getArguments().getString(CALL_INFO_KEY_PHONE_NUMBER);
- final int contactLookupResultType =
- getArguments().getInt(CALL_INFO_CONTACT_LOOKUP_RESULT_TYPE, 0);
+ final ContactLookupResult.Type contactLookupResultType =
+ ContactLookupResult.Type.forNumber(
+ getArguments().getInt(CALL_INFO_CONTACT_LOOKUP_RESULT_TYPE, 0));
return new AlertDialog.Builder(getActivity())
.setTitle(getString(R.string.non_spam_notification_title, getFormattedNumber(number)))
.setCancelable(false)
diff --git a/java/com/android/incallui/spam/SpamNotificationService.java b/java/com/android/incallui/spam/SpamNotificationService.java
index bf107f789..dbea2cc38 100644
--- a/java/com/android/incallui/spam/SpamNotificationService.java
+++ b/java/com/android/incallui/spam/SpamNotificationService.java
@@ -26,9 +26,10 @@ import android.support.annotation.Nullable;
import com.android.contacts.common.GeoUtil;
import com.android.dialer.blocking.FilteredNumberAsyncQueryHandler;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.ContactLookupResult;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
-import com.android.dialer.logging.nano.ReportingLocation;
+import com.android.dialer.logging.ReportingLocation;
import com.android.dialer.spam.Spam;
import com.android.incallui.call.DialerCall;
@@ -81,7 +82,8 @@ public class SpamNotificationService extends Service {
String number = intent.getStringExtra(EXTRA_PHONE_NUMBER);
int notificationId = intent.getIntExtra(EXTRA_NOTIFICATION_ID, 1);
String countryIso = GeoUtil.getCurrentCountryIso(this);
- int contactLookupResultType = intent.getIntExtra(EXTRA_CONTACT_LOOKUP_RESULT_TYPE, 0);
+ ContactLookupResult.Type contactLookupResultType =
+ ContactLookupResult.Type.forNumber(intent.getIntExtra(EXTRA_CONTACT_LOOKUP_RESULT_TYPE, 0));
((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE))
.cancel(number, notificationId);
@@ -110,6 +112,7 @@ public class SpamNotificationService extends Service {
ReportingLocation.Type.FEEDBACK_PROMPT,
contactLookupResultType);
break;
+ default: // fall out
}
// TODO: call stopSelf() after async tasks complete (b/28441936)
stopSelf();
@@ -122,7 +125,7 @@ public class SpamNotificationService extends Service {
LogUtil.d(TAG, "onDestroy");
}
- private void logCallImpression(Intent intent, int impression) {
+ private void logCallImpression(Intent intent, DialerImpression.Type impression) {
Logger.get(this)
.logCallImpression(
impression,
diff --git a/java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java b/java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java
index a65274276..29aea1459 100644
--- a/java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java
+++ b/java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java
@@ -184,13 +184,7 @@ public class SurfaceViewVideoCallFragment extends Fragment
LayoutInflater layoutInflater, @Nullable ViewGroup viewGroup, @Nullable Bundle bundle) {
LogUtil.i("SurfaceViewVideoCallFragment.onCreateView", null);
- View view =
- layoutInflater.inflate(
- isLandscape()
- ? R.layout.frag_videocall_land_surfaceview
- : R.layout.frag_videocall_surfaceview,
- viewGroup,
- false);
+ View view = layoutInflater.inflate(R.layout.frag_videocall_surfaceview, viewGroup, false);
contactGridManager =
new ContactGridManager(view, null /* no avatar */, 0, false /* showAnonymousAvatar */);
@@ -639,12 +633,6 @@ public class SurfaceViewVideoCallFragment extends Fragment
shouldShowPreview,
shouldShowRemote);
- if (this.shouldShowPreview == shouldShowPreview
- && this.shouldShowRemote == shouldShowRemote
- && this.isRemotelyHeld == isRemotelyHeld) {
- return;
- }
-
this.shouldShowPreview = shouldShowPreview;
this.shouldShowRemote = shouldShowRemote;
this.isRemotelyHeld = isRemotelyHeld;
diff --git a/java/com/android/incallui/video/impl/VideoCallFragment.java b/java/com/android/incallui/video/impl/VideoCallFragment.java
index 96059375f..97d38cf3d 100644
--- a/java/com/android/incallui/video/impl/VideoCallFragment.java
+++ b/java/com/android/incallui/video/impl/VideoCallFragment.java
@@ -1216,6 +1216,9 @@ public class VideoCallFragment extends Fragment
blurScript.setInput(allocationIn);
blurScript.forEach(allocationOut);
allocationOut.copyTo(image);
+ blurScript.destroy();
+ allocationIn.destroy();
+ allocationOut.destroy();
}
@Override
diff --git a/java/com/android/incallui/video/impl/res/layout-land/videocall_controls_surfaceview.xml b/java/com/android/incallui/video/impl/res/layout-land/videocall_controls_surfaceview.xml
new file mode 100644
index 000000000..40b50bc70
--- /dev/null
+++ b/java/com/android/incallui/video/impl/res/layout-land/videocall_controls_surfaceview.xml
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+<RelativeLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/videocall_video_controls_container"
+ android:fitsSystemWindows="true"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <include
+ android:id="@+id/incall_contact_grid"
+ layout="@layout/video_contact_grid"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="16dp"
+ android:layout_marginStart="24dp"
+ android:layout_marginEnd="24dp"/>
+
+ <!-- This placeholder matches the position of the preview UI and is used to
+ anchor video buttons. This is needed in greenscreen mode when the
+ preview is fullscreen but we want the controls to be positioned as
+ normal. -->
+ <Space
+ android:id="@+id/videocall_video_preview_placeholder"
+ android:layout_width="@dimen/videocall_preview_long"
+ android:layout_height="@dimen/videocall_preview_height"
+ android:layout_marginEnd="@dimen/videocall_preview_margin_end"
+ android:layout_alignParentBottom="true"
+ android:layout_alignParentEnd="true"
+ android:visibility="invisible"/>
+
+ <LinearLayout
+ android:id="@+id/videocall_video_controls"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignBottom="@+id/videocall_video_preview_placeholder"
+ android:layout_alignTop="@+id/videocall_video_preview_placeholder"
+ android:layout_toStartOf="@+id/videocall_video_preview_placeholder"
+ android:gravity="center_horizontal"
+ android:orientation="horizontal"
+ android:visibility="invisible"
+ tools:visibility="visible">
+ <com.android.incallui.video.impl.CheckableImageButton
+ android:id="@+id/videocall_speaker_button"
+ style="@style/Incall.Button.VideoCall"
+ android:layout_width="@dimen/videocall_button_size"
+ android:layout_height="@dimen/videocall_button_size"
+ android:layout_marginEnd="24dp"
+ android:checked="true"
+ android:src="@drawable/quantum_ic_volume_up_white_36"
+ app:contentDescriptionChecked="@string/incall_content_description_speaker"
+ app:contentDescriptionUnchecked="@string/incall_content_description_earpiece"
+ />
+ <com.android.incallui.video.impl.CheckableImageButton
+ android:id="@+id/videocall_mute_button"
+ style="@style/Incall.Button.VideoCall"
+ android:layout_width="@dimen/videocall_button_size"
+ android:layout_height="@dimen/videocall_button_size"
+ android:layout_marginEnd="24dp"
+ android:scaleType="center"
+ android:src="@drawable/quantum_ic_mic_off_white_36"
+ app:contentDescriptionChecked="@string/incall_content_description_muted"
+ app:contentDescriptionUnchecked="@string/incall_content_description_unmuted"
+ />
+ <com.android.incallui.video.impl.CheckableImageButton
+ android:id="@+id/videocall_mute_video"
+ style="@style/Incall.Button.VideoCall"
+ android:layout_width="@dimen/videocall_button_size"
+ android:layout_height="@dimen/videocall_button_size"
+ android:layout_marginEnd="24dp"
+ android:scaleType="center"
+ android:src="@drawable/quantum_ic_videocam_off_white_36"
+ app:contentDescriptionChecked="@string/incall_content_description_video_off"
+ app:contentDescriptionUnchecked="@string/incall_content_description_video_on"
+ />
+ <include
+ layout="@layout/switch_camera_button"
+ android:layout_width="@dimen/videocall_button_size"
+ android:layout_height="@dimen/videocall_button_size"
+ android:layout_marginEnd="24dp"/>
+ </LinearLayout>
+
+ <FrameLayout
+ android:id="@+id/videocall_switch_controls"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="36dp"
+ android:layout_marginEnd="36dp"
+ android:layout_alignParentEnd="true"
+ android:layout_alignParentTop="true">
+ <ImageButton
+ android:id="@+id/videocall_switch_on_hold"
+ style="@style/Incall.Button.VideoCall"
+ android:layout_width="@dimen/videocall_button_size"
+ android:layout_height="@dimen/videocall_button_size"
+ android:contentDescription="@string/incall_content_description_swap_calls"
+ android:src="@drawable/quantum_ic_swap_calls_white_36"
+ android:visibility="gone"
+ tools:visibility="visible"
+ />
+ </FrameLayout>
+
+ <ImageButton
+ android:id="@+id/videocall_end_call"
+ style="@style/Incall.Button.End"
+ android:layout_marginEnd="36dp"
+ android:layout_alignParentEnd="true"
+ android:layout_centerVertical="true"
+ android:contentDescription="@string/incall_content_description_end_call"
+ android:visibility="visible"/>
+
+</RelativeLayout>
diff --git a/java/com/android/incallui/video/impl/res/layout/frag_videocall_land_surfaceview.xml b/java/com/android/incallui/video/impl/res/layout/frag_videocall_land_surfaceview.xml
deleted file mode 100644
index 4cafd68c6..000000000
--- a/java/com/android/incallui/video/impl/res/layout/frag_videocall_land_surfaceview.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@android:color/black"
- android:keepScreenOn="true">
-
- <SurfaceView
- android:id="@+id/videocall_video_remote"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:importantForAccessibility="no"/>
-
- <TextView
- android:gravity="center"
- android:id="@+id/videocall_remote_video_off"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:accessibilityTraversalBefore="@+id/videocall_speaker_button"
- android:drawablePadding="8dp"
- android:drawableTop="@drawable/quantum_ic_videocam_off_white_36"
- android:padding="64dp"
- android:text="@string/videocall_remote_video_off"
- android:textAppearance="@style/Dialer.Incall.TextAppearance"
- android:visibility="gone"
- tools:visibility="visible"/>
-
- <View
- android:id="@+id/videocall_fullscreen_background"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/videocall_overlay_background_color"/>
-
- <FrameLayout
- android:id="@+id/videocall_preview_root"
- android:layout_width="@dimen/videocall_preview_width"
- android:layout_height="@dimen/videocall_preview_height"
- android:layout_marginBottom="@dimen/videocall_preview_margin_bottom"
- android:layout_marginEnd="@dimen/videocall_preview_margin_end"
- android:background="@android:color/black"
- android:layout_gravity="bottom|end">
-
- <SurfaceView
- android:id="@+id/videocall_video_preview"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:importantForAccessibility="no"/>
-
- <ImageView
- android:id="@+id/videocall_video_preview_off_overlay"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:scaleType="center"
- android:src="@drawable/quantum_ic_videocam_off_white_36"
- android:visibility="gone"
- android:importantForAccessibility="no"
- tools:visibility="visible"/>
-
- <ImageView
- android:id="@+id/videocall_video_preview_mute_overlay"
- android:layout_width="32dp"
- android:layout_height="32dp"
- android:layout_gravity="center"
- android:background="@drawable/videocall_background_circle_white"
- android:contentDescription="@string/incall_content_description_muted"
- android:scaleType="center"
- android:src="@drawable/quantum_ic_mic_off_black_24"
- android:visibility="gone"
- tools:visibility="visible"/>
-
- </FrameLayout>
-
- <View
- android:id="@+id/videocall_green_screen_background"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/videocall_overlay_background_color"/>
-
- <include
- layout="@layout/videocall_controls_land"
- android:layout_width="match_parent"
- android:layout_height="match_parent"/>
-
- <FrameLayout
- android:id="@+id/videocall_on_hold_banner"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentTop="true"/>
-
-</FrameLayout>
diff --git a/java/com/android/incallui/video/impl/res/layout/frag_videocall_surfaceview.xml b/java/com/android/incallui/video/impl/res/layout/frag_videocall_surfaceview.xml
index fa4aaef1c..c67246675 100644
--- a/java/com/android/incallui/video/impl/res/layout/frag_videocall_surfaceview.xml
+++ b/java/com/android/incallui/video/impl/res/layout/frag_videocall_surfaceview.xml
@@ -1,10 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"
- android:orientation="vertical"
android:keepScreenOn="true">
<SurfaceView
@@ -33,17 +47,11 @@
android:id="@+id/videocall_fullscreen_background"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@color/videocall_overlay_background_color"
- tools:visibility="gone"/>
+ android:background="@color/videocall_overlay_background_color"/>
<FrameLayout
- android:id="@+id/videocall_preview_root"
- android:layout_width="@dimen/videocall_preview_width"
- android:layout_height="@dimen/videocall_preview_height"
- android:layout_marginBottom="@dimen/videocall_preview_margin_bottom"
- android:layout_marginStart="@dimen/videocall_preview_margin_start"
- android:background="@android:color/black"
- android:layout_gravity="bottom|start">
+ style="@style/VideoPreviewHolder"
+ android:id="@+id/videocall_preview_root">
<SurfaceView
android:id="@+id/videocall_video_preview"
@@ -81,11 +89,10 @@
android:id="@+id/videocall_green_screen_background"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@color/videocall_overlay_background_color"
- tools:visibility="gone"/>
+ android:background="@color/videocall_overlay_background_color"/>
<include
- layout="@layout/videocall_controls"
+ layout="@layout/videocall_controls_surfaceview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
diff --git a/java/com/android/incallui/video/impl/res/layout/videocall_controls_surfaceview.xml b/java/com/android/incallui/video/impl/res/layout/videocall_controls_surfaceview.xml
new file mode 100644
index 000000000..d2dc992b7
--- /dev/null
+++ b/java/com/android/incallui/video/impl/res/layout/videocall_controls_surfaceview.xml
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+<RelativeLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/videocall_video_controls_container"
+ android:fitsSystemWindows="true"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <include
+ android:id="@+id/incall_contact_grid"
+ layout="@layout/video_contact_grid"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="16dp"
+ android:layout_marginStart="24dp"
+ android:layout_marginEnd="24dp"/>
+
+ <!-- This placeholder matches the position of the preview UI and is used to
+ anchor video buttons. This is needed in greenscreen mode when the
+ preview is fullscreen but we want the controls to be positioned as
+ normal. -->
+ <Space
+ android:id="@+id/videocall_video_preview_placeholder"
+ android:layout_width="@dimen/videocall_preview_width"
+ android:layout_height="@dimen/videocall_preview_long"
+ android:layout_marginBottom="@dimen/videocall_preview_margin_bottom"
+ android:layout_marginStart="@dimen/videocall_preview_margin_start"
+ android:layout_alignParentBottom="true"
+ android:layout_alignParentStart="true"
+ android:visibility="invisible"/>
+
+ <LinearLayout
+ android:id="@+id/videocall_video_controls"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_above="@+id/videocall_video_preview_placeholder"
+ android:layout_alignEnd="@+id/videocall_video_preview_placeholder"
+ android:layout_alignStart="@+id/videocall_video_preview_placeholder"
+ android:gravity="center_horizontal"
+ android:orientation="vertical"
+ android:visibility="invisible"
+ tools:visibility="visible">
+ <com.android.incallui.video.impl.CheckableImageButton
+ android:id="@+id/videocall_speaker_button"
+ style="@style/Incall.Button.VideoCall"
+ android:layout_width="@dimen/videocall_button_size"
+ android:layout_height="@dimen/videocall_button_size"
+ android:layout_marginBottom="@dimen/videocall_button_spacing"
+ android:checked="true"
+ android:src="@drawable/quantum_ic_volume_up_white_36"
+ app:contentDescriptionChecked="@string/incall_content_description_speaker"
+ app:contentDescriptionUnchecked="@string/incall_content_description_earpiece"
+ />
+ <com.android.incallui.video.impl.CheckableImageButton
+ android:id="@+id/videocall_mute_button"
+ style="@style/Incall.Button.VideoCall"
+ android:layout_width="@dimen/videocall_button_size"
+ android:layout_height="@dimen/videocall_button_size"
+ android:layout_marginBottom="@dimen/videocall_button_spacing"
+ android:scaleType="center"
+ android:src="@drawable/quantum_ic_mic_off_white_36"
+ app:contentDescriptionChecked="@string/incall_content_description_muted"
+ app:contentDescriptionUnchecked="@string/incall_content_description_unmuted"
+ />
+ <com.android.incallui.video.impl.CheckableImageButton
+ android:id="@+id/videocall_mute_video"
+ style="@style/Incall.Button.VideoCall"
+ android:layout_width="@dimen/videocall_button_size"
+ android:layout_height="@dimen/videocall_button_size"
+ android:layout_marginBottom="@dimen/videocall_button_spacing"
+ android:scaleType="center"
+ android:src="@drawable/quantum_ic_videocam_off_white_36"
+ app:contentDescriptionChecked="@string/incall_content_description_video_off"
+ app:contentDescriptionUnchecked="@string/incall_content_description_video_on"
+ />
+ <include
+ layout="@layout/switch_camera_button"
+ android:layout_width="@dimen/videocall_button_size"
+ android:layout_height="@dimen/videocall_button_size"
+ android:layout_marginBottom="@dimen/videocall_button_spacing"/>
+ </LinearLayout>
+
+ <FrameLayout
+ android:id="@+id/videocall_switch_controls"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="36dp"
+ android:layout_marginEnd="24dp"
+ android:layout_alignParentBottom="true"
+ android:layout_alignParentEnd="true">
+ <ImageButton
+ android:id="@+id/videocall_switch_on_hold"
+ style="@style/Incall.Button.VideoCall"
+ android:layout_width="@dimen/videocall_button_size"
+ android:layout_height="@dimen/videocall_button_size"
+ android:contentDescription="@string/incall_content_description_swap_calls"
+ android:src="@drawable/quantum_ic_swap_calls_white_36"
+ android:visibility="gone"
+ tools:visibility="visible"
+ />
+ </FrameLayout>
+
+ <ImageButton
+ android:id="@+id/videocall_end_call"
+ style="@style/Incall.Button.End"
+ android:layout_marginBottom="36dp"
+ android:layout_alignParentBottom="true"
+ android:layout_centerHorizontal="true"
+ android:contentDescription="@string/incall_content_description_end_call"
+ android:visibility="visible"/>
+
+</RelativeLayout>
diff --git a/java/com/android/incallui/video/impl/res/values-b+sr+Latn/strings.xml b/java/com/android/incallui/video/impl/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..5381ecc68
--- /dev/null
+++ b/java/com/android/incallui/video/impl/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="videocall_remote_video_off" msgid="2959680546745902547">"Video je isključen"</string>
+ <string name="videocall_remote_video_on" msgid="6011817851703181639">"Kamera ove osobe je uključena"</string>
+ <string name="videocall_remotely_held" msgid="1295702896355732947">"Poziv je na čekanju"</string>
+ <string name="videocall_remotely_resumed" msgid="3331784411244773788">"Poziv je nastavljen"</string>
+ <string name="camera_permission_dialog_title" msgid="4901760354830982117">"Želite da dozvolite video?"</string>
+ <string name="camera_permission_dialog_message" msgid="2677490854794162699">"Aplikacija Telefon želi da koristi vašu kameru za video pozive."</string>
+ <string name="camera_permission_dialog_positive_button" msgid="9075818030671161374">"Dozvoli"</string>
+ <string name="camera_permission_dialog_negative_button" msgid="7538535842403837541">"Odbij"</string>
+</resources>
diff --git a/java/com/android/incallui/video/impl/res/values-h580dp-land/dimens.xml b/java/com/android/incallui/video/impl/res/values-h580dp-land/dimens.xml
new file mode 100644
index 000000000..ac2d0316a
--- /dev/null
+++ b/java/com/android/incallui/video/impl/res/values-h580dp-land/dimens.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+<resources>
+ <dimen name="videocall_preview_long">116dp</dimen>
+</resources>
diff --git a/java/com/android/incallui/video/impl/res/values-h580dp/dimens.xml b/java/com/android/incallui/video/impl/res/values-h580dp/dimens.xml
index b1a86a0fa..a53fb6404 100644
--- a/java/com/android/incallui/video/impl/res/values-h580dp/dimens.xml
+++ b/java/com/android/incallui/video/impl/res/values-h580dp/dimens.xml
@@ -1,7 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
<resources>
<dimen name="videocall_button_spacing">16dp</dimen>
<dimen name="videocall_button_size">72dp</dimen>
<dimen name="videocall_preview_width">88dp</dimen>
<dimen name="videocall_preview_height">88dp</dimen>
+ <dimen name="videocall_preview_long">104dp</dimen>
</resources>
diff --git a/java/com/android/incallui/video/impl/res/values-land/dimens.xml b/java/com/android/incallui/video/impl/res/values-land/dimens.xml
new file mode 100644
index 000000000..6485735e2
--- /dev/null
+++ b/java/com/android/incallui/video/impl/res/values-land/dimens.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+<resources>
+ <dimen name="videocall_preview_long">92dp</dimen>
+</resources>
diff --git a/java/com/android/incallui/video/impl/res/values-land/styles.xml b/java/com/android/incallui/video/impl/res/values-land/styles.xml
new file mode 100644
index 000000000..a809708df
--- /dev/null
+++ b/java/com/android/incallui/video/impl/res/values-land/styles.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+<resources>
+ <style name="VideoPreviewHolder">
+ <item name="android:layout_gravity">bottom|end</item>
+ <item name="android:layout_width">@dimen/videocall_preview_long</item>
+ <item name="android:layout_height">@dimen/videocall_preview_height</item>
+ <item name="android:layout_marginBottom">@dimen/videocall_preview_margin_bottom</item>
+ <item name="android:layout_marginEnd">@dimen/videocall_preview_margin_end</item>
+ <item name="android:background">@android:color/black</item>
+ </style>
+</resources>
diff --git a/java/com/android/incallui/video/impl/res/values-w460dp-land/dimens.xml b/java/com/android/incallui/video/impl/res/values-w460dp-land/dimens.xml
new file mode 100644
index 000000000..ac2d0316a
--- /dev/null
+++ b/java/com/android/incallui/video/impl/res/values-w460dp-land/dimens.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+<resources>
+ <dimen name="videocall_preview_long">116dp</dimen>
+</resources>
diff --git a/java/com/android/incallui/video/impl/res/values-w460dp/dimens.xml b/java/com/android/incallui/video/impl/res/values-w460dp/dimens.xml
index b1a86a0fa..a53fb6404 100644
--- a/java/com/android/incallui/video/impl/res/values-w460dp/dimens.xml
+++ b/java/com/android/incallui/video/impl/res/values-w460dp/dimens.xml
@@ -1,7 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
<resources>
<dimen name="videocall_button_spacing">16dp</dimen>
<dimen name="videocall_button_size">72dp</dimen>
<dimen name="videocall_preview_width">88dp</dimen>
<dimen name="videocall_preview_height">88dp</dimen>
+ <dimen name="videocall_preview_long">104dp</dimen>
</resources>
diff --git a/java/com/android/incallui/video/impl/res/values/dimens.xml b/java/com/android/incallui/video/impl/res/values/dimens.xml
index 45860036f..aa08c9d6d 100644
--- a/java/com/android/incallui/video/impl/res/values/dimens.xml
+++ b/java/com/android/incallui/video/impl/res/values/dimens.xml
@@ -1,7 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
<resources>
<dimen name="videocall_preview_width">72dp</dimen>
<dimen name="videocall_preview_height">72dp</dimen>
+ <dimen name="videocall_preview_long">84dp</dimen>
<dimen name="videocall_preview_margin_bottom">24dp</dimen>
<dimen name="videocall_preview_margin_start">24dp</dimen>
<dimen name="videocall_preview_margin_end">24dp</dimen>
diff --git a/java/com/android/incallui/video/impl/res/values/styles.xml b/java/com/android/incallui/video/impl/res/values/styles.xml
index b94400875..f73075f09 100644
--- a/java/com/android/incallui/video/impl/res/values/styles.xml
+++ b/java/com/android/incallui/video/impl/res/values/styles.xml
@@ -1,6 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
<resources>
-
<style name="Incall.Button.VideoCall" parent="Widget.AppCompat.ImageButton">
<item name="android:background">@drawable/videocall_video_button_background</item>
<item name="android:scaleType">center</item>
@@ -8,4 +22,12 @@
<item name="android:tintMode">src_atop</item>
<item name="android:stateListAnimator">@animator/disabled_alpha</item>
</style>
+ <style name="VideoPreviewHolder">
+ <item name="android:layout_gravity">bottom|start</item>
+ <item name="android:layout_width">@dimen/videocall_preview_width</item>
+ <item name="android:layout_height">@dimen/videocall_preview_long</item>
+ <item name="android:layout_marginBottom">@dimen/videocall_preview_margin_bottom</item>
+ <item name="android:layout_marginStart">@dimen/videocall_preview_margin_start</item>
+ <item name="android:background">@android:color/black</item>
+ </style>
</resources>
diff --git a/java/com/android/incallui/videotech/VideoTech.java b/java/com/android/incallui/videotech/VideoTech.java
index 39998ad4c..7da74c057 100644
--- a/java/com/android/incallui/videotech/VideoTech.java
+++ b/java/com/android/incallui/videotech/VideoTech.java
@@ -78,5 +78,7 @@ public interface VideoTech {
void onPeerDimensionsChanged(int width, int height);
void onVideoUpgradeRequestReceived();
+
+ void onUpgradedToVideo(boolean switchToSpeaker);
}
}
diff --git a/java/com/android/incallui/videotech/ims/ImsVideoCallCallback.java b/java/com/android/incallui/videotech/ims/ImsVideoCallCallback.java
index 9b5222e10..17c2e6518 100644
--- a/java/com/android/incallui/videotech/ims/ImsVideoCallCallback.java
+++ b/java/com/android/incallui/videotech/ims/ImsVideoCallCallback.java
@@ -24,6 +24,8 @@ import android.telecom.InCallService.VideoCall;
import android.telecom.VideoProfile;
import android.telecom.VideoProfile.CameraCapabilities;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.DialerImpression;
+import com.android.dialer.logging.LoggingBindings;
import com.android.incallui.videotech.VideoTech.VideoTechListener;
import com.android.incallui.videotech.utils.SessionModificationState;
@@ -31,12 +33,18 @@ import com.android.incallui.videotech.utils.SessionModificationState;
public class ImsVideoCallCallback extends VideoCall.Callback {
private static final int CLEAR_FAILED_REQUEST_TIMEOUT_MILLIS = 4000;
private final Handler handler = new Handler();
+ private final LoggingBindings logger;
private final Call call;
private final ImsVideoTech videoTech;
private final VideoTechListener listener;
private int requestedVideoState = VideoProfile.STATE_AUDIO_ONLY;
- ImsVideoCallCallback(final Call call, ImsVideoTech videoTech, VideoTechListener listener) {
+ ImsVideoCallCallback(
+ final LoggingBindings logger,
+ final Call call,
+ ImsVideoTech videoTech,
+ VideoTechListener listener) {
+ this.logger = logger;
this.call = call;
this.videoTech = videoTech;
this.listener = listener;
@@ -61,6 +69,7 @@ public class ImsVideoCallCallback extends VideoCall.Callback {
videoTech.setSessionModificationState(
SessionModificationState.RECEIVED_UPGRADE_TO_VIDEO_REQUEST);
listener.onVideoUpgradeRequestReceived();
+ logger.logImpression(DialerImpression.Type.IMS_VIDEO_REQUEST_RECEIVED);
}
}
@@ -87,7 +96,10 @@ public class ImsVideoCallCallback extends VideoCall.Callback {
handler.removeCallbacksAndMessages(null); // Clear everything
final int newSessionModificationState = getSessionModificationStateFromTelecomStatus(status);
- if (status != VideoProvider.SESSION_MODIFY_REQUEST_SUCCESS) {
+ if (status == VideoProvider.SESSION_MODIFY_REQUEST_SUCCESS) {
+ // Telecom manages audio route for us
+ listener.onUpgradedToVideo(false /* switchToSpeaker */);
+ } else {
// This will update the video UI to display the error message.
videoTech.setSessionModificationState(newSessionModificationState);
}
diff --git a/java/com/android/incallui/videotech/ims/ImsVideoTech.java b/java/com/android/incallui/videotech/ims/ImsVideoTech.java
index 66a7af58a..40fdc6fde 100644
--- a/java/com/android/incallui/videotech/ims/ImsVideoTech.java
+++ b/java/com/android/incallui/videotech/ims/ImsVideoTech.java
@@ -23,6 +23,8 @@ import android.telecom.Call.Details;
import android.telecom.VideoProfile;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.DialerImpression;
+import com.android.dialer.logging.LoggingBindings;
import com.android.incallui.video.protocol.VideoCallScreen;
import com.android.incallui.video.protocol.VideoCallScreenDelegate;
import com.android.incallui.videotech.VideoTech;
@@ -30,6 +32,7 @@ import com.android.incallui.videotech.utils.SessionModificationState;
/** ViLTE implementation */
public class ImsVideoTech implements VideoTech {
+ private final LoggingBindings logger;
private final Call call;
private final VideoTechListener listener;
private ImsVideoCallCallback callback;
@@ -37,7 +40,8 @@ public class ImsVideoTech implements VideoTech {
SessionModificationState.NO_REQUEST;
private int previousVideoState = VideoProfile.STATE_AUDIO_ONLY;
- public ImsVideoTech(VideoTechListener listener, Call call) {
+ public ImsVideoTech(LoggingBindings logger, VideoTechListener listener, Call call) {
+ this.logger = logger;
this.listener = listener;
this.call = call;
}
@@ -87,7 +91,7 @@ public class ImsVideoTech implements VideoTech {
}
if (callback == null) {
- callback = new ImsVideoCallCallback(call, this, listener);
+ callback = new ImsVideoCallCallback(logger, call, this, listener);
call.getVideoCall().registerCallback(callback);
}
@@ -137,6 +141,7 @@ public class ImsVideoTech implements VideoTech {
.sendSessionModifyRequest(
new VideoProfile(unpausedVideoState | VideoProfile.STATE_BIDIRECTIONAL));
setSessionModificationState(SessionModificationState.WAITING_FOR_UPGRADE_TO_VIDEO_RESPONSE);
+ logger.logImpression(DialerImpression.Type.IMS_VIDEO_UPGRADE_REQUESTED);
}
@Override
@@ -146,6 +151,9 @@ public class ImsVideoTech implements VideoTech {
LogUtil.i("ImsVideoTech.acceptUpgradeRequest", "videoState: " + requestedVideoState);
call.getVideoCall().sendSessionModifyResponse(new VideoProfile(requestedVideoState));
setSessionModificationState(SessionModificationState.NO_REQUEST);
+ // Telecom manages audio route for us
+ listener.onUpgradedToVideo(false /* switchToSpeaker */);
+ logger.logImpression(DialerImpression.Type.IMS_VIDEO_REQUEST_ACCEPTED);
}
@Override
@@ -153,6 +161,7 @@ public class ImsVideoTech implements VideoTech {
LogUtil.enterBlock("ImsVideoTech.acceptVideoRequestAsAudio");
call.getVideoCall().sendSessionModifyResponse(new VideoProfile(VideoProfile.STATE_AUDIO_ONLY));
setSessionModificationState(SessionModificationState.NO_REQUEST);
+ logger.logImpression(DialerImpression.Type.IMS_VIDEO_REQUEST_ACCEPTED_AS_AUDIO);
}
@Override
@@ -161,6 +170,7 @@ public class ImsVideoTech implements VideoTech {
call.getVideoCall()
.sendSessionModifyResponse(new VideoProfile(call.getDetails().getVideoState()));
setSessionModificationState(SessionModificationState.NO_REQUEST);
+ logger.logImpression(DialerImpression.Type.IMS_VIDEO_REQUEST_DECLINED);
}
@Override
@@ -172,20 +182,18 @@ public class ImsVideoTech implements VideoTech {
public void stopTransmission() {
LogUtil.enterBlock("ImsVideoTech.stopTransmission");
- int unpausedVideoState = getUnpausedVideoState(call.getDetails().getVideoState());
call.getVideoCall()
.sendSessionModifyRequest(
- new VideoProfile(unpausedVideoState & ~VideoProfile.STATE_TX_ENABLED));
+ new VideoProfile(call.getDetails().getVideoState() & ~VideoProfile.STATE_TX_ENABLED));
}
@Override
public void resumeTransmission() {
LogUtil.enterBlock("ImsVideoTech.resumeTransmission");
- int unpausedVideoState = getUnpausedVideoState(call.getDetails().getVideoState());
call.getVideoCall()
.sendSessionModifyRequest(
- new VideoProfile(unpausedVideoState | VideoProfile.STATE_TX_ENABLED));
+ new VideoProfile(call.getDetails().getVideoState() | VideoProfile.STATE_TX_ENABLED));
setSessionModificationState(SessionModificationState.WAITING_FOR_RESPONSE);
}
diff --git a/java/com/android/incallui/wifi/res/values-b+sr+Latn/strings.xml b/java/com/android/incallui/wifi/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..51a57e403
--- /dev/null
+++ b/java/com/android/incallui/wifi/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="incall_enable_wifi_calling_button" msgid="2741166159276797490">"Omogući"</string>
+</resources>
diff --git a/java/com/android/voicemail/VoicemailClient.java b/java/com/android/voicemail/VoicemailClient.java
index 74823384c..97b824b27 100644
--- a/java/com/android/voicemail/VoicemailClient.java
+++ b/java/com/android/voicemail/VoicemailClient.java
@@ -39,12 +39,34 @@ public interface VoicemailClient {
* android.content.Intent#ACTION_PROVIDER_CHANGED} will always be a self-change even if the UI is
* external to the client.
*/
- String ACTION_UPLOAD = "com.android.voicemailomtp.VoicemailClient.ACTION_UPLOAD";
+ String ACTION_UPLOAD = "com.android.voicemail.VoicemailClient.ACTION_UPLOAD";
/** Common key for passing {@link PhoneAccountHandle} in bundles. */
String PARAM_PHONE_ACCOUNT_HANDLE = "phone_account_handle";
/**
+ * Broadcast from the client to inform the app to show a legacy voicemail notification. This
+ * broadcast is same as {@link TelephonyManager#ACTION_SHOW_VOICEMAIL_NOTIFICATION}.
+ */
+ String ACTION_SHOW_LEGACY_VOICEMAIL =
+ "com.android.voicemail.VoicemailClient.ACTION_SHOW_LEGACY_VOICEMAIL";
+
+ /**
+ * Whether the visual voicemail service is enabled for the {@code phoneAccountHandle}. "Enable"
+ * means the user "wants" to have this service on, and does not mean the service is actually
+ * functional(For example, the service is blocked on the carrier side. The service will be
+ * "enabled" but all it will do is show the error).
+ */
+ boolean isVoicemailEnabled(Context context, PhoneAccountHandle phoneAccountHandle);
+
+ /**
+ * Enable or disable visual voicemail service for the {@code phoneAccountHandle}. Setting to
+ * enabled will initiate provisioning and activation. Setting to disabled will initiate
+ * deactivation.
+ */
+ void setVoicemailEnabled(Context context, PhoneAccountHandle phoneAccountHandle, boolean enabled);
+
+ /**
* Appends the selection to ignore voicemails from non-active OMTP voicemail package. In OC there
* can be multiple packages handling OMTP voicemails which represents the same source of truth.
* These packages should mark their voicemails as {@link Voicemails#IS_OMTP_VOICEMAIL} and only
@@ -92,4 +114,12 @@ public interface VoicemailClient {
* when calling into the mailbox.
*/
Intent getSetPinIntent(Context context, PhoneAccountHandle phoneAccountHandle);
+
+ /**
+ * Whether the client is activated and handling visual voicemail for the {@code
+ * phoneAccountHandle}. "Enable" is the intention to use VVM. For example VVM can be enabled but
+ * prevented from working because the carrier blocked it, or a connection problem is blocking the
+ * provisioning. Being "activated" means all setup are completed, and VVM is expected to work.
+ */
+ boolean isActivated(Context context, PhoneAccountHandle phoneAccountHandle);
}
diff --git a/java/com/android/voicemail/VoicemailPermissionHelper.java b/java/com/android/voicemail/VoicemailPermissionHelper.java
new file mode 100644
index 000000000..1a09d45fd
--- /dev/null
+++ b/java/com/android/voicemail/VoicemailPermissionHelper.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.voicemail;
+
+import android.Manifest.permission;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.support.annotation.NonNull;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Handles permission checking for the voicemail module. Currently "phone" and "sms" permissions are
+ * required.
+ */
+public class VoicemailPermissionHelper {
+
+ /** *_VOICEMAIL permissions are auto-granted by being the default dialer. */
+ private static final String[] VOICEMAIL_PERMISSIONS = {
+ permission.ADD_VOICEMAIL,
+ permission.WRITE_VOICEMAIL,
+ permission.READ_VOICEMAIL,
+ permission.READ_PHONE_STATE,
+ permission.SEND_SMS
+ };
+
+ /**
+ * Returns {@code true} if the app has all permissions required for the voicemail module to
+ * operate.
+ */
+ public static boolean hasPermissions(Context context) {
+ return getMissingPermissions(context).isEmpty();
+ }
+
+ /** Returns a list of permission that is missing for the voicemail module to operate. */
+ @NonNull
+ public static List<String> getMissingPermissions(Context context) {
+ List<String> result = new ArrayList<>();
+ for (String permission : VOICEMAIL_PERMISSIONS) {
+ if (context.checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
+ result.add(permission);
+ }
+ }
+ return result;
+ }
+}
diff --git a/java/com/android/voicemail/impl/ActivationTask.java b/java/com/android/voicemail/impl/ActivationTask.java
index c53d3c722..b0ad3bafc 100644
--- a/java/com/android/voicemail/impl/ActivationTask.java
+++ b/java/com/android/voicemail/impl/ActivationTask.java
@@ -29,8 +29,8 @@ import android.support.annotation.WorkerThread;
import android.telecom.PhoneAccountHandle;
import android.telephony.ServiceState;
import android.telephony.TelephonyManager;
-import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
+import com.android.dialer.logging.DialerImpression;
+import com.android.dialer.proguard.UsedByReflection;
import com.android.voicemail.impl.protocol.VisualVoicemailProtocol;
import com.android.voicemail.impl.scheduling.BaseTask;
import com.android.voicemail.impl.scheduling.RetryPolicy;
@@ -40,6 +40,7 @@ import com.android.voicemail.impl.sms.StatusSmsFetcher;
import com.android.voicemail.impl.sync.OmtpVvmSyncService;
import com.android.voicemail.impl.sync.SyncTask;
import com.android.voicemail.impl.sync.VvmAccountManager;
+import com.android.voicemail.impl.utils.LoggerUtils;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
@@ -55,6 +56,7 @@ import java.util.concurrent.TimeoutException;
* spontaneously sent a STATUS SMS.
*/
@TargetApi(VERSION_CODES.O)
+@UsedByReflection(value = "Tasks.java")
public class ActivationTask extends BaseTask {
private static final String TAG = "VvmActivationTask";
@@ -107,14 +109,15 @@ public class ActivationTask extends BaseTask {
}
@Override
- public void onCreate(Context context, Intent intent, int flags, int startId) {
- super.onCreate(context, intent, flags, startId);
- mMessageData = intent.getParcelableExtra(EXTRA_MESSAGE_DATA_BUNDLE);
+ public void onCreate(Context context, Bundle extras) {
+ super.onCreate(context, extras);
+ mMessageData = extras.getParcelable(EXTRA_MESSAGE_DATA_BUNDLE);
}
@Override
public Intent createRestartIntent() {
- Logger.get(getContext()).logImpression(DialerImpression.Type.VVM_AUTO_RETRY_ACTIVATION);
+ LoggerUtils.logImpressionOnMainThread(
+ getContext(), DialerImpression.Type.VVM_AUTO_RETRY_ACTIVATION);
Intent intent = super.createRestartIntent();
// mMessageData is discarded, request a fresh STATUS SMS for retries.
return intent;
@@ -124,7 +127,8 @@ public class ActivationTask extends BaseTask {
@WorkerThread
public void onExecuteInBackgroundThread() {
Assert.isNotMainThread();
- Logger.get(getContext()).logImpression(DialerImpression.Type.VVM_ACTIVATION_STARTED);
+ LoggerUtils.logImpressionOnMainThread(
+ getContext(), DialerImpression.Type.VVM_ACTIVATION_STARTED);
PhoneAccountHandle phoneAccountHandle = getPhoneAccountHandle();
if (phoneAccountHandle == null) {
// This should never happen
@@ -234,7 +238,8 @@ public class ActivationTask extends BaseTask {
helper.handleEvent(status, OmtpEvents.CONFIG_SERVICE_NOT_AVAILABLE);
}
}
- Logger.get(getContext()).logImpression(DialerImpression.Type.VVM_ACTIVATION_COMPLETED);
+ LoggerUtils.logImpressionOnMainThread(
+ getContext(), DialerImpression.Type.VVM_ACTIVATION_COMPLETED);
}
public static void updateSource(
diff --git a/java/com/android/voicemail/impl/AndroidManifest.xml b/java/com/android/voicemail/impl/AndroidManifest.xml
index 97e397385..47a4b2dd3 100644
--- a/java/com/android/voicemail/impl/AndroidManifest.xml
+++ b/java/com/android/voicemail/impl/AndroidManifest.xml
@@ -80,6 +80,16 @@
android:name="com.android.voicemail.impl.scheduling.TaskSchedulerService"
android:exported="false"/>
+ <service
+ android:name="com.android.voicemail.impl.scheduling.TaskSchedulerJobService"
+ android:permission="android.permission.BIND_JOB_SERVICE"
+ android:exported="false"/>
+
+ <service
+ android:name="com.android.voicemail.impl.StatusCheckJobService"
+ android:permission="android.permission.BIND_JOB_SERVICE"
+ android:exported="false"/>
+
<receiver android:name="com.android.voicemail.impl.OmtpReceiver"
android:exported="true">
<intent-filter>
@@ -92,5 +102,21 @@
android:exported="false"
android:windowSoftInputMode="stateVisible|adjustResize">
</activity>
+
+ <receiver android:name="com.android.voicemail.impl.VoicemailBootReceiver"
+ android:exported="false">
+ <intent-filter>
+ <action android:name="android.intent.action.BOOT_COMPLETED" />
+ </intent-filter>
+ </receiver>
+
+ <receiver android:name="com.android.voicemail.impl.VvmPackageInstallReceiver">
+ <intent-filter>
+ <!-- New O broadcast, can be received in background. Only applies to installation and not
+ updates -->
+ <action android:name="android.intent.action.PACKAGE_FIRST_ADDED" />
+ <data android:scheme="package"/>
+ </intent-filter>
+ </receiver>
</application>
</manifest>
diff --git a/java/com/android/voicemail/impl/OmtpReceiver.java b/java/com/android/voicemail/impl/OmtpReceiver.java
index 239a544c4..9baf95415 100644
--- a/java/com/android/voicemail/impl/OmtpReceiver.java
+++ b/java/com/android/voicemail/impl/OmtpReceiver.java
@@ -24,8 +24,8 @@ import android.os.Build.VERSION_CODES;
import android.telecom.PhoneAccountHandle;
import android.telephony.VisualVoicemailSms;
import com.android.dialer.common.Assert;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
import com.android.voicemail.VoicemailComponent;
import com.android.voicemail.impl.settings.VisualVoicemailSettingsUtil;
import com.android.voicemail.impl.sync.VvmAccountManager;
diff --git a/java/com/android/voicemail/impl/OmtpVvmCarrierConfigHelper.java b/java/com/android/voicemail/impl/OmtpVvmCarrierConfigHelper.java
index 095f00bb7..2f1df09dd 100644
--- a/java/com/android/voicemail/impl/OmtpVvmCarrierConfigHelper.java
+++ b/java/com/android/voicemail/impl/OmtpVvmCarrierConfigHelper.java
@@ -336,9 +336,11 @@ public class OmtpVvmCarrierConfigHelper {
public void startDeactivation() {
Assert.checkArgument(isValid());
+ VvmLog.i(TAG, "startDeactivation");
if (!isLegacyModeEnabled()) {
// SMS should still be filtered in legacy mode
VisualVoicemailService.setSmsFilterSettings(mContext, getPhoneAccountHandle(), null);
+ VvmLog.i(TAG, "filter disabled");
}
if (mProtocol != null) {
mProtocol.startDeactivation(this);
diff --git a/java/com/android/voicemail/impl/StatusCheckJobService.java b/java/com/android/voicemail/impl/StatusCheckJobService.java
new file mode 100644
index 000000000..870c5b471
--- /dev/null
+++ b/java/com/android/voicemail/impl/StatusCheckJobService.java
@@ -0,0 +1,71 @@
+/**
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * <p>Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ * <p>http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * <p>Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+package com.android.voicemail.impl;
+
+import android.annotation.TargetApi;
+import android.app.job.JobInfo;
+import android.app.job.JobParameters;
+import android.app.job.JobScheduler;
+import android.app.job.JobService;
+import android.content.ComponentName;
+import android.content.Context;
+import android.os.Build.VERSION_CODES;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
+import com.android.dialer.constants.ScheduledJobIds;
+import com.android.voicemail.impl.sync.VvmAccountManager;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * A job to perform {@link StatusCheckTask} once per day, performing book keeping to ensure the
+ * credentials and status for a activated voicemail account is still correct. A task will be
+ * scheduled for each active voicemail account. The status is expected to be always in sync, the
+ * check is a failsafe to mimic the previous status check on signal return behavior.
+ */
+@TargetApi(VERSION_CODES.O)
+public class StatusCheckJobService extends JobService {
+
+ public static void schedule(Context context) {
+ JobScheduler jobScheduler = context.getSystemService(JobScheduler.class);
+ if (jobScheduler.getPendingJob(ScheduledJobIds.VVM_STATUS_CHECK_JOB) != null) {
+ VvmLog.i("StatusCheckJobService.schedule", "job already scheduled");
+ return;
+ }
+
+ jobScheduler.schedule(
+ new JobInfo.Builder(
+ ScheduledJobIds.VVM_STATUS_CHECK_JOB,
+ new ComponentName(context, StatusCheckJobService.class))
+ .setPeriodic(TimeUnit.DAYS.toMillis(1))
+ .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
+ .setRequiresCharging(true)
+ .build());
+ }
+
+ @Override
+ public boolean onStartJob(JobParameters params) {
+ for (PhoneAccountHandle phoneAccountHandle :
+ getSystemService(TelecomManager.class).getCallCapablePhoneAccounts()) {
+ if (VvmAccountManager.isAccountActivated(this, phoneAccountHandle)) {
+ StatusCheckTask.start(this, phoneAccountHandle);
+ }
+ }
+ return false; // not running in background
+ }
+
+ @Override
+ public boolean onStopJob(JobParameters params) {
+ return false; // don't retry
+ }
+}
diff --git a/java/com/android/voicemail/impl/StatusCheckTask.java b/java/com/android/voicemail/impl/StatusCheckTask.java
new file mode 100644
index 000000000..7699e9848
--- /dev/null
+++ b/java/com/android/voicemail/impl/StatusCheckTask.java
@@ -0,0 +1,128 @@
+/**
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * <p>Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ * <p>http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * <p>Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+package com.android.voicemail.impl;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build.VERSION_CODES;
+import android.os.Bundle;
+import android.telecom.PhoneAccountHandle;
+import android.telephony.ServiceState;
+import android.telephony.TelephonyManager;
+import com.android.dialer.logging.DialerImpression;
+import com.android.dialer.proguard.UsedByReflection;
+import com.android.voicemail.impl.scheduling.BaseTask;
+import com.android.voicemail.impl.sms.StatusMessage;
+import com.android.voicemail.impl.sms.StatusSmsFetcher;
+import com.android.voicemail.impl.sync.VvmAccountManager;
+import com.android.voicemail.impl.utils.LoggerUtils;
+import java.io.IOException;
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * Task to verify the account status is still correct. This task is only for book keeping so any
+ * error is ignored and will not retry. If the provision status sent by the carrier is "ready" the
+ * access credentials will be updated (although it is not expected to change without the carrier
+ * actively sending out an STATUS SMS which will be handled by {@link
+ * com.android.voicemail.impl.sms.OmtpMessageReceiver}). If the provisioning status is not ready an
+ * {@link ActivationTask} will be launched to attempt to correct it.
+ */
+@TargetApi(VERSION_CODES.O)
+@UsedByReflection(value = "Tasks.java")
+public class StatusCheckTask extends BaseTask {
+
+ public StatusCheckTask() {
+ super(TASK_STATUS_CHECK);
+ }
+
+ public static void start(Context context, PhoneAccountHandle phoneAccountHandle) {
+ Intent intent = BaseTask.createIntent(context, StatusCheckTask.class, phoneAccountHandle);
+ context.startService(intent);
+ }
+
+ @Override
+ public void onExecuteInBackgroundThread() {
+ TelephonyManager telephonyManager =
+ getContext()
+ .getSystemService(TelephonyManager.class)
+ .createForPhoneAccountHandle(getPhoneAccountHandle());
+
+ if (telephonyManager == null) {
+ VvmLog.w(
+ "StatusCheckTask.onExecuteInBackgroundThread",
+ getPhoneAccountHandle() + " no longer valid");
+ return;
+ }
+ if (telephonyManager.getServiceState().getState() != ServiceState.STATE_IN_SERVICE) {
+ VvmLog.i(
+ "StatusCheckTask.onExecuteInBackgroundThread",
+ getPhoneAccountHandle() + " not in service");
+ return;
+ }
+ OmtpVvmCarrierConfigHelper config =
+ new OmtpVvmCarrierConfigHelper(getContext(), getPhoneAccountHandle());
+ if (!config.isValid()) {
+ VvmLog.e(
+ "StatusCheckTask.onExecuteInBackgroundThread",
+ "config no longer valid for " + getPhoneAccountHandle());
+ VvmAccountManager.removeAccount(getContext(), getPhoneAccountHandle());
+ return;
+ }
+
+ Bundle data;
+ try (StatusSmsFetcher fetcher = new StatusSmsFetcher(getContext(), getPhoneAccountHandle())) {
+ config.getProtocol().requestStatus(config, fetcher.getSentIntent());
+ // Both the fetcher and OmtpMessageReceiver will be triggered, but
+ // OmtpMessageReceiver will just route the SMS back to ActivationTask, which will be
+ // rejected because the task is still running.
+ data = fetcher.get();
+ } catch (TimeoutException e) {
+ VvmLog.e("StatusCheckTask.onExecuteInBackgroundThread", "timeout requesting status");
+ return;
+ } catch (CancellationException e) {
+ VvmLog.e("StatusCheckTask.onExecuteInBackgroundThread", "Unable to send status request SMS");
+ return;
+ } catch (InterruptedException | ExecutionException | IOException e) {
+ VvmLog.e("StatusCheckTask.onExecuteInBackgroundThread", "can't get future STATUS SMS", e);
+ return;
+ }
+
+ StatusMessage message = new StatusMessage(data);
+ VvmLog.i(
+ "StatusCheckTask.onExecuteInBackgroundThread",
+ "STATUS SMS received: st="
+ + message.getProvisioningStatus()
+ + ", rc="
+ + message.getReturnCode());
+ if (message.getProvisioningStatus().equals(OmtpConstants.SUBSCRIBER_READY)) {
+ VvmLog.i(
+ "StatusCheckTask.onExecuteInBackgroundThread",
+ "subscriber ready, no activation required");
+ LoggerUtils.logImpressionOnMainThread(
+ getContext(), DialerImpression.Type.VVM_STATUS_CHECK_READY);
+ VvmAccountManager.addAccount(getContext(), getPhoneAccountHandle(), message);
+ } else {
+ VvmLog.i(
+ "StatusCheckTask.onExecuteInBackgroundThread",
+ "subscriber not ready, attempting reactivation");
+ VvmAccountManager.removeAccount(getContext(), getPhoneAccountHandle());
+ LoggerUtils.logImpressionOnMainThread(
+ getContext(), DialerImpression.Type.VVM_STATUS_CHECK_REACTIVATION);
+ ActivationTask.start(getContext(), getPhoneAccountHandle(), data);
+ }
+ }
+}
diff --git a/java/com/android/voicemail/impl/VoicemailBootReceiver.java b/java/com/android/voicemail/impl/VoicemailBootReceiver.java
new file mode 100644
index 000000000..0a3e61a01
--- /dev/null
+++ b/java/com/android/voicemail/impl/VoicemailBootReceiver.java
@@ -0,0 +1,31 @@
+/**
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * <p>Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ * <p>http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * <p>Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+package com.android.voicemail.impl;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import com.android.voicemail.VoicemailComponent;
+
+/** Receives {@link Intent#ACTION_BOOT_COMPLETED} for the voicemail module. */
+public class VoicemailBootReceiver extends BroadcastReceiver {
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (!VoicemailComponent.get(context).getVoicemailClient().isVoicemailModuleEnabled()) {
+ return;
+ }
+ StatusCheckJobService.schedule(context);
+ }
+}
diff --git a/java/com/android/voicemail/impl/VoicemailClientImpl.java b/java/com/android/voicemail/impl/VoicemailClientImpl.java
index 31a12791c..7747b2486 100644
--- a/java/com/android/voicemail/impl/VoicemailClientImpl.java
+++ b/java/com/android/voicemail/impl/VoicemailClientImpl.java
@@ -31,6 +31,7 @@ import com.android.voicemail.VoicemailClient;
import com.android.voicemail.impl.settings.VisualVoicemailSettingsUtil;
import com.android.voicemail.impl.settings.VoicemailChangePinActivity;
import com.android.voicemail.impl.settings.VoicemailSettingsFragment;
+import com.android.voicemail.impl.sync.VvmAccountManager;
import java.util.List;
import javax.inject.Inject;
@@ -67,6 +68,17 @@ public class VoicemailClientImpl implements VoicemailClient {
return true;
}
+ @Override
+ public boolean isVoicemailEnabled(Context context, PhoneAccountHandle phoneAccountHandle) {
+ return VisualVoicemailSettingsUtil.isEnabled(context, phoneAccountHandle);
+ }
+
+ @Override
+ public void setVoicemailEnabled(
+ Context context, PhoneAccountHandle phoneAccountHandle, boolean enabled) {
+ VisualVoicemailSettingsUtil.setEnabled(context, phoneAccountHandle, enabled);
+ }
+
@Nullable
@Override
public String getSettingsFragment() {
@@ -85,7 +97,7 @@ public class VoicemailClientImpl implements VoicemailClient {
return false;
}
- if (!ConfigProviderBindings.get(context).getBoolean(ALLOW_VOICEMAIL_ARCHIVE, true)) {
+ if (!ConfigProviderBindings.get(context).getBoolean(ALLOW_VOICEMAIL_ARCHIVE, false)) {
LogUtil.i(
"VoicemailClientImpl.isVoicemailArchiveAllowed",
"feature disabled by config: %s",
@@ -109,6 +121,11 @@ public class VoicemailClientImpl implements VoicemailClient {
return intent;
}
+ @Override
+ public boolean isActivated(Context context, PhoneAccountHandle phoneAccountHandle) {
+ return VvmAccountManager.isAccountActivated(context, phoneAccountHandle);
+ }
+
@TargetApi(VERSION_CODES.O)
@Override
public void appendOmtpVoicemailSelectionClause(
diff --git a/java/com/android/voicemail/impl/VoicemailModule.java b/java/com/android/voicemail/impl/VoicemailModule.java
index c3e5714d5..5a4e739f5 100644
--- a/java/com/android/voicemail/impl/VoicemailModule.java
+++ b/java/com/android/voicemail/impl/VoicemailModule.java
@@ -16,8 +16,10 @@
package com.android.voicemail.impl;
+import android.content.Context;
import android.support.v4.os.BuildCompat;
import com.android.voicemail.VoicemailClient;
+import com.android.voicemail.VoicemailPermissionHelper;
import com.android.voicemail.stub.StubVoicemailClient;
import dagger.Module;
import dagger.Provides;
@@ -29,12 +31,21 @@ public final class VoicemailModule {
@Provides
@Singleton
- static VoicemailClient provideVoicemailClient() {
- if (BuildCompat.isAtLeastO()) {
- return new VoicemailClientImpl();
- } else {
+ static VoicemailClient provideVoicemailClient(Context context) {
+ if (!BuildCompat.isAtLeastO()) {
+ VvmLog.i("VoicemailModule.provideVoicemailClient", "SDK below O");
return new StubVoicemailClient();
}
+
+ if (!VoicemailPermissionHelper.hasPermissions(context)) {
+ VvmLog.i(
+ "VoicemailModule.provideVoicemailClient",
+ "missing permissions " + VoicemailPermissionHelper.getMissingPermissions(context));
+ return new StubVoicemailClient();
+ }
+
+ VvmLog.i("VoicemailModule.provideVoicemailClient", "providing VoicemailClientImpl");
+ return new VoicemailClientImpl();
}
private VoicemailModule() {}
diff --git a/java/com/android/voicemail/impl/VvmPackageInstallReceiver.java b/java/com/android/voicemail/impl/VvmPackageInstallReceiver.java
index d92012147..1e2de6070 100644
--- a/java/com/android/voicemail/impl/VvmPackageInstallReceiver.java
+++ b/java/com/android/voicemail/impl/VvmPackageInstallReceiver.java
@@ -25,7 +25,8 @@ import com.android.voicemail.impl.settings.VisualVoicemailSettingsUtil;
/**
* When a new package is installed, check if it matches any of the vvm carrier apps of the currently
- * enabled dialer vvm sources.
+ * enabled dialer VVM sources. The dialer VVM client will be disabled upon carrier VVM app
+ * installation, unless it was explicitly enabled by the user.
*/
public class VvmPackageInstallReceiver extends BroadcastReceiver {
@@ -46,25 +47,34 @@ public class VvmPackageInstallReceiver extends BroadcastReceiver {
return;
}
+ // This get called every time an app is installed and will be noisy. Don't log until the app
+ // is identified as a carrier VVM app.
for (PhoneAccountHandle phoneAccount :
context.getSystemService(TelecomManager.class).getCallCapablePhoneAccounts()) {
- if (VisualVoicemailSettingsUtil.isEnabledUserSet(context, phoneAccount)) {
- // Skip the check if this voicemail source's setting is overridden by the user.
- continue;
- }
-
OmtpVvmCarrierConfigHelper carrierConfigHelper =
new OmtpVvmCarrierConfigHelper(context, phoneAccount);
+ if (!carrierConfigHelper.isValid()) {
+ continue;
+ }
if (carrierConfigHelper.getCarrierVvmPackageNames() == null) {
continue;
}
- if (carrierConfigHelper.getCarrierVvmPackageNames().contains(packageName)) {
- // Force deactivate the client. The user can re-enable it in the settings.
- // There is no need to update the settings for deactivation. At this point, if the
- // default value is used it should be false because a carrier package is present.
- VvmLog.i(TAG, "Carrier VVM package installed, disabling system VVM client");
- VisualVoicemailSettingsUtil.setEnabled(context, phoneAccount, false);
+ if (!carrierConfigHelper.getCarrierVvmPackageNames().contains(packageName)) {
+ continue;
}
+
+ VvmLog.i(TAG, "Carrier app installed");
+ if (VisualVoicemailSettingsUtil.isEnabledUserSet(context, phoneAccount)) {
+ // Skip the check if this voicemail source's setting is overridden by the user.
+ VvmLog.i(TAG, "VVM enabled by user, not disabling");
+ continue;
+ }
+
+ // Force deactivate the client. The user can re-enable it in the settings.
+ // There is no need to update the settings for deactivation. At this point, if the
+ // default value is used it should be false because a carrier package is present.
+ VvmLog.i(TAG, "Carrier VVM package installed, disabling system VVM client");
+ VisualVoicemailSettingsUtil.setEnabled(context, phoneAccount, false);
}
}
}
diff --git a/java/com/android/voicemail/impl/fetch/FetchVoicemailReceiver.java b/java/com/android/voicemail/impl/fetch/FetchVoicemailReceiver.java
index b0285672e..0348a60c5 100644
--- a/java/com/android/voicemail/impl/fetch/FetchVoicemailReceiver.java
+++ b/java/com/android/voicemail/impl/fetch/FetchVoicemailReceiver.java
@@ -120,6 +120,16 @@ public class FetchVoicemailReceiver extends BroadcastReceiver {
new PhoneAccountHandle(
ComponentName.unflattenFromString(cursor.getString(PHONE_ACCOUNT_COMPONENT_NAME)),
cursor.getString(PHONE_ACCOUNT_ID));
+ TelephonyManager telephonyManager =
+ context
+ .getSystemService(TelephonyManager.class)
+ .createForPhoneAccountHandle(mPhoneAccount);
+ if (telephonyManager == null) {
+ // can happen when trying to fetch voicemails from a SIM that is no longer on the
+ // device
+ VvmLog.e(TAG, "account no longer valid, cannot retrieve message");
+ return;
+ }
if (!VvmAccountManager.isAccountActivated(context, mPhoneAccount)) {
mPhoneAccount = getAccountFromMarshmallowAccount(context, mPhoneAccount);
if (mPhoneAccount == null) {
diff --git a/java/com/android/voicemail/impl/mail/Address.java b/java/com/android/voicemail/impl/mail/Address.java
index 3a7a86607..ac8e8a294 100644
--- a/java/com/android/voicemail/impl/mail/Address.java
+++ b/java/com/android/voicemail/impl/mail/Address.java
@@ -25,8 +25,9 @@ import android.text.util.Rfc822Tokenizer;
import com.android.voicemail.impl.mail.utils.LogUtils;
import java.util.ArrayList;
import java.util.regex.Pattern;
+import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.codec.DecoderUtil;
import org.apache.james.mime4j.codec.EncoderUtil;
-import org.apache.james.mime4j.decoder.DecoderUtil;
/**
* This class represent email address.
@@ -121,7 +122,8 @@ public class Address implements Parcelable {
if (TextUtils.isEmpty(rawAddress)) {
return null;
}
- String name, address;
+ String name;
+ String address;
final Rfc822Token[] tokens = Rfc822Tokenizer.tokenize(rawAddress);
if (tokens.length > 0) {
final String tokenizedName = tokens[0].getName();
@@ -171,7 +173,7 @@ public class Address implements Parcelable {
if (personal != null) {
personal = REMOVE_OPTIONAL_DQUOTE.matcher(personal).replaceAll("$1");
personal = UNQUOTE.matcher(personal).replaceAll("$1");
- personal = DecoderUtil.decodeEncodedWords(personal);
+ personal = DecoderUtil.decodeEncodedWords(personal, DecodeMonitor.STRICT);
if (personal.length() == 0) {
personal = null;
}
diff --git a/java/com/android/voicemail/impl/mail/internet/MimeMessage.java b/java/com/android/voicemail/impl/mail/internet/MimeMessage.java
index dfb7d7c25..589720660 100644
--- a/java/com/android/voicemail/impl/mail/internet/MimeMessage.java
+++ b/java/com/android/voicemail/impl/mail/internet/MimeMessage.java
@@ -34,12 +34,14 @@ import java.util.Date;
import java.util.Locale;
import java.util.Stack;
import java.util.regex.Pattern;
-import org.apache.james.mime4j.BodyDescriptor;
-import org.apache.james.mime4j.ContentHandler;
-import org.apache.james.mime4j.EOLConvertingInputStream;
-import org.apache.james.mime4j.MimeStreamParser;
-import org.apache.james.mime4j.field.DateTimeField;
-import org.apache.james.mime4j.field.Field;
+import org.apache.james.mime4j.MimeException;
+import org.apache.james.mime4j.dom.field.DateTimeField;
+import org.apache.james.mime4j.field.DefaultFieldParser;
+import org.apache.james.mime4j.io.EOLConvertingInputStream;
+import org.apache.james.mime4j.parser.ContentHandler;
+import org.apache.james.mime4j.parser.MimeStreamParser;
+import org.apache.james.mime4j.stream.BodyDescriptor;
+import org.apache.james.mime4j.stream.Field;
/**
* An implementation of Message that stores all of its metadata in RFC 822 and RFC 2045 style
@@ -64,7 +66,6 @@ public class MimeMessage extends Message {
private Body mBody;
protected int mSize;
private boolean mInhibitLocalMessageId = false;
- private boolean mComplete = true;
// Shared random source for generating local message-id values
private static final java.util.Random sRandom = new java.util.Random();
@@ -114,7 +115,7 @@ public class MimeMessage extends Message {
* @throws IOException
* @throws MessagingException
*/
- public MimeMessage(InputStream in) throws IOException, MessagingException {
+ public MimeMessage(InputStream in) throws IOException, MessagingException, MimeException {
parse(in);
}
@@ -136,17 +137,9 @@ public class MimeMessage extends Message {
return parser;
}
- protected void parse(InputStream in) throws IOException, MessagingException {
+ public void parse(InputStream in) throws IOException, MessagingException, MimeException {
final MimeStreamParser parser = init();
parser.parse(new EOLConvertingInputStream(in));
- mComplete = !parser.getPrematureEof();
- }
-
- public void parse(InputStream in, EOLConvertingInputStream.Callback callback)
- throws IOException, MessagingException {
- final MimeStreamParser parser = init();
- parser.parse(new EOLConvertingInputStream(in, getSize(), callback));
- mComplete = !parser.getPrematureEof();
}
/**
@@ -171,7 +164,8 @@ public class MimeMessage extends Message {
try {
DateTimeField field =
(DateTimeField)
- Field.parse("Date: " + MimeUtility.unfoldAndDecode(getFirstHeader("Date")));
+ DefaultFieldParser.parse(
+ "Date: " + MimeUtility.unfoldAndDecode(getFirstHeader("Date")));
mSentDate = field.getDate();
// TODO: We should make it more clear what exceptions can be thrown here,
// and whether they reflect a normal or error condition.
@@ -184,7 +178,7 @@ public class MimeMessage extends Message {
try {
DateTimeField field =
(DateTimeField)
- Field.parse(
+ DefaultFieldParser.parse(
"Date: " + MimeUtility.unfoldAndDecode(getFirstHeader("Delivery-date")));
mSentDate = field.getDate();
// TODO: We should make it more clear what exceptions can be thrown here,
@@ -228,10 +222,6 @@ public class MimeMessage extends Message {
}
}
- public boolean isComplete() {
- return mComplete;
- }
-
@Override
public String getMimeType() throws MessagingException {
return MimeUtility.getHeaderParameter(getContentType(), null);
@@ -577,10 +567,10 @@ public class MimeMessage extends Message {
}
@Override
- public void field(String fieldData) {
+ public void field(Field rawField) {
expect(Part.class);
try {
- final String[] tokens = fieldData.split(":", 2);
+ final String[] tokens = rawField.getRaw().toString().split(":", 2);
((Part) stack.peek()).addHeader(tokens[0], tokens[1].trim());
} catch (MessagingException me) {
throw new Error(me);
diff --git a/java/com/android/voicemail/impl/mail/internet/MimeUtility.java b/java/com/android/voicemail/impl/mail/internet/MimeUtility.java
index 99846027b..bd85e478c 100644
--- a/java/com/android/voicemail/impl/mail/internet/MimeUtility.java
+++ b/java/com/android/voicemail/impl/mail/internet/MimeUtility.java
@@ -34,9 +34,10 @@ import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.io.IOUtils;
+import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.codec.DecoderUtil;
import org.apache.james.mime4j.codec.EncoderUtil;
-import org.apache.james.mime4j.decoder.DecoderUtil;
-import org.apache.james.mime4j.decoder.QuotedPrintableInputStream;
+import org.apache.james.mime4j.codec.QuotedPrintableInputStream;
import org.apache.james.mime4j.util.CharsetUtil;
public class MimeUtility {
@@ -65,7 +66,7 @@ public class MimeUtility {
if (s == null) {
return null;
}
- return DecoderUtil.decodeEncodedWords(s);
+ return DecoderUtil.decodeEncodedWords(s, DecodeMonitor.STRICT);
}
public static String unfoldAndDecode(String s) {
@@ -235,7 +236,7 @@ public class MimeUtility {
/*
* See if there is conversion from the MIME charset to the Java one.
*/
- charset = CharsetUtil.toJavaCharset(charset);
+ charset = CharsetUtil.lookup(charset).name();
}
/*
* No encoding, so use us-ascii, which is the standard.
diff --git a/java/com/android/voicemail/impl/mail/store/ImapFolder.java b/java/com/android/voicemail/impl/mail/store/ImapFolder.java
index 1d9b01120..5760ee216 100644
--- a/java/com/android/voicemail/impl/mail/store/ImapFolder.java
+++ b/java/com/android/voicemail/impl/mail/store/ImapFolder.java
@@ -22,6 +22,7 @@ import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.Base64DataException;
import com.android.voicemail.impl.OmtpEvents;
+import com.android.voicemail.impl.VvmLog;
import com.android.voicemail.impl.mail.AuthenticationFailedException;
import com.android.voicemail.impl.mail.Body;
import com.android.voicemail.impl.mail.FetchProfile;
@@ -41,7 +42,6 @@ import com.android.voicemail.impl.mail.store.imap.ImapElement;
import com.android.voicemail.impl.mail.store.imap.ImapList;
import com.android.voicemail.impl.mail.store.imap.ImapResponse;
import com.android.voicemail.impl.mail.store.imap.ImapString;
-import com.android.voicemail.impl.mail.utils.LogUtils;
import com.android.voicemail.impl.mail.utils.Utility;
import java.io.IOException;
import java.io.InputStream;
@@ -66,7 +66,7 @@ public class ImapFolder {
private String mMode;
private boolean mExists;
/** A set of hashes that can be used to track dirtiness */
- Object mHash[];
+ Object[] mHash;
public static final String MODE_READ_ONLY = "mode_read_only";
public static final String MODE_READ_WRITE = "mode_read_write";
@@ -136,7 +136,7 @@ public class ImapFolder {
try {
expunge();
} catch (MessagingException e) {
- LogUtils.e(TAG, e, "Messaging Exception");
+ VvmLog.e(TAG, "Messaging Exception", e);
}
}
mMessageCount = -1;
@@ -174,13 +174,13 @@ public class ImapFolder {
try {
final String command = ImapConstants.UID_SEARCH + " " + searchCriteria;
final String[] result = getSearchUids(mConnection.executeSimpleCommand(command));
- LogUtils.d(TAG, "searchForUids '" + searchCriteria + "' results: " + result.length);
+ VvmLog.d(TAG, "searchForUids '" + searchCriteria + "' results: " + result.length);
return result;
} catch (ImapException me) {
- LogUtils.d(TAG, "ImapException in search: " + searchCriteria, me);
+ VvmLog.d(TAG, "ImapException in search: " + searchCriteria, me);
return Utility.EMPTY_STRINGS; // Not found
} catch (IOException ioe) {
- LogUtils.d(TAG, "IOException in search: " + searchCriteria, ioe);
+ VvmLog.d(TAG, "IOException in search: " + searchCriteria, ioe);
mStore.getImapHelper().handleEvent(OmtpEvents.DATA_GENERIC_IMAP_IOE);
throw ioExceptionHandler(mConnection, ioe);
}
@@ -199,7 +199,7 @@ public class ImapFolder {
return new ImapMessage(uid, this);
}
}
- LogUtils.e(TAG, "UID " + uid + " not found on server");
+ VvmLog.e(TAG, "UID " + uid + " not found on server");
return null;
}
@@ -235,7 +235,7 @@ public class ImapFolder {
try {
fetchInternal(messages, fp, listener);
} catch (RuntimeException e) { // Probably a parser error.
- LogUtils.w(TAG, "Exception detected: " + e.getMessage());
+ VvmLog.w(TAG, "Exception detected: " + e.getMessage());
throw e;
}
}
@@ -346,7 +346,11 @@ public class ImapFolder {
message.setInternalDate(internalDate);
message.setSize(size);
- message.parse(Utility.streamFromAsciiString(header));
+ try {
+ message.parse(Utility.streamFromAsciiString(header));
+ } catch (Exception e) {
+ VvmLog.e(TAG, "Error parsing header %s", e);
+ }
}
if (fp.contains(FetchProfile.Item.STRUCTURE)) {
ImapList bs = fetchList.getKeyedListOrEmpty(ImapConstants.BODYSTRUCTURE);
@@ -354,7 +358,7 @@ public class ImapFolder {
try {
parseBodyStructure(bs, message, ImapConstants.TEXT);
} catch (MessagingException e) {
- LogUtils.v(TAG, e, "Error handling message");
+ VvmLog.v(TAG, "Error handling message", e);
message.setBody(null);
}
}
@@ -365,11 +369,15 @@ public class ImapFolder {
// TODO Should we accept "RFC822" as well??
ImapString body = fetchList.getKeyedStringOrEmpty("BODY[]", true);
InputStream bodyStream = body.getAsStream();
- message.parse(bodyStream);
+ try {
+ message.parse(bodyStream);
+ } catch (Exception e) {
+ VvmLog.e(TAG, "Error parsing body %s", e);
+ }
}
if (fetchPart != null) {
InputStream bodyStream = fetchList.getKeyedStringOrEmpty("BODY[", true).getAsStream();
- String encodings[] = fetchPart.getHeader(MimeHeader.HEADER_CONTENT_TRANSFER_ENCODING);
+ String[] encodings = fetchPart.getHeader(MimeHeader.HEADER_CONTENT_TRANSFER_ENCODING);
String contentTransferEncoding = null;
if (encodings != null && encodings.length > 0) {
@@ -397,7 +405,7 @@ public class ImapFolder {
// from here. This blanket catch-all is because we're not sure what to
// do if we don't have a contentTransferEncoding, and we don't have
// time to figure out what exceptions might be thrown.
- LogUtils.e(TAG, "Error fetching body %s", e);
+ VvmLog.e(TAG, "Error fetching body %s", e);
}
}
@@ -782,7 +790,7 @@ public class ImapFolder {
}
private MessagingException ioExceptionHandler(ImapConnection connection, IOException ioe) {
- LogUtils.d(TAG, "IO Exception detected: ", ioe);
+ VvmLog.d(TAG, "IO Exception detected: ", ioe);
connection.close();
if (connection == mConnection) {
mConnection = null; // To prevent close() from returning the connection to the pool.
diff --git a/java/com/android/voicemail/impl/mail/store/ImapStore.java b/java/com/android/voicemail/impl/mail/store/ImapStore.java
index cadbe593f..838bae257 100644
--- a/java/com/android/voicemail/impl/mail/store/ImapStore.java
+++ b/java/com/android/voicemail/impl/mail/store/ImapStore.java
@@ -25,6 +25,7 @@ import com.android.voicemail.impl.mail.MessagingException;
import com.android.voicemail.impl.mail.internet.MimeMessage;
import java.io.IOException;
import java.io.InputStream;
+import org.apache.james.mime4j.MimeException;
public class ImapStore {
/**
@@ -112,7 +113,7 @@ public class ImapStore {
}
@Override
- public void parse(InputStream in) throws IOException, MessagingException {
+ public void parse(InputStream in) throws IOException, MessagingException, MimeException {
super.parse(in);
}
diff --git a/java/com/android/voicemail/impl/protocol/Vvm3Protocol.java b/java/com/android/voicemail/impl/protocol/Vvm3Protocol.java
index 5a720c609..fc7fdf3d4 100644
--- a/java/com/android/voicemail/impl/protocol/Vvm3Protocol.java
+++ b/java/com/android/voicemail/impl/protocol/Vvm3Protocol.java
@@ -25,8 +25,7 @@ import android.os.Bundle;
import android.support.annotation.Nullable;
import android.telecom.PhoneAccountHandle;
import android.text.TextUtils;
-import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
+import com.android.dialer.logging.DialerImpression;
import com.android.voicemail.impl.ActivationTask;
import com.android.voicemail.impl.OmtpConstants;
import com.android.voicemail.impl.OmtpEvents;
@@ -45,6 +44,7 @@ import com.android.voicemail.impl.sms.Vvm3MessageSender;
import com.android.voicemail.impl.sync.VvmNetworkRequest;
import com.android.voicemail.impl.sync.VvmNetworkRequest.NetworkWrapper;
import com.android.voicemail.impl.sync.VvmNetworkRequest.RequestFailedException;
+import com.android.voicemail.impl.utils.LoggerUtils;
import java.io.IOException;
import java.security.SecureRandom;
import java.util.Locale;
@@ -116,7 +116,8 @@ public class Vvm3Protocol extends VisualVoicemailProtocol {
StatusMessage message,
Bundle data) {
VvmLog.i(TAG, "start vvm3 provisioning");
- Logger.get(config.getContext()).logImpression(DialerImpression.Type.VVM_PROVISIONING_STARTED);
+ LoggerUtils.logImpressionOnMainThread(
+ config.getContext(), DialerImpression.Type.VVM_PROVISIONING_STARTED);
if (OmtpConstants.SUBSCRIBER_UNKNOWN.equals(message.getProvisioningStatus())) {
VvmLog.i(TAG, "Provisioning status: Unknown");
if (VVM3_UNKNOWN_SUBSCRIBER_CAN_SUBSCRIBE_RESPONSE_CODE.equals(message.getReturnCode())) {
@@ -229,8 +230,8 @@ public class Vvm3Protocol extends VisualVoicemailProtocol {
// Only close new user tutorial if the PIN has been changed.
helper.closeNewUserTutorial();
VvmLog.i(TAG, "new user: NUT closed");
- Logger.get(config.getContext())
- .logImpression(DialerImpression.Type.VVM_PROVISIONING_COMPLETED);
+ LoggerUtils.logImpressionOnMainThread(
+ config.getContext(), DialerImpression.Type.VVM_PROVISIONING_COMPLETED);
config.requestStatus(null);
}
} catch (InitializingException | MessagingException | IOException e) {
diff --git a/java/com/android/voicemail/impl/res/values-af/strings.xml b/java/com/android/voicemail/impl/res/values-af/strings.xml
index b209eea0d..71263217f 100644
--- a/java/com/android/voicemail/impl/res/values-af/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-af/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Gevorderde instellings"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Visuele stemboodskap"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Ekstra rugsteun en berging"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Dit is \'n eksperimentele kenmerk"</i></b>" wat ons tans toets. Dit kan potensieel stemboodskappe van jou stemboodskapbediener af uitvee. Daar is geen waarborg dat hierdie kenmerk in die toekoms gesteun sal word nie. Ons sal egter graag terugvoer oor die kenmerk wil hê."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Stel PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Verander PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Visuele stemboodskap moet geaktiveer wees om PIN te verander"</string>
diff --git a/java/com/android/voicemail/impl/res/values-am/strings.xml b/java/com/android/voicemail/impl/res/values-am/strings.xml
index 4124de5f7..d350bbd94 100644
--- a/java/com/android/voicemail/impl/res/values-am/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-am/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"የላቁ ቅንብሮች"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"ምስላዊ የድምፅ መልዕክት"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"ተጨማሪ ምትኬ እና ማከማቻ"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"ይህ የሙከራ ባህሪ ነው"</i></b>" አሁን እየሞከርን ነው። ይህ ምናልባት ከድምፅ መልዕክት አገልጋይዎ ላይ የድምፅ መልዕክቶችን ሊሰርዝ ይችላል። ለወደፊቱ ይህን ባህሪ የመደገፍ ዋስትናዎችም የሉም። ነገር ግን በባህሪው ላይ ግብረመልስ ብናገኝ እንወዳለን።"</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"ፒን ያዘጋጁ"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"ፒን ይቀይሩ"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"ፒን ለመቀየር የእይታ የድምጽ መልዕክት መንቃት አለበት"</string>
diff --git a/java/com/android/voicemail/impl/res/values-ar/strings.xml b/java/com/android/voicemail/impl/res/values-ar/strings.xml
index 5d6fbba37..679dcce9c 100644
--- a/java/com/android/voicemail/impl/res/values-ar/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ar/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"الإعدادات المتقدمة"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"بريد صوتي مرئي"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"نسخة احتياطية وسعة تخزين إضافية"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"هذه الميزة تجريبية"</i></b>" نحن حاليًا في مرحلة اختبار. سيؤدي هذا على الأرجح إلى حذف رسائل البريد الصوتي من خادم البريد الصوتي. لا توجد أي ضمانات بشأن دعم هذه الميزة مستقبلاً. إلا أننا نود الحصول على تعليقات بشأن هذه الميزة."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"تعيين رقم التعريف الشخصي"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"تغيير رقم التعريف الشخصي"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"ينبغي تشغيل البريد الصوتي المرئي لتغيير رقم التعريف الشخصي"</string>
diff --git a/java/com/android/voicemail/impl/res/values-az/strings.xml b/java/com/android/voicemail/impl/res/values-az/strings.xml
index ce68f9963..87b4c0692 100644
--- a/java/com/android/voicemail/impl/res/values-az/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-az/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Qabaqcıl Ayarlar"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Görünən Səsli e-poçt"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Əlavə yedəkləmə və yaddaş"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" Bu, hazırda yoxladığımız "<b><i>"eksperimantal funksiyadır"</i></b>". Bununla səsli e-poçt serverindən səsli e-məktublar potensial olaraq silinəcək. Gələcəkdə bu funksiyanın dəstəklənəcəyinə zəmanət verilmir. Lakin funksiya haqqında əks əlaqənizi istərdik."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"PIN ayarlayın"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN-i dəyişin"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN-i dəyişmək üçün görünən səsli e-poçt aktiv olmalıdır"</string>
diff --git a/java/com/android/voicemail/impl/res/values-b+sr+Latn/strings.xml b/java/com/android/voicemail/impl/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 000000000..193913081
--- /dev/null
+++ b/java/com/android/voicemail/impl/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2007 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="voicemail_settings_with_label" msgid="563926539137546586">"Govorna pošta (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
+ <string name="voicemail_settings_title" msgid="6685263321755930738">"Govorna pošta"</string>
+ <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibracija"</string>
+ <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibracija"</string>
+ <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Zvuk"</string>
+ <string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Napredna podešavanja"</string>
+ <string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Vizuelna govorna pošta"</string>
+ <string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Dodatne rezervne kopije i prostor"</string>
+ <string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Podesite PIN"</string>
+ <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Promenite PIN"</string>
+ <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Morate da omogućite vizuelnu govornu poštu da biste promenili PIN"</string>
+ <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Vizuelna govorna pošta još uvek nije aktivirana, probajte ponovo kasnije"</string>
+ <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Stari PIN"</string>
+ <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Novi PIN"</string>
+ <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Sačekajte."</string>
+ <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Novi PIN je prekratak."</string>
+ <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Novi PIN je predugačak."</string>
+ <string name="vm_change_pin_error_too_weak" msgid="5865254034338293113">"Novi PIN je preslab. Jaka lozinka ne treba da sadrži uzastopni niz ni ponovljene cifre."</string>
+ <string name="vm_change_pin_error_mismatch" msgid="3682667971009913553">"Stari PIN se ne podudara."</string>
+ <string name="vm_change_pin_error_invalid" msgid="4317397281749196545">"Novi PIN sadrži nevažeće znakove."</string>
+ <string name="vm_change_pin_error_system_error" msgid="5972056058776852411">"Promena PIN-a nije uspela"</string>
+ <string name="vvm_unsupported_message_format" msgid="2746490691815392491">"Nepodržani tip poruke. Pozovite <xliff:g id="NUMBER">%s</xliff:g> da biste je preslušali."</string>
+ <string name="change_pin_title" msgid="1363830310845461697">"Promenite PIN kôd govorne pošte"</string>
+ <string name="change_pin_continue_label" msgid="9184635195162827832">"Nastavi"</string>
+ <string name="change_pin_cancel_label" msgid="7258783861113501519">"Otkaži"</string>
+ <string name="change_pin_ok_label" msgid="4527043915415428629">"Potvrdi"</string>
+ <string name="change_pin_enter_old_pin_header" msgid="1375728090965833028">"Potvrdite stari PIN"</string>
+ <string name="change_pin_enter_old_pin_hint" msgid="1654231195871094175">"Unesite PIN kôd govorne pošte da biste nastavili."</string>
+ <string name="change_pin_enter_new_pin_header" msgid="7142620840890909719">"Podesite novi PIN"</string>
+ <string name="change_pin_enter_new_pin_hint" msgid="1289662932759932217">"Broj cifara koje PIN mora da sadrži: <xliff:g id="MIN">%1$d</xliff:g>–<xliff:g id="MAX">%2$d</xliff:g>."</string>
+ <string name="change_pin_confirm_pin_header" msgid="7282604363655862136">"Potvrdite PIN"</string>
+ <string name="change_pin_confirm_pins_dont_match" msgid="8626742552205369433">"PIN-ovi se ne podudaraju"</string>
+ <string name="change_pin_succeeded" msgid="6869403202124894671">"PIN kôd govorne pošte je ažuriran"</string>
+ <string name="change_pin_system_error" msgid="5762853042379833829">"Podešavanje PIN-a nije uspelo"</string>
+</resources>
diff --git a/java/com/android/voicemail/impl/res/values-be/strings.xml b/java/com/android/voicemail/impl/res/values-be/strings.xml
index ea4a00ca0..874b4791a 100644
--- a/java/com/android/voicemail/impl/res/values-be/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-be/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Пашыраныя налады"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Візуальная галасавая пошта"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Дадатковае рэзервовае капір. і сховішча"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Гэта эксперыментальная характарыстыка"</i></b>", якую мы тэсціруем. Патэнцыяльна яна будзе выдаляць паведамленні галасавой пошты з вашага сервера галасавой пошты. Падтрымка гэтай характарыстыкі ў будучым не гарантуецца. Але мы будзем вельмі ўдзячны за водгукі на гэту характарыстыку."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Задаць PIN-код"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Змяніць PIN-код"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Трэба ўключыць візуальную галасавую пошту, каб змяніць PIN-код"</string>
diff --git a/java/com/android/voicemail/impl/res/values-bg/strings.xml b/java/com/android/voicemail/impl/res/values-bg/strings.xml
index 95cc05f36..f987015e9 100644
--- a/java/com/android/voicemail/impl/res/values-bg/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-bg/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Разширени настройки"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Визуална гласова поща"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Допълнителни резервни копия и хранилище"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Това е експериментална функция"</i></b>", която тестваме понастоящем. Тя потенциално може да изтрие гласови съобщения от сървъра ви за гласова поща. Няма гаранции за поддръжката й в бъдеще. Но ще се радваме на отзиви за нея."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Задаване на ПИН код"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Промяна на ПИН кода"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"За промяна на ПИН кода трябва да бъде активирана визуалната гласова поща"</string>
diff --git a/java/com/android/voicemail/impl/res/values-bn/strings.xml b/java/com/android/voicemail/impl/res/values-bn/strings.xml
index dbbeb4d9f..699576d41 100644
--- a/java/com/android/voicemail/impl/res/values-bn/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-bn/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"উন্নত সেটিংস"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"ভিজ্যুয়াল ভয়েসমেল"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"অতিরিক্ত ব্যাক আপ এবং সঞ্চয়স্থান"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"এটি একটি পরীক্ষামূলক বৈশিষ্ট্য"</i></b>" যা আমরা বর্তমানে পরীক্ষা করছি। এটি সম্ভবত আপনার ভয়েসমেল সার্ভার থেকে ভয়েসমেলগুলি মুছবে। যদিও ভবিষ্যতে এই বৈশিষ্ট্যতে সমর্থন পাওয়ার কোন গ্যারান্টি নেই। যদিও আমরা এই বৈশিষ্ট্যটির উপর মতামত পেলে খুব খুশি হব।"</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"পিন সেট করুন"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"পিন পরিবর্তন করুন"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"পিন পরিবর্তন করতে ভিজ্যুয়াল ভয়েসমেল অবশ্যই সক্ষম করতে হবে"</string>
diff --git a/java/com/android/voicemail/impl/res/values-bs/strings.xml b/java/com/android/voicemail/impl/res/values-bs/strings.xml
index 6d2b5b30c..2c8cc7682 100644
--- a/java/com/android/voicemail/impl/res/values-bs/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-bs/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Napredne postavke"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Vizuelna govorna pošta"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Dodatna sigurnosna kopija i pohrana"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Ovo je eksperimentalna funkcija"</i></b>" koju trenutno testiramo. Moguće je da ova radnja izbriše poruke govorne pošte sa servera govorne pošte. Nema garancije da će ova funkcija biti podržana u budućnosti. Ipak bismo željeli primiti povratne informacije o funkciji."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Postavite PIN kôd"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Promijenite PIN kôd"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Vizuelna govorna pošta mora biti omogućena za promjenu PIN kôda"</string>
diff --git a/java/com/android/voicemail/impl/res/values-ca/strings.xml b/java/com/android/voicemail/impl/res/values-ca/strings.xml
index bbac25294..b6525d02b 100644
--- a/java/com/android/voicemail/impl/res/values-ca/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ca/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Configuració avançada"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Bústia de veu visual"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Còpia de seguretat addicional i emmagatz."</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Aquesta funció està en mode de prova"</i></b>" i és possible que suprimeixi els missatges de veu del servidor de la bústia. No podem garantir-ne la continuïtat en el futur. De tota manera, ens agradaria saber què en penses."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Defineix el PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Canvia el PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"La bústia de veu visual ha d\'estar activada per poder canviar el PIN"</string>
diff --git a/java/com/android/voicemail/impl/res/values-cs/strings.xml b/java/com/android/voicemail/impl/res/values-cs/strings.xml
index fb6be6cf4..987f9de01 100644
--- a/java/com/android/voicemail/impl/res/values-cs/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-cs/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Pokročilá nastavení"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Vizuální hlasová schránka"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Další zálohování a úložiště"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Toto je experimentální funkce"</i></b>", kterou právě testujeme. Funkce vám může smazat hlasové zprávy ze serveru hlasové schránky. Nemůžeme zaručit, že bude podporována i v budoucnu, budeme vám ale vděční za zpětnou vazbu."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Nastavit kód PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Změnit kód PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Pokud chcete kód PIN změnit, musíte mít zapnutou vizuální hlasovou schránku"</string>
diff --git a/java/com/android/voicemail/impl/res/values-da/strings.xml b/java/com/android/voicemail/impl/res/values-da/strings.xml
index 760c3bc39..70ecb3699 100644
--- a/java/com/android/voicemail/impl/res/values-da/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-da/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Avancerede indstillinger"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Visuel telefonsvarer"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Ekstra sikkerhedskopiering og lagerplads"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Dette er en eksperimental funktion,"</i></b>" som vi tester i øjeblikket. Der slettes måske talebeskeder fra din telefonsvarerserver. Der er ingen garanti for, at denne funktion understøttes fremover. Vi vil dog stadig gerne have feedback om funktionen."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Angiv pinkode"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Skift pinkode"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Visuel telefonsvarer skal være aktiveret, for at du kan skifte pinkode"</string>
diff --git a/java/com/android/voicemail/impl/res/values-de/strings.xml b/java/com/android/voicemail/impl/res/values-de/strings.xml
index bc5c70f5e..2746629e9 100644
--- a/java/com/android/voicemail/impl/res/values-de/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-de/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Erweiterte Einstellungen"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Visuelle Mailbox"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Zusätzliche Sicherung und mehr Speicher"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Dies ist eine Funktion im Versuchsstadium"</i></b>", die gerade getestet wird. Hiermit werden möglicherweise Mailboxnachrichten von deinem Mailbox-Server gelöscht. Es wird nicht garantiert, dass diese Funktion auch in Zukunft unterstützt wird. Wir würden uns aber sehr über Feedback dazu freuen."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"PIN festlegen"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN ändern"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Die visuelle Mailbox muss aktiviert sein, um die PIN zu ändern"</string>
diff --git a/java/com/android/voicemail/impl/res/values-el/strings.xml b/java/com/android/voicemail/impl/res/values-el/strings.xml
index a416936b9..e9f9835c6 100644
--- a/java/com/android/voicemail/impl/res/values-el/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-el/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Σύνθετες ρυθμίσεις"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Οπτικός αυτόματος τηλεφωνητής"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Επιπλέον αντίγραφα ασφ. και αποθήκευση"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Αυτή είναι μια πειραματική λειτουργία"</i></b>" που δοκιμάζουμε προς το παρόν. Ενδέχεται να έχει ως αποτέλεσμα τη διαγραφή φωνητικών μηνυμάτων από τον διακομιστή αυτόματου τηλεφωνητή σας. Δεν παρέχονται εγγυήσεις για την υποστήριξη αυτής της λειτουργίας μελλοντικά. Ωστόσο, θα εκτιμούσαμε τα σχόλιά σας για τη λειτουργία αυτή."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Ορισμός PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Αλλαγή κωδικού PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Για αλλαγή του PIN, ενεργοποιήστε τον οπτικό αυτόματο τηλεφωνητή"</string>
diff --git a/java/com/android/voicemail/impl/res/values-en-rAU/strings.xml b/java/com/android/voicemail/impl/res/values-en-rAU/strings.xml
index 9b6484b45..ec08faf22 100644
--- a/java/com/android/voicemail/impl/res/values-en-rAU/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-en-rAU/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Advanced settings"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Visual voicemail"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Extra backup and storage"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"This is an experimental feature"</i></b>" that we are currently testing. This will potentially delete voicemail from your voicemail server. There are no guarantees that this feature will be supported in the future. We would love feedback on the feature though."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Set PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Change PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Visual voicemail must be enabled to change PIN"</string>
diff --git a/java/com/android/voicemail/impl/res/values-en-rGB/strings.xml b/java/com/android/voicemail/impl/res/values-en-rGB/strings.xml
index 9b6484b45..ec08faf22 100644
--- a/java/com/android/voicemail/impl/res/values-en-rGB/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-en-rGB/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Advanced settings"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Visual voicemail"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Extra backup and storage"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"This is an experimental feature"</i></b>" that we are currently testing. This will potentially delete voicemail from your voicemail server. There are no guarantees that this feature will be supported in the future. We would love feedback on the feature though."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Set PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Change PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Visual voicemail must be enabled to change PIN"</string>
diff --git a/java/com/android/voicemail/impl/res/values-en-rIN/strings.xml b/java/com/android/voicemail/impl/res/values-en-rIN/strings.xml
index 9b6484b45..ec08faf22 100644
--- a/java/com/android/voicemail/impl/res/values-en-rIN/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-en-rIN/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Advanced settings"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Visual voicemail"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Extra backup and storage"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"This is an experimental feature"</i></b>" that we are currently testing. This will potentially delete voicemail from your voicemail server. There are no guarantees that this feature will be supported in the future. We would love feedback on the feature though."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Set PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Change PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Visual voicemail must be enabled to change PIN"</string>
diff --git a/java/com/android/voicemail/impl/res/values-es-rUS/strings.xml b/java/com/android/voicemail/impl/res/values-es-rUS/strings.xml
index 6ae227a81..fcd9cc7c3 100644
--- a/java/com/android/voicemail/impl/res/values-es-rUS/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-es-rUS/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Configuración avanzada"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Buzón de voz visual"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Copia de seguridad y almacenamiento adicional"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Esta es una función experimental"</i></b>" que estamos probando. Es posible que se borren los mensajes de voz del servidor correspondiente. No podemos garantizar la compatibilidad de la función en el futuro. Sin embargo, nos encantaría que nos hicieras comentarios acerca de ella."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Establecer PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Cambiar PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"El buzón de voz visual se debe activar para cambiar el PIN"</string>
diff --git a/java/com/android/voicemail/impl/res/values-es/strings.xml b/java/com/android/voicemail/impl/res/values-es/strings.xml
index bab4e0326..f20ebc5cf 100644
--- a/java/com/android/voicemail/impl/res/values-es/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-es/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Configuración avanzada"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Buzón de voz visual"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Copias de seguridad y almacenamiento extra"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Se trata de una función experimental"</i></b>" que se encuentra actualmente en fase de prueba y que podría servir para eliminar los mensajes de tu servidor de buzón de voz. Aunque no garantizamos que esta función se siga admitiendo en el futuro, nos encantaría conocer tu opinión."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Establecer PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Cambiar PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Para poder cambiar el PIN, el buzón de voz visual debe estar habilitado"</string>
diff --git a/java/com/android/voicemail/impl/res/values-et/strings.xml b/java/com/android/voicemail/impl/res/values-et/strings.xml
index 02f13145d..dc7f685ba 100644
--- a/java/com/android/voicemail/impl/res/values-et/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-et/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Täpsemad seaded"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Visuaalne kõnepost"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Lisavarundus ja -salvestusruum"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"See on katseline funktsioon"</i></b>", mida praegu testime. See võib teie kõnepostisõnumid kõnepostiserverist kustutada. Me ei garanteeri, et seda funktsiooni tulevikus toetatakse. Soovime selle kohta siiski tagasisidet saada."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"PIN-koodi määramine"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN-koodi muutmine"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN-koodi muutmiseks peab olema lubatud visuaalne kõnepost"</string>
diff --git a/java/com/android/voicemail/impl/res/values-eu/strings.xml b/java/com/android/voicemail/impl/res/values-eu/strings.xml
index 89afb830c..8a3bd640a 100644
--- a/java/com/android/voicemail/impl/res/values-eu/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-eu/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Ezarpen aurreratuak"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Erantzungailu bisuala"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Babeskopiak eta edukia gordetzeko tokia"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" Oraindik probatzen ari garen "<b><i>"eginbide esperimentala da hau"</i></b>". Agian erantzungailuaren zerbitzarian gordetako mezuak ezabatuko dira. Ez dugu bermatzen egibide hau etorkizunean erabiltzeko aukera emango dugunik. Halere, bihotzez eskertuko genizuke eginbideari buruzko iritzia."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Ezarri PIN kodea"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Aldatu PIN kodea"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Ikusizko erantzungailuak gaituta egon behar du PIN kodea aldatu ahal izateko"</string>
diff --git a/java/com/android/voicemail/impl/res/values-fa/strings.xml b/java/com/android/voicemail/impl/res/values-fa/strings.xml
index 3db711b34..0b5d51333 100644
--- a/java/com/android/voicemail/impl/res/values-fa/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-fa/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"تنظیمات پیشرفته"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"پست صوتی تصویری"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"پشتیبان‌گیری و فضای ذخیره‌سازی اضافی"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"این یک قابلیت آزمایشی است"</i></b>" که درحال آزمایش آن هستیم. این قابلیت به‌طور بالقوه پست‌های صوتی را از سرور پست صوتی شما حذف خواهد کرد. ضمانتی برای پشتیبانی از این قابلیت در آینده وجود ندارد. با این حال مشتاقیم درباره آن بازخورد دریافت کنیم."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"تنظیم پین"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"تغییر پین"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"برای تغییر پین، پست صوتی تصویری باید فعال شود"</string>
diff --git a/java/com/android/voicemail/impl/res/values-fi/strings.xml b/java/com/android/voicemail/impl/res/values-fi/strings.xml
index 36f5fff5d..c20d3e481 100644
--- a/java/com/android/voicemail/impl/res/values-fi/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-fi/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Lisäasetukset"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Visuaalinen vastaaja"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Lisävarmuuskopiointi ja ‑tallennustila"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Tämä on kokeellinen ominaisuus"</i></b>", jota testaamme parhaillaan. Vastaajaviestejä saatetaan poistaa vastaajapalvelimelta. Ominaisuuden tukemista tulevaisuudessa ei taata. Kuulemme kuitenkin mielellämme mielipiteesi ominaisuudesta."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Aseta PIN-koodi"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Vaihda PIN-koodi"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Ota visuaalinen puhelinvastaaja käyttöön, jotta voit vaihtaa PIN-koodin."</string>
diff --git a/java/com/android/voicemail/impl/res/values-fr-rCA/strings.xml b/java/com/android/voicemail/impl/res/values-fr-rCA/strings.xml
index 2c9a11a93..6bbd1341f 100644
--- a/java/com/android/voicemail/impl/res/values-fr-rCA/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-fr-rCA/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Paramètres avancés"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Messagerie vocale visuelle"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Espace suppl. de sauvegarde et stockage"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Fonction expérimentale"</i></b>" en cours de test."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Définir un NIP"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Modifier le NIP"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"La messagerie vocale visuelle doit être activée pour que vous puissiez modifier votre NIP"</string>
diff --git a/java/com/android/voicemail/impl/res/values-fr/strings.xml b/java/com/android/voicemail/impl/res/values-fr/strings.xml
index 391671c2e..dc21c76d3 100644
--- a/java/com/android/voicemail/impl/res/values-fr/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-fr/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Paramètres avancés"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Messagerie vocale visuelle"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Espace suppl. de sauvegarde et stockage"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Il s\'agit d\'une fonctionnalité expérimentale"</i></b>" en cours de test. Des messages risquent d\'être supprimés de votre serveur de messagerie vocale. Nous ne pouvons pas garantir le maintien de cette fonctionnalité. Toutefois, n\'hésitez pas à nous faire part de vos commentaires."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Définir le code secret"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Modifier le code secret"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Pour que vous puissiez modifier le code secret, la messagerie vocale visuelle doit être activée"</string>
diff --git a/java/com/android/voicemail/impl/res/values-gl/strings.xml b/java/com/android/voicemail/impl/res/values-gl/strings.xml
index 70b949e6c..81f6e679a 100644
--- a/java/com/android/voicemail/impl/res/values-gl/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-gl/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Configuración avanzada"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Correo de voz visual"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Copia de seguranza e almacenamento extra"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Esta función está en modo de proba"</i></b>", e é posible que elimine correos de voz do teu servidor de correo de voz. Non podemos garantir a súa continuidade no futuro. De todos modos, encantaríanos que nos deses a túa opinión."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Establecer PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Cambiar PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Para poder cambiar o PIN, o correo de voz visual ten que estar activado"</string>
diff --git a/java/com/android/voicemail/impl/res/values-gu/strings.xml b/java/com/android/voicemail/impl/res/values-gu/strings.xml
index f9187a7d3..3e8948d19 100644
--- a/java/com/android/voicemail/impl/res/values-gu/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-gu/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"વિગતવાર સેટિંગ્સ"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"વિઝ્યુઅલ વૉઇસમેઇલ"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"અતિરિક્ત બેકઅપ અને સ્ટોરેજ"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"આ એક પ્રાયોગિક સુવિધા છે"</i></b>" અમે હાલમાં પરીક્ષણ કરી રહ્યાં છીએ. આ તમારા વૉઇસમેઇલ સર્વરમાંથી સંભવિત રૂપે વૉઇસમેઇલ કાઢી નાખશે. ભવિષ્યમાં આ સુવિધાનું સમર્થન કરવાની કોઇ બાંંયધરી નથી. જોકે અમને આ સુવિધા પર પ્રતિસાદ ગમશે."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"PIN સેટ કરો"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN બદલો"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN બદલવા માટે વિઝ્યુઅલ વૉઇસમેઇલ સક્ષમ હોય તે આવશ્યક છે"</string>
diff --git a/java/com/android/voicemail/impl/res/values-hi/strings.xml b/java/com/android/voicemail/impl/res/values-hi/strings.xml
index 488fba2a9..8daa3e3d7 100644
--- a/java/com/android/voicemail/impl/res/values-hi/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-hi/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"उन्नत सेटिंग"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"विज़ुअल वॉइसमेल"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"अतिरिक्त बैकअप और जगह"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"यह सुविधा एक तरह का प्रयोग है"</i></b>" जिसका हम अभी परीक्षण कर रहे हैं. हो सकता है कि यह आपके वॉइसमेल सर्वर से वॉइसमेल हटा दे. भविष्य में यह सुविधा दी जाएगी या नहीं इसकी कोई गारंटी नहीं है. फिर भी सुविधा पर आपका फ़ीडबैक हमें अच्छा लगेगा."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"पिन सेट करें"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"पिन बदलें"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"पिन बदलने के लिए विज़ुअल वॉइसमेल ज़रूर सक्षम होना चाहिए"</string>
diff --git a/java/com/android/voicemail/impl/res/values-hr/strings.xml b/java/com/android/voicemail/impl/res/values-hr/strings.xml
index 7d6695653..960909571 100644
--- a/java/com/android/voicemail/impl/res/values-hr/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-hr/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Napredne postavke"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Vizualna govorna pošta"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Dodatno sigurnosno kopiranje i pohrana"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Ovo je eksperimentalna značajka"</i></b>" koju trenutačno testiramo. To će možda izbrisati poruke govorne pošte s vašeg poslužitelja govorne pošte. Nije sigurno da ćemo ovu značajku podržati u budućnosti. Međutim, voljeli bismo dobiti povratne informacije o njoj."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Postavljanje PIN-a"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Promjena PIN-a"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Za promjenu PIN-a potrebno je omogućiti vizualnu govornu poštu"</string>
diff --git a/java/com/android/voicemail/impl/res/values-hu/strings.xml b/java/com/android/voicemail/impl/res/values-hu/strings.xml
index fae3ef4c7..ce18af799 100644
--- a/java/com/android/voicemail/impl/res/values-hu/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-hu/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Speciális beállítások"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Vizuális hangpostaüzenet"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Extra tárhely és biztonsági mentés"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Ez egy kísérleti funkció"</i></b>", amelyet jelenleg tesztelünk. Előfordulhat, hogy letörli az Ön hangüzeneteit a hangpostaszerverről. Nem garantáljuk, hogy a funkció a jövőben is megmarad, de nagy örömmel vennénk, ha megírná róla a véleményét."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"PIN-kód beállítása"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN-kód módosítása"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"A PIN-kód módosításához engedélyezni kell a vizuális hangpostát."</string>
diff --git a/java/com/android/voicemail/impl/res/values-hy/strings.xml b/java/com/android/voicemail/impl/res/values-hy/strings.xml
index e4126f877..eaa987aa4 100644
--- a/java/com/android/voicemail/impl/res/values-hy/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-hy/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Ընդլայնված կարգավորումներ"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Տեսողական ձայնային փոստ"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Լրացուցիչ տարածք և պահուստավորում"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Սա փորձնական գործառույթ է,"</i></b>" որը գտնվում է փորձարկման փուլում: Այս ընթացքում ձայնային հաղորդագրությունները ձեր ձայնային փոստի սերվերից կարող են ջնջվել: Ոչ մի երաշխիք չկա, որ այն հետագայում կաջակցվի: Այդուհանդերձ, կցանկանայինք ձեր կարծիքն իմանալ այս գործառույթի մասին:"</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Սահմանեք PIN կոդ"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Փոխեք PIN կոդը"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN կոդը փոխելու համար տեսողական ձայնային փոստը պետք է միացված լինի"</string>
diff --git a/java/com/android/voicemail/impl/res/values-in/strings.xml b/java/com/android/voicemail/impl/res/values-in/strings.xml
index d47bd9b9b..6f7e6377e 100644
--- a/java/com/android/voicemail/impl/res/values-in/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-in/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Setelan Lanjutan"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Pesan Suara Visual"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Penyimpanan dan backup ekstra"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Ini adalah fitur eksperimental"</i></b>" yang sedang kami uji. Fitur ini berpotensi menghapus pesan suara dari server pesan suara Anda. Tidak ada jaminan bahwa fitur ini akan didukung di masa mendatang. Kami akan menerima masukan terkait fitur ini dengan senang hati."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Setel PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Ubah PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Pesan suara visual harus diaktifkan untuk mengubah PIN"</string>
diff --git a/java/com/android/voicemail/impl/res/values-is/strings.xml b/java/com/android/voicemail/impl/res/values-is/strings.xml
index c2019a3f5..5e00487af 100644
--- a/java/com/android/voicemail/impl/res/values-is/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-is/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Ítarlegar stillingar"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Myndrænt talhólf"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Viðbótaröryggisafritun og samstilling"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Þessi eiginleiki er í tilraunaútgáfu"</i></b>" sem við erum að prófa að svo stöddu. Þetta mun mögulega eyða talhólfsskilaboðum af vefþjóni talhólfsins. Engin trygging er fyrir því að þessi eiginleiki verði studdur í framtíðinni. Við kunnum virkilega að meta allar ábendingar varðandi þennan eiginleika."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Stilla PIN-númer"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Breyta PIN-númeri"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Kveikt þarf að vera á myndrænu talhólfi til að breyta PIN-númeri"</string>
diff --git a/java/com/android/voicemail/impl/res/values-it/strings.xml b/java/com/android/voicemail/impl/res/values-it/strings.xml
index 3aeaca901..2c37ba281 100644
--- a/java/com/android/voicemail/impl/res/values-it/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-it/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Impostazioni avanzate"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Leggi la segreteria"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Archiviazione supplementare e backup"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Questa è una funzionalità sperimentale"</i></b>" che si trova al momento in fase di test. È possibile che i messaggi vocali vengano eliminati dal server della segreteria. Non ci sono garanzie che la funzionalità continui a essere supportata in futuro, ma ci piacerebbe ricevere il tuo feedback."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Imposta PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Cambia PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"La lettura delle segreteria deve essere attivata per cambiare il PIN"</string>
diff --git a/java/com/android/voicemail/impl/res/values-iw/strings.xml b/java/com/android/voicemail/impl/res/values-iw/strings.xml
index 98d31bc59..cdf58dd64 100644
--- a/java/com/android/voicemail/impl/res/values-iw/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-iw/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"הגדרות מתקדמות"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"דואר קולי ויזואלי"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"גיבוי ופינוי מקום"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"זוהי תכונה ניסיונית"</i></b>" שאנחנו בודקים כרגע. היא עלולה למחוק הודעות קוליות מתא הדואר הקולי שלך בשרת. אנחנו לא מתחייבים שהתכונה תהיה זמינה בעתיד, אך נשמח לקבל עליה משוב."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"הגדרת קוד גישה"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"שינוי קוד הגישה"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"צריך להפעיל את הדואר הקולי הוויזואלי כדי לשנות את קוד הגישה"</string>
diff --git a/java/com/android/voicemail/impl/res/values-ja/strings.xml b/java/com/android/voicemail/impl/res/values-ja/strings.xml
index 90bce09fb..e35359f01 100644
--- a/java/com/android/voicemail/impl/res/values-ja/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ja/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"詳細設定"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"ビジュアル ボイスメール"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"追加のバックアップと保存容量"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"これは現在テスト中の試験運用機能"</i></b>"で、ボイスメール サーバーからボイスメールを削除することができます。今後この機能が正式にサポートされる保証はありませんが、フィードバックをお寄せいただければ幸いです。"</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"PIN の設定"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN の変更"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN を変更するには、ビジュアル ボイスメールを有効にする必要があります"</string>
diff --git a/java/com/android/voicemail/impl/res/values-ka/strings.xml b/java/com/android/voicemail/impl/res/values-ka/strings.xml
index 4e1413287..7eb792fd0 100644
--- a/java/com/android/voicemail/impl/res/values-ka/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ka/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"გაფართოებული პარამეტრები"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"ვიზუალური ხმოვანი ფოსტა"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"დამატებითი სარეზ. ასლები და მეხსიერება"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"ეს არის ექსპერიმენტული ფუნქცია, რომელსაც"</i></b>" ამჟამად ტესტირებას ვუტარებთ. სავარაუდოდ, ეს წაშლის ხმოვან შეტყობინებებს თქვენი ხმოვანი ფოსტის სერვერიდან. გარანტია, რომ ეს ფუნქცია მომავალში მხარდაჭერილი იქნება, არ არსებობს. თუმცა ამ ფუნქციის შესახებ გამოხმაურებას ინტერესით გავეცნობოდით."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"PIN-კოდის დაყენება"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN-კოდის შეცვლა"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN-კოდის შესაცვლელად ჩართული უნდა იყოს ვიზუალური ხმოვანი ფოსტა"</string>
diff --git a/java/com/android/voicemail/impl/res/values-kk/strings.xml b/java/com/android/voicemail/impl/res/values-kk/strings.xml
index 36ba090ea..a03171d01 100644
--- a/java/com/android/voicemail/impl/res/values-kk/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-kk/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Қосымша параметрлер"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Визуалды дауыстық пошта"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Қосымша сақтық көшірме жасау және сақтау"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Бұл — қазір тексеріліп жатқан, тәжірибелік мүмкіндік"</i></b>". Бұл дауыстық хабарларды дауыстық хабар серверінен өшіруі мүмкін. Осы мүмкіндікке алдағы уақытта қолдау көрсетілетініне ешқандай кепілдік жоқ. Сонда да осы мүмкіндікке қатысты пікір алғымыз келеді."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"PIN кодын тағайындау"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN кодын өзгерту"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN кодын өзгерту үшін визуалды дауыс хабарын қосу қажет"</string>
diff --git a/java/com/android/voicemail/impl/res/values-km/strings.xml b/java/com/android/voicemail/impl/res/values-km/strings.xml
index f97ff3e5e..3d55d00bb 100644
--- a/java/com/android/voicemail/impl/res/values-km/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-km/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"ការ​កំណត់​កម្រិត​ខ្ពស់"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"សារជាសំឡេងអាចមើលឃើញ"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"ទំហំ​ផ្ទុក និង​ការ​បម្រុងទុក​បន្ថែម"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"នេះ​​គឺ​ជា​មុខងារ​សាកល្បង"</i></b>" បច្ចុប្បន្ន យើង​កំពុង​ធ្វើ​ការ​សាកល្បង។ វា​អាច​នឹង​លុប​សារ​ជា​សំឡេង​ពី​ម៉ាស៊ីន​មេ​សារ​ជា​សំឡេង​របស់​អ្នក។ មិន​មាន​ការ​ធានា​ធ្វើ​ឲ្យ​មុខងារ​នេះ​ដំណើរការ​នៅ​ថ្ងៃ​ក្រោយ​ទេ។ យើង​ចង់​ដឹង​មតិ​ស្ថាបនា​អំពី​មុខងារនេះ​ផង​ដែរ។"</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"កំណត់​កូដ PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"ផ្លាស់ប្ដូរ​កូដ PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"សារ​​ជា​សំឡេង​ដែល​មើល​ឃើញ​ត្រូវតែ​បើកដំណើរការ ដើម្បី​ផ្លាស់ប្ដូរ PIN"</string>
diff --git a/java/com/android/voicemail/impl/res/values-kn/strings.xml b/java/com/android/voicemail/impl/res/values-kn/strings.xml
index 6f8e21f88..379e656ce 100644
--- a/java/com/android/voicemail/impl/res/values-kn/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-kn/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"ಸುಧಾರಿತ ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"ದೃಶ್ಯ ಧ್ವನಿಮೇಲ್"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"ಹೆಚ್ಚುವರಿ ಬ್ಯಾಕಪ್ ಮತ್ತು ಸಂಗ್ರಹಣೆ"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"ಇದು ಪ್ರಾಯೋಗಿಕ ವೈಶಿಷ್ಟ್ಯವಾಗಿದೆ"</i></b>"ನಾವು ಪ್ರಸ್ತುತ ಪರೀಕ್ಷಿಸುತ್ತಿದ್ದೇವೆ. ಇದು ನಿಮ್ಮ ಧ್ವನಿಮೇಲ್ ಸರ್ವರ್‌ನಿಂದ ಧ್ವನಿಮೇಲ್‌ಗಳನ್ನು ಸಂಭಾವ್ಯವಾಗಿ ಅಳಿಸುತ್ತದೆ. ಭವಿಷ್ಯದಲ್ಲಿ ಈ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಬೆಂಬಲಿಸುವ ಯಾವುದೇ ಖಾತ್ರಿ ಇಲ್ಲ. ಆದರೂ ನಿಮ್ಮ ಪ್ರತಿಕ್ರಿಯೆಗೆ ಸ್ವಾಗತ."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"ಪಿನ್ ಹೊಂದಿಸಿ"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"ಪಿನ್‌ ಬದಲಾಯಿಸಿ"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"ಪಿನ್ ಬದಲಾಯಿಸಲು ದೃಶ್ಯ ಧ್ವನಿಮೇಲ್ ಸಕ್ರಿಯಗೊಳಿಸಬೇಕು"</string>
diff --git a/java/com/android/voicemail/impl/res/values-ko/strings.xml b/java/com/android/voicemail/impl/res/values-ko/strings.xml
index f18d1d711..513a67546 100644
--- a/java/com/android/voicemail/impl/res/values-ko/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ko/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"고급 설정"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"시각적 음성사서함"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"추가 백업 및 저장용량"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" 현재 테스트 중인 "<b><i>"실험적 기능입니다"</i></b>". 이 기능으로 인해 음성사서함 서버에서 메시지가 삭제될 수도 있습니다. 또한 Google에서는 추후 이 기능이 지원된다고 보장할 수 없습니다. 하지만 이 기능에 관해 의견을 주시면 감사하겠습니다."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"PIN 설정"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN 변경"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN을 변경하려면 시각적 음성사서함이 사용 설정되어 있어야 합니다."</string>
diff --git a/java/com/android/voicemail/impl/res/values-ky/strings.xml b/java/com/android/voicemail/impl/res/values-ky/strings.xml
index f5219a91c..12b7f18c5 100644
--- a/java/com/android/voicemail/impl/res/values-ky/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ky/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Өркүндөтүлгөн жөндөөлөр"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Визуалдык үн почтасы"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Кошумча камдык көчүрмөнү сактоо жана сактагыч"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Бул, сыноодон өтүп жаткан"</i></b>" эксперименталдык функция. Үн каттарыңыз серверден өчүрүлүп калышы мүмкүн. Бул функциянын кийин да колдонулаарына кепилдик бере албайбыз бирок, ал жөнүндө пикириңизди билгибиз келет."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"PIN код коюу"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN кодду өзгөртүү"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN кодду өзгөртүү үчүн визуладык үн почтасын иштетүү керек"</string>
diff --git a/java/com/android/voicemail/impl/res/values-lo/strings.xml b/java/com/android/voicemail/impl/res/values-lo/strings.xml
index 212b12fd2..f4f45e592 100644
--- a/java/com/android/voicemail/impl/res/values-lo/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-lo/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"ການຕັ້ງຄ່າຂັ້ນສູງ"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"ຂໍ້​ຄວາມ​ສຽງສະເໝືອນ"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"ການສຳຮອງ ແລະ ບ່ອນຈັດເກັບຂໍ້ມູນພິເສດ"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"ນີ້ເປັນຄຸນສົມບັດທີ່ຢູ່ໃນຂັ້ນຕອນທົດລອງຢູ່"</i></b>" ພວກເຮົາກຳລັງທົດສອບ. ມັນອາດລຶບຂໍ້ຄວາມສຽງອອກຈາກເຊີບເວີຂໍ້ຄວາມສຽງຂອງທ່ານໄດ້. ຈະບໍ່ມີການຮັບປະກັນການຊ່ວຍເຫຼືອຄຸນສົມບັດນີ້ໃນອະນາຄົດ. ຢ່າງໃດກໍຕາມພວກເຮົາຢາກຟັງຄຳຄິດເຫັນທີ່ມີຕໍ່ຄຸນສົມບັດດັ່ງກ່າວຈາກທ່ານ."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"ຕັ້ງລະຫັດ PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"​ປ່ຽນ​ລະຫັດ PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"ຈະຕ້ອງເປີດໃຊ້ຂໍ້ຄວາມສຽງສະເໝືອນເພື່ອປ່ຽນ PIN"</string>
diff --git a/java/com/android/voicemail/impl/res/values-lt/strings.xml b/java/com/android/voicemail/impl/res/values-lt/strings.xml
index d4d9c4dc3..59a15f452 100644
--- a/java/com/android/voicemail/impl/res/values-lt/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-lt/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Išplėstiniai nustatymai"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Vaizdinis balso paštas"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Papild. saug. vt. ir ats. kop. kūr. f."</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Tai yra eksperimentinė funkcija"</i></b>", kurią šiuo metu išbandome. Ją naudojant iš balso pašto serverio bus ištrinami balso pašto pranešimai. Negarantuojame, kad ateityje ši funkcija bus palaikoma, tačiau norėtume gauti atsiliepimų apie ją."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"PIN kodo nustatymas"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN kodo keitimas"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Vaizdinis balso paštas turi būti įgalintas, kad būtų galima pakeisti PIN kodą"</string>
diff --git a/java/com/android/voicemail/impl/res/values-lv/strings.xml b/java/com/android/voicemail/impl/res/values-lv/strings.xml
index 1f758c467..0b8b2f92a 100644
--- a/java/com/android/voicemail/impl/res/values-lv/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-lv/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Papildu iestatījumi"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Vizuālais balss pasts"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Papildu dublēšana un krātuve"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Šī ir eksperimentāla funkcija"</i></b>", ko mēs pašlaik testējam. Pastāv iespēja, ka no jūsu balss pasta servera tiks izdzēsti balss pasta ziņojumi. Mēs negarantējam šīs funkcijas turpmāku atbalstu, tomēr priecāsimies saņemt atsauksmes par to."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"PIN iestatīšana"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN mainīšana"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Lai varētu mainīt PIN, ir jābūt iespējotam vizuālajam balss pastam."</string>
diff --git a/java/com/android/voicemail/impl/res/values-mk/strings.xml b/java/com/android/voicemail/impl/res/values-mk/strings.xml
index 39b8beefc..90c2f6cb2 100644
--- a/java/com/android/voicemail/impl/res/values-mk/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-mk/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Напредни поставки"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Визуелна говорна пошта"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Дополнителен бекап и склад"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Ова е експериментална функција"</i></b>" што моментално ја тестираме. Постои можност да брише говорни пораки од вашиот сервер за говорна пошта. Нема гаранција дека функцијава ќе се поддржува во иднина. Сепак, многу би ни значеле повратните информации за функцијата."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Поставете PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Променете PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"За променување на PIN-кодот, мора да се овозможи визуелна говорна пошта"</string>
diff --git a/java/com/android/voicemail/impl/res/values-ml/strings.xml b/java/com/android/voicemail/impl/res/values-ml/strings.xml
index c30ebbcfe..d7fd31f1e 100644
--- a/java/com/android/voicemail/impl/res/values-ml/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ml/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"വിപുലമായ ക്രമീകരണം"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"വിഷ്വൽ വോയ്‌സ്‌മെയിൽ"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"അധിക ബായ്‌ക്കപ്പും സ്‌റ്റോറേജും"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" ഇത് നിലവിൽ ഞങ്ങൾ പരീക്ഷിക്കുന്ന "<b><i>"ഒരു പരീക്ഷണാത്മക ഫീച്ചറാണ്"</i></b>". ഇത് നിങ്ങളുടെ വോയ്‌സ്‌മെയിൽ സെർവറിൽ നിന്ന് വോയ്‌സ്‌മെയിലുകൾ ഇല്ലാതാക്കാൻ സാധ്യതയുണ്ട്. ഈ ഫീച്ചർ ഭാവിയിൽ ഉപയോഗിക്കാനാവുമെന്ന് ഉറപ്പൊന്നുമില്ല. എങ്കിലും ഈ ഫീച്ചറിനെക്കുറിച്ചുള്ള ഫീഡ്‌ബാക്ക് അറിയാൻ ഞങ്ങൾ താൽപ്പര്യപ്പെടുന്നു."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"പിൻ സജ്ജമാക്കുക"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"പിൻ മാറ്റുക"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"പിൻ മാറ്റുന്നതിന് വിഷ്വൽ വോയ്‌സ്‌മെയിൽ പ്രവർത്തനക്ഷമമാക്കേണ്ടതുണ്ട്"</string>
diff --git a/java/com/android/voicemail/impl/res/values-mn/strings.xml b/java/com/android/voicemail/impl/res/values-mn/strings.xml
index a559d1900..5f726342f 100644
--- a/java/com/android/voicemail/impl/res/values-mn/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-mn/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Нарийвчилсан тохиргоо"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Уншиж болохуйц дуут шуудан"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Нэмэлт нөөцлөлт болон хадгалах сан"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" Энэ бол бидний одоо шалгаж буй "<b><i>"туршилтын функц"</i></b>". Энэ таны дуут шуудангийн серверээс дуут шуудангуудыг устгах магадлалтай. Цаашид энэ функцийг дэмжих баталгаа байхгүй. Гэхдээ энэ функцийн талаар санал хүсэлт илгээвэл талархах болно."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"PIN тохируулах"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN өөрчлөх"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Харагдах дуут шуудан PIN-г өөрчлөх боломжтой байх ёстой"</string>
diff --git a/java/com/android/voicemail/impl/res/values-mr/strings.xml b/java/com/android/voicemail/impl/res/values-mr/strings.xml
index 56e864b81..e8c546ce6 100644
--- a/java/com/android/voicemail/impl/res/values-mr/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-mr/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"प्रगत सेटिंग्ज"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"दृश्‍यमान व्हॉइसमेल"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"अतिरिक्त बॅक अप आणि संचय"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"हे प्रायोगिक वैशिष्ट्य आहे"</i></b>" आम्ही सध्‍या चाचणी घेत आहोत. हे आपल्या व्हॉइसमेल सर्व्हर मधून संभाव्यपणे व्हॉइसमेल हटवेल. भविष्‍यात या वैशिष्‍ट्यास समर्थन देण्याची हमी नाही. तरीही आम्ही वैशिष्‍ट्यावरील अभिप्राय घेऊ इच्छितो."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"पिन सेट करा"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"पिन बदला"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"पिन बदलण्‍यासाठी व्हिज्युअल व्हॉइसमेल सक्षम करणे आवश्‍यक आहे"</string>
diff --git a/java/com/android/voicemail/impl/res/values-ms/strings.xml b/java/com/android/voicemail/impl/res/values-ms/strings.xml
index ea9b38f08..4468d49d7 100644
--- a/java/com/android/voicemail/impl/res/values-ms/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ms/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Tetapan Terperinci"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Mel Suara Visual"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Sandaran dan storan tambahan"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Ini ialah ciri percubaan"</i></b>" yang sedang kami uji. Ciri ini berupaya memadamkan mel suara daripada pelayan mel suara anda. Tiada jaminan bahawa ciri ini akan disokong pada masa hadapan. Namun begitu, kami berharap untuk menerima maklum balas tentang ciri ini."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Tetapkan PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Tukar PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Mel suara visual mesti didayakan untuk menukar PIN"</string>
diff --git a/java/com/android/voicemail/impl/res/values-my/strings.xml b/java/com/android/voicemail/impl/res/values-my/strings.xml
index 6c789275a..41e88351d 100644
--- a/java/com/android/voicemail/impl/res/values-my/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-my/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"အဆင့်မြင့် ဆက်တင်များ"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"စာသားမှတ်တမ်းပါ အသံမေးလ်"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"အပိုဆောင်း မိတ္တူနှင့် သိုလှောင်မှု"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" ဤသည်မှာ "<b><i>"စမ်းသပ်ဆဲဝန်ဆောင်မှုတစ်ခု"</i></b>" ဖြစ်ပါသည်။ ၎င်းက သင်၏အသံမေးလ်ဆာဗာမှ အသံမေးလ်များကို ဖျက်ပစ်နိုင်ပါသည်။ ဤဝန်ဆောင်မှုကို အနာဂတ်တွင် ဆက်လက်ရရှိနိုင်မည်ဟု အာမခံထားခြင်း မရှိသော်လည်း ၎င်းနှင့်ပတ်သက်သည့် အကြံပြုချက်များကို ရရှိလိုပါသည်။"</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"ပင်နံပါတ် သတ်မှတ်ပါ"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"ပင်နံပါတ် ပြောင်းပါ"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"ပင်နံပါတ်ပြောင်းရန် စာသားမှတ်တမ်းပါ အသံမေးလ်ကို ဖွင့်ထားရပါမည်"</string>
diff --git a/java/com/android/voicemail/impl/res/values-nb/strings.xml b/java/com/android/voicemail/impl/res/values-nb/strings.xml
index 93e9e2a2c..afbdd3bb8 100644
--- a/java/com/android/voicemail/impl/res/values-nb/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-nb/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Avanserte innstillinger"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Visuell talepostkasse"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Ekstra sikkerhetskopi og lagring"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Denne funksjonen er fortsatt under utforskning"</i></b>", og det kan føre til at noen av talepostmelingene dine slettes. Vi kan dessverre ikke love at denne funksjonen støttes i fremtiden, men vi vil gjerne høre om hva du mener om den."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Angi PIN-kode"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Endre PIN-koden"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Du må slå på visuell talepost for å endre PIN-koden"</string>
diff --git a/java/com/android/voicemail/impl/res/values-ne/strings.xml b/java/com/android/voicemail/impl/res/values-ne/strings.xml
index d729c2323..a186535b5 100644
--- a/java/com/android/voicemail/impl/res/values-ne/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ne/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"उन्नत सेटिङहरू"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"भिजुअल भ्वाइस मेल"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"अतिरिक्त ब्याकअप र भण्डारण"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"यो एउटा प्रयोगात्मक विशेषता हो"</i></b>" हामी अहिले परीक्षण गर्दैछौं। यसले सम्भवत: तपाईंको भ्वाइस मेल सर्भरका भ्वाइस मेलहरूलाई मेट्ने छ। भविष्यमा यो विशेषतालाई समर्थन गरिने कुराको ग्यारेन्टी छैन। तथापि हामी यो विशेषताका सम्बन्धमा प्रतिक्रिया आऊन् भन्ने चाहन्छौं।"</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"PIN सेट गर्नुहोस्"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN परिवर्तन गर्नुहोस्"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN परिवर्तन गर्न अनिवार्य रूपले भिजुअल भ्वाइस मेललाई सक्षम पारिनुपर्छ"</string>
diff --git a/java/com/android/voicemail/impl/res/values-nl/strings.xml b/java/com/android/voicemail/impl/res/values-nl/strings.xml
index 7ae9f4e0e..ed66ab303 100644
--- a/java/com/android/voicemail/impl/res/values-nl/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-nl/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Geavanceerde instellingen"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Visuele voicemail"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Extra back-up en opslag"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Dit is een experimentele functie"</i></b>" die wordt getest. Mogelijk worden hierdoor voicemails van de voicemailserver verwijderd. Er is geen garantie dat we deze functie in de toekomst blijven ondersteunen. We zijn wel heel benieuwd naar jullie feedback over de functie."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Pincode instellen"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Pincode wijzigen"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Visuele voicemail moet zijn ingeschakeld om de pincode te wijzigen"</string>
diff --git a/java/com/android/voicemail/impl/res/values-no/strings.xml b/java/com/android/voicemail/impl/res/values-no/strings.xml
index 93e9e2a2c..afbdd3bb8 100644
--- a/java/com/android/voicemail/impl/res/values-no/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-no/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Avanserte innstillinger"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Visuell talepostkasse"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Ekstra sikkerhetskopi og lagring"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Denne funksjonen er fortsatt under utforskning"</i></b>", og det kan føre til at noen av talepostmelingene dine slettes. Vi kan dessverre ikke love at denne funksjonen støttes i fremtiden, men vi vil gjerne høre om hva du mener om den."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Angi PIN-kode"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Endre PIN-koden"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Du må slå på visuell talepost for å endre PIN-koden"</string>
diff --git a/java/com/android/voicemail/impl/res/values-pa/strings.xml b/java/com/android/voicemail/impl/res/values-pa/strings.xml
index f3551cc6e..ec68867c6 100644
--- a/java/com/android/voicemail/impl/res/values-pa/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-pa/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"ਉੱਨਤ ਸੈਟਿੰਗਾਂ"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"ਦ੍ਰਿਸ਼ਟਾਂਤਕ ਵੌਇਸਮੇਲ"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"ਵਾਧੂ ਬੈਕਅੱਪ ਅਤੇ ਸਟੋਰੇਜ"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"ਇਹ ਇੱਕ ਪ੍ਰਯੋਗਾਤਮਕ ਵਿਸ਼ੇਸ਼ਤਾ ਹੈ"</i></b>" ਜਿਸਦੀ ਅਸੀਂ ਇਸ ਵੇਲੇ ਜਾਂਚ ਕਰ ਰਹੇ ਹਾਂ। ਇਹ ਸੰਭਾਵੀ ਤੌਰ \'ਤੇ ਤੁਹਾਡੇ ਵੌਇਸਮੇਲ ਸਰਵਰ ਤੋਂ ਵੌਇਸਮੇਲਾਂ ਨੂੰ ਮਿਟਾ ਦੇਵੇਗੀ। ਭਵਿੱਖ ਵਿੱਚ ਇਸ ਵਿਸ਼ੇਸ਼ਤਾ ਦਾ ਸਮਰਥਨ ਕਰਨ ਦੀਆਂ ਕੋਈ ਗਾਰੰਟੀਆਂ ਨਹੀਂ ਹਨ। ਅਸੀਂ ਹਾਲਾਂਕਿ ਵਿਸ਼ੇਸ਼ਤਾ \'ਤੇ ਪ੍ਰਤੀਕਰਮ ਨੂੰ ਪਸੰਦ ਕਰਾਂਗੇ।"</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"PIN ਸੈੱਟ ਕਰੋ"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN ਬਦਲੋ"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"ਦ੍ਰਿਸ਼ਟਾਂਤਕ ਵੌਇਸਮੇਲ ਨੂੰ PIN ਬਦਲਣ ਲਈ ਯੋਗ ਬਣਾਇਆ ਜਾਣਾ ਲਾਜ਼ਮੀ ਹੈ"</string>
diff --git a/java/com/android/voicemail/impl/res/values-pl/strings.xml b/java/com/android/voicemail/impl/res/values-pl/strings.xml
index 83003df97..25b891475 100644
--- a/java/com/android/voicemail/impl/res/values-pl/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-pl/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Ustawienia zaawansowane"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Wizualna poczta głosowa"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Dodatkowe miejsce i kopia zapasowa"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"To jest funkcja eksperymentalna"</i></b>", którą obecnie testujemy. Może ona usunąć wiadomości głosowe z Twojego serwera poczty głosowej. Nie gwarantujemy, że ta funkcja będzie w przyszłości obsługiwana. Chętnie jednak dowiemy się, co o niej sądzisz."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Ustaw kod PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Zmień kod PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Aby można było zmienić kod PIN, wizualna poczta głosowa musi być włączona"</string>
diff --git a/java/com/android/voicemail/impl/res/values-pt-rBR/strings.xml b/java/com/android/voicemail/impl/res/values-pt-rBR/strings.xml
index a0eee43ae..c93402e36 100644
--- a/java/com/android/voicemail/impl/res/values-pt-rBR/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-pt-rBR/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Configurações avançadas"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Correio de voz visual"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Armazenamento extra e backup"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Este é um recurso experimental"</i></b>" que estamos testando. Talvez ele exclua os correios de voz do seu servidor. Não há garantias de suporte no futuro, mas gostaríamos de receber seu feedback."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Definir PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Alterar PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"O correio de voz visual precisa ser ativado para alterar o PIN"</string>
diff --git a/java/com/android/voicemail/impl/res/values-pt-rPT/strings.xml b/java/com/android/voicemail/impl/res/values-pt-rPT/strings.xml
index 2be877e23..00ed0331b 100644
--- a/java/com/android/voicemail/impl/res/values-pt-rPT/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-pt-rPT/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Definições avançadas"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Mensagem de correio de voz visual"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Cópia de segurança e armazenamento extra"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"É uma funcionalidade experimental"</i></b>" que estamos a testar. Poderá eliminar mensagens de correio de voz do servidor de correio de voz. Não há garantias de suporte para esta funcionalidade. Gostaríamos de receber comentários sobre a mesma."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Definir PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Alterar PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"A mensagem de correio de voz visual tem de estar ativada para poder alterar o PIN"</string>
diff --git a/java/com/android/voicemail/impl/res/values-pt/strings.xml b/java/com/android/voicemail/impl/res/values-pt/strings.xml
index a0eee43ae..c93402e36 100644
--- a/java/com/android/voicemail/impl/res/values-pt/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-pt/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Configurações avançadas"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Correio de voz visual"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Armazenamento extra e backup"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Este é um recurso experimental"</i></b>" que estamos testando. Talvez ele exclua os correios de voz do seu servidor. Não há garantias de suporte no futuro, mas gostaríamos de receber seu feedback."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Definir PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Alterar PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"O correio de voz visual precisa ser ativado para alterar o PIN"</string>
diff --git a/java/com/android/voicemail/impl/res/values-ro/strings.xml b/java/com/android/voicemail/impl/res/values-ro/strings.xml
index 1c98d5a20..9099065c1 100644
--- a/java/com/android/voicemail/impl/res/values-ro/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ro/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Setări avansate"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Mesagerie vocală vizuală"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Backup și spațiu de stocare suplimentare"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Aceasta este o funcție experimentală"</i></b>" în curs de testare. E posibil ca mesajele vocale de pe serverul de mesagerie vocală să fie șterse. Nu se poate garanta acceptarea acestei funcții pe viitor, însă feedbackul dvs. e bine-venit."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Setați codul PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Schimbați codul PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Mesageria vocală vizuală trebuie activată pentru a schimba codul PIN."</string>
diff --git a/java/com/android/voicemail/impl/res/values-ru/strings.xml b/java/com/android/voicemail/impl/res/values-ru/strings.xml
index f899f149e..322b41bfb 100644
--- a/java/com/android/voicemail/impl/res/values-ru/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ru/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Расширенные настройки"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Визуальная голосовая почта"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Дополнительное место для хранения и резервного копирования"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Это экспериментальная функция"</i></b>", которая сейчас проходит тестирование. Возможно, ваши голосовые сообщения будут удалены с вашего сервера. Поддержка этой функции в дальнейшем не гарантируется. Мы бы хотели узнать ваше мнение о ней."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Установка PIN-кода"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Изменение PIN-кода"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Чтобы изменить PIN-код, включите визуальную голосовую почту"</string>
diff --git a/java/com/android/voicemail/impl/res/values-si/strings.xml b/java/com/android/voicemail/impl/res/values-si/strings.xml
index b5dc7826c..8ad6f87e6 100644
--- a/java/com/android/voicemail/impl/res/values-si/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-si/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"උසස් සැකසීම්"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"දෘශ්‍ය හඬ තැපෑල"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"අතිරේක උපස්ථය සහ ගබඩාව"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"මෙය අත්හදා බැලීමේ විශේෂාංගයකි"</i></b>" අපි දැන් පරීක්ෂා කරමින් සිටිමු. මෙය විභව්‍යව හඬ තැපැල් ඔබේ සේවාදායකයෙන් මකනු ඇත. මෙම විශේෂාංගය අනාගතයේදී සහාය දැක්වීම ගැන ඇපවීම් නැත. එසේ වුවත් අපි විශේෂාංගය ගැන ප්‍රතිපෝෂණවලට ආදරය කරන්නෙමු."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"PIN අංකය සකසන්න"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN අංකය වෙනස් කරන්න"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN අංකය වෙනස් කිරීමට දෘශ්‍ය හඬ තැපෑල සබල කළ යුතුය"</string>
diff --git a/java/com/android/voicemail/impl/res/values-sk/strings.xml b/java/com/android/voicemail/impl/res/values-sk/strings.xml
index 5a81a1bd4..80252d454 100644
--- a/java/com/android/voicemail/impl/res/values-sk/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-sk/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Rozšírené nastavenia"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Vizuálna hlasová schránka"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Ďalšie zálohovanie a úložisko"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Toto je experimentálna funkcia"</i></b>", ktorú práve testujeme. Táto funkcia vám môže odstrániť hlasové správy zo servera hlasovej schránky. Nemôžeme zaručiť, že bude podporovaná aj v budúcnosti, no budeme vám vďační za poskytnutie spätnej väzby."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Nastavenie kódu PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Zmena kódu PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN možno zmeniť až po povolení vizuálnej hlasovej schránky"</string>
diff --git a/java/com/android/voicemail/impl/res/values-sl/strings.xml b/java/com/android/voicemail/impl/res/values-sl/strings.xml
index ce0f40ec8..b634d156a 100644
--- a/java/com/android/voicemail/impl/res/values-sl/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-sl/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Dodatne nastavitve"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Vizualno sporočilo v odzivniku"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Dodatno varnostno kopiranje in shramba"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"To je poskusna funkcija"</i></b>", za katero trenutno izvajamo preskuse. Sporočila v odzivniku bodo morda izbrisana iz strežnika za sporočila v odzivniku. Ni mogoče jamčiti, da bo ta funkcija podprta tudi v prihodnje. Kljub temu bomo veseli vaših povratnih informacij o funkciji."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Nastavitev kode PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Sprememba kode PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Če želite spremeniti kodo PIN, morajo biti vizualna sporočila v odzivniku omogočena"</string>
diff --git a/java/com/android/voicemail/impl/res/values-sq/strings.xml b/java/com/android/voicemail/impl/res/values-sq/strings.xml
index 472e60c0d..59db0fd74 100644
--- a/java/com/android/voicemail/impl/res/values-sq/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-sq/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Cilësimet e përparuara"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Posta zanore vizuale"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Rezervimi dhe hapësira ruajtëse shtesë"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Ky është një funksion eksperimental"</i></b>" që po e testojmë aktualisht. Kjo mund të fshijë posta zanore nga serveri i postës zanore. Nuk ka garanci për mbështetjen e këtij funksioni në të ardhmen. Megjithatë do të na pëlqente të merrnim komente për funksionin."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Konfiguro kodin PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Ndrysho kodin PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Duhet të aktivizohet posta zanore vizuale për të ndryshuar kodin PIN"</string>
diff --git a/java/com/android/voicemail/impl/res/values-sr/strings.xml b/java/com/android/voicemail/impl/res/values-sr/strings.xml
index 431d0dfb3..d4998ed2e 100644
--- a/java/com/android/voicemail/impl/res/values-sr/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-sr/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Напредна подешавања"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Визуелна говорна пошта"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Додатне резервне копије и простор"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Ово је експериментална функција"</i></b>" коју тренутно тестирамо. Тако ће се можда избрисати говорне поруке са сервера говорне поште. Нема гаранција да ће ова функција бити подржана и у будућности. Ипак, желимо да добијамо повратне информације о њој."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Подесите PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Промените PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Морате да омогућите визуелну говорну пошту да бисте променили PIN"</string>
diff --git a/java/com/android/voicemail/impl/res/values-sv/strings.xml b/java/com/android/voicemail/impl/res/values-sv/strings.xml
index cba2b15c8..c69a2df5f 100644
--- a/java/com/android/voicemail/impl/res/values-sv/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-sv/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Avancerade inställningar"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Visuell röstbrevlåda"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Extra säkerhetskopiering och lagring"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Det här är en experimentfunktion"</i></b>" som vi för närvarande testar. Den kan potentiellt radera röstmeddelanden på röstbrevlådans server. Vi garanterar inte support för den här funktionen i framtiden. Vi är dock tacksamma för synpunkter om funktionen."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Ställ in pinkod"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Ändra pinkod"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Visuell röstbrevlåda måste vara aktiverat för att ändra pinkoden"</string>
diff --git a/java/com/android/voicemail/impl/res/values-sw/strings.xml b/java/com/android/voicemail/impl/res/values-sw/strings.xml
index 99de90ca5..d1cccc78c 100644
--- a/java/com/android/voicemail/impl/res/values-sw/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-sw/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Mipangilio ya Kina"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Ujumbe wa Sauti Unaoonekana"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Nafasi ya ziada na hifadhi rudufu"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Hiki ni kipengele cha majaribio"</i></b>" tunachoijaribu kwa sasa. Huenda kitafuta ujumbe wa sauti kutoka kwenye seva yako ya ujumbe wa sauti. Hakuna hakikisho yoyote kwamba kipengele hiki kitatumika katika siku zijazo. Hata hivyo, tungependa kupata maoni yako kuhusu kipengele hiki."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Weka PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Badilisha PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Lazima uruhusu kipengele cha ujumbe wa sauti unaoonekana ili ubadilishe PIN"</string>
diff --git a/java/com/android/voicemail/impl/res/values-ta/strings.xml b/java/com/android/voicemail/impl/res/values-ta/strings.xml
index a6c97c112..0c3c454e1 100644
--- a/java/com/android/voicemail/impl/res/values-ta/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ta/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"மேம்பட்ட அமைப்புகள்"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"விஷூவல் குரலஞ்சல்"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"கூடுதல் காப்புப் பிரதியும் சேமிப்பகமும்"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" தற்போது நாங்கள் நடத்தி வரும் சோதனையில் "<b><i>"இது ஒரு சோதனை அம்சமாகும்"</i></b>". இது உங்கள் குரலஞ்சல் சேவையகத்திலிருந்து குரலஞ்சல்களை நீக்க சாத்தியமுள்ளது. இந்த அம்சம் எதிர்காலத்தில் ஆதரிக்கப்படும் என்பதற்கு உத்திரவாதம் இல்லை. இருப்பினும் இந்த அம்சத்தைப் பற்றிய கருத்தை வரவேற்கிறோம்."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"பின்னை அமை"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"பின்னை மாற்று"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"பின்னை மாற்ற, விஷுவல் குரலஞ்சலை இயக்க வேண்டும்"</string>
diff --git a/java/com/android/voicemail/impl/res/values-te/strings.xml b/java/com/android/voicemail/impl/res/values-te/strings.xml
index 2ad08cffe..7a865f43f 100644
--- a/java/com/android/voicemail/impl/res/values-te/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-te/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"అధునాతన సెట్టింగ్‌లు"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"దృశ్యమాన వాయిస్ మెయిల్"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"అదనపు బ్యాకప్ మరియు నిల్వ"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"ఇది ప్రయోగాత్మక లక్షణం"</i></b>" ప్రస్తుతం మేము దీన్ని పరీక్షిస్తున్నాము. దీని వలన మీ వాయిస్ మెయిల్ సర్వర్ నుండి సంభావ్యంగా వాయిస్ మెయిల్‌లు తొలగించబడతాయి. భవిష్యత్తులో ఈ లక్షణానికి మద్దతు ఉంటుందని ఎలాంటి హామీ అందించబడదు. అయితే, లక్షణంపై అభిప్రాయాన్ని అందిస్తే మేము సంతోషిస్తాము."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"PINని సెట్ చేయండి"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PINను మార్చండి"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PINని మార్చడానికి తప్పనిసరిగా దృశ్యమాన వాయిస్ మెయిల్‌ను ప్రారంభించాలి"</string>
diff --git a/java/com/android/voicemail/impl/res/values-th/strings.xml b/java/com/android/voicemail/impl/res/values-th/strings.xml
index 49b07dfa2..68b32fb45 100644
--- a/java/com/android/voicemail/impl/res/values-th/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-th/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"การตั้งค่าขั้นสูง"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"ภาพแสดงข้อความเสียง"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"การสำรองข้อมูลและพื้นที่เก็บข้อมูลเพิ่มเติม"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"นี่คือคุณลักษณะทดลอง"</i></b>"ที่เรากำลังทดสอบการใช้งานอยู่ ซึ่งอาจลบข้อความเสียงออกจากเซิร์ฟเวอร์ข้อความเสียงได้ เราไม่รับประกันว่าจะรองรับคุณลักษณะนี้ในอนาคต แต่ยินดีรับฟังความคิดเห็น"</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"ตั้งค่า PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"เปลี่ยน PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"ต้องเปิดใช้ข้อความเสียงพร้อมภาพเพื่อเปลี่ยน PIN"</string>
diff --git a/java/com/android/voicemail/impl/res/values-tl/strings.xml b/java/com/android/voicemail/impl/res/values-tl/strings.xml
index 62623b633..c14919c03 100644
--- a/java/com/android/voicemail/impl/res/values-tl/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-tl/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Mga Advanced na Setting"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Visual na Voicemail"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Karagdagang backup at storage"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Eksperimental na feature ito"</i></b>" na kasalukuyan naming sinusubukan. Posible nitong i-delete ang mga voicemail mula sa iyong server ng voicemail. Walang garantiyang susuportahan ang feature na ito sa hinaharap. Gayunpaman, gusto naming makakuha ng feedback tungkol sa feature."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Magtakda ng PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Palitan ang PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Dapat naka-enable ang visual na voicemail upang palitan ang PIN"</string>
diff --git a/java/com/android/voicemail/impl/res/values-tr/strings.xml b/java/com/android/voicemail/impl/res/values-tr/strings.xml
index aed722a11..e8f9336f3 100644
--- a/java/com/android/voicemail/impl/res/values-tr/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-tr/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Gelişmiş Ayarlar"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Görsel Sesli Mesaj"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Ekstra yedekleme ve depolama alanı"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b>"Bu, test etmekte olduğumuz "<i>"deneysel bir özelliktir"</i></b>". Bu özellik, sesli mesaj sunucunuzdaki mesajların silinmesine neden olabilir ve gelecekte desteklenmeyebilir. Yine de özellikle ilgili geri bildiriminizi öğrenmek isteriz."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"PIN belirleyin"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN\'i değiştirin"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN\'i değiştirebilmek için görsel sesli mesaj etkinleştirilmelidir"</string>
diff --git a/java/com/android/voicemail/impl/res/values-uk/strings.xml b/java/com/android/voicemail/impl/res/values-uk/strings.xml
index c3cbee681..760177ca4 100644
--- a/java/com/android/voicemail/impl/res/values-uk/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-uk/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Розширені налаштування"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Візуальна голосова пошта"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Додаткова пам’ять і резервне копіювання"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Це експериментальна функція,"</i></b>" яку ми зараз тестуємо. У результаті її використання голосові повідомлення може бути видалено із сервера голосової пошти. Ми не гарантуємо, що ця функція підтримуватиметься в майбутньому, однак хочемо отримати відгук про неї."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Установити PIN-код"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Змінити PIN-код"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Щоб змінити PIN-код, потрібно ввімкнути візуальну голосову пошту"</string>
diff --git a/java/com/android/voicemail/impl/res/values-ur/strings.xml b/java/com/android/voicemail/impl/res/values-ur/strings.xml
index 201e6e910..2105fae08 100644
--- a/java/com/android/voicemail/impl/res/values-ur/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ur/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"اعلی ترتیبات"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"بصری صوتی میل"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"اضافی بیک اپ اور اسٹوریج"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"یہ ایک تجرباتی خصوصیت ہے"</i></b>" جسے ابھی ہم ٹیسٹ کر رہے ہیں۔ یہ ممکنہ طور پر آپ کے صوتی میل سرور پر سے آپ کی صوتی میلز کو حذف کر دے گی۔ مستقبل میں اس خصوصیت کی معاونت کی کوئی ضمانت نہیں ہے۔ لیکن ہم اس خصوصیت پر تاثرات پسند کریں گے۔"</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"‏PIN سیٹ کریں"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"‏PIN تبدیل کریں"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"‏PIN تبدیل کرنے کیلئے بصری صوتی میل اہل ہونی چاہئیے"</string>
diff --git a/java/com/android/voicemail/impl/res/values-uz/strings.xml b/java/com/android/voicemail/impl/res/values-uz/strings.xml
index 7f26475ec..fad79164d 100644
--- a/java/com/android/voicemail/impl/res/values-uz/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-uz/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Kengaytirilgan sozlamalar"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Vizual ovozli pochta"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Zaxira. va saqlash u-n qo‘shimcha xotira"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Bu – tajribaviy xususiyat bo‘lib,"</i></b>" u ayni vaqtda sinovdan o‘tkazilmoqda. Sizning ovozli xabarlaringiz, ehtimol, ovozli pochta serveridan o‘chirib tashlanadi. Bu xususiyatning keyinchalik qo‘llab-quvvatlanishi kafolatlanmaydi. Shunday bo‘lsa-da, u haqda fikr-mulohaza bildirishingizni xohlaymiz."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"PIN kod o‘rnatish"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN kodni o‘zgartirish"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN kodni o‘zgartirish uchun vizual ovozli pochtani yoqish lozim."</string>
diff --git a/java/com/android/voicemail/impl/res/values-vi/strings.xml b/java/com/android/voicemail/impl/res/values-vi/strings.xml
index a0b25f803..1d029ea12 100644
--- a/java/com/android/voicemail/impl/res/values-vi/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-vi/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Cài đặt nâng cao"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Thư thoại kèm theo hình ảnh"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Bộ nhớ và bản sao lưu bổ sung"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Đây là một tính năng thử nghiệm"</i></b>" chúng tôi hiện đang thử nghiệm. Tính năng này có khả năng sẽ xóa thư thoại khỏi máy chủ thư thoại của bạn. Không có đảm bảo về việc hỗ trợ tính năng này trong tương lai. Mặc dù vậy, chúng tôi vẫn mong muốn nhận được phản hồi về tính năng này."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Đặt mã PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Thay đổi mã PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Phải bật thư thoại kèm theo hình ảnh để thay đổi mã PIN"</string>
diff --git a/java/com/android/voicemail/impl/res/values-zh-rCN/strings.xml b/java/com/android/voicemail/impl/res/values-zh-rCN/strings.xml
index 9bfbe368d..d70f1fa51 100644
--- a/java/com/android/voicemail/impl/res/values-zh-rCN/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-zh-rCN/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"高级设置"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"可视语音信箱"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"额外存储空间和备份功能"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"这是一项试验性功能"</i></b>" 我们目前正在进行测试。使用此功能可能会将语音邮件从您的语音邮件服务器上删除。我们不保证将来会支持此功能,但希望能收到针对此功能的反馈。"</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"设置 PIN 码"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"更改 PIN 码"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"必须启用可视语音信箱才可更改 PIN 码"</string>
diff --git a/java/com/android/voicemail/impl/res/values-zh-rHK/strings.xml b/java/com/android/voicemail/impl/res/values-zh-rHK/strings.xml
index 6c1ed4d15..4adc3fd97 100644
--- a/java/com/android/voicemail/impl/res/values-zh-rHK/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-zh-rHK/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"進階設定"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"視像留言"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"額外備份功能和儲存空間"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"此為我們目前正在測試的實驗性功能"</i></b>",有可能會將您的留言從留言伺服器刪除。我們不保證日後會支援此功能,但還是歡迎您提供相關意見。"</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"設定 PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"變更 PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"必須啟用視像留言才能變更 PIN"</string>
diff --git a/java/com/android/voicemail/impl/res/values-zh-rTW/strings.xml b/java/com/android/voicemail/impl/res/values-zh-rTW/strings.xml
index 0af6ed152..6ff084f60 100644
--- a/java/com/android/voicemail/impl/res/values-zh-rTW/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-zh-rTW/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"進階設定"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"視覺化語音信箱"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"額外的備份功能和儲存空間"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b>"這是實驗性功能"<i></i></b>",目前正在測試階段,而且可能會從你的語音信箱伺服器中刪除語音留言。我們不保證日後會支援此功能,但還是希望聽聽你的寶貴意見。"</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"設定 PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"變更 PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"必須啟用視覺化語音信箱才能變更 PIN"</string>
diff --git a/java/com/android/voicemail/impl/res/values-zu/strings.xml b/java/com/android/voicemail/impl/res/values-zu/strings.xml
index 81d4d3548..5adf300e5 100644
--- a/java/com/android/voicemail/impl/res/values-zu/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-zu/strings.xml
@@ -24,7 +24,6 @@
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Izilungiselelo ezithuthukisiwe"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Ivoyisimeyili ebonakalayo"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Isipele esingeziwe nesitoreji"</string>
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer" msgid="401509437213449235">" "<b><i>"Lesi isici sokuhlola"</i></b>" manje esisihlolayo. Lokhu kunamandla okususa amavoyisimeyili kusukela kuseva yakho yevoyisimeyili. Azikho iziqinisekiso zokusekela lesi sici ngokuzayo. Singathanda impendulo kusici yize kunjalo."</string>
<string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"Setha i-PIN"</string>
<string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Shintsha i-PIN"</string>
<string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Ivoyisimeyili ebonakalayo kumele inikwe amandla ukuze ishintshe i-PIN"</string>
diff --git a/java/com/android/voicemail/impl/res/values/strings.xml b/java/com/android/voicemail/impl/res/values/strings.xml
index c8085619b..bb754d18b 100644
--- a/java/com/android/voicemail/impl/res/values/strings.xml
+++ b/java/com/android/voicemail/impl/res/values/strings.xml
@@ -59,11 +59,6 @@
<string name="voicemail_visual_voicemail_auto_archive_switch_title">
Extra backup and storage
</string>
- <!-- Visual voicemail archive temporary description [CHAR LIMIT=40] -->
- <string name="voicemail_visual_voicemail_auto_archive_temporary_disclaimer">
- <b><i>This is a experimental feature</i></b> we are currently testing. This will potentially delete voicemails from your voicemail server. There are no guarantees of supporting this feature in the future. We would love feedback on the feature though."
- </string>
-
<!-- Voicemail change PIN dialog title [CHAR LIMIT=40] -->
<string name="voicemail_set_pin_preference_title">Set PIN</string>
diff --git a/java/com/android/voicemail/impl/scheduling/BaseTask.java b/java/com/android/voicemail/impl/scheduling/BaseTask.java
index 4cc6dd59e..0144e346f 100644
--- a/java/com/android/voicemail/impl/scheduling/BaseTask.java
+++ b/java/com/android/voicemail/impl/scheduling/BaseTask.java
@@ -18,12 +18,14 @@ package com.android.voicemail.impl.scheduling;
import android.content.Context;
import android.content.Intent;
+import android.os.Bundle;
import android.os.SystemClock;
import android.support.annotation.CallSuper;
import android.support.annotation.MainThread;
import android.support.annotation.NonNull;
import android.support.annotation.WorkerThread;
import android.telecom.PhoneAccountHandle;
+import com.android.dialer.proguard.UsedByReflection;
import com.android.voicemail.impl.Assert;
import com.android.voicemail.impl.NeededForTesting;
import java.util.ArrayList;
@@ -33,10 +35,15 @@ import java.util.List;
* Provides common utilities for task implementations, such as execution time and managing {@link
* Policy}
*/
+@UsedByReflection(value = "Tasks.java")
public abstract class BaseTask implements Task {
private static final String EXTRA_PHONE_ACCOUNT_HANDLE = "extra_phone_account_handle";
+ private static final String EXTRA_EXECUTION_TIME = "extra_execution_time";
+
+ private Bundle mExtras;
+
private Context mContext;
private int mId;
@@ -58,7 +65,7 @@ public abstract class BaseTask implements Task {
/**
* Modify the task ID to prevent arbitrary task from executing. Can only be called before {@link
- * #onCreate(Context, Intent, int, int)} returns.
+ * #onCreate(Context, Bundle)} returns.
*/
@MainThread
public void setId(int id) {
@@ -86,8 +93,7 @@ public abstract class BaseTask implements Task {
return mPhoneAccountHandle;
}
/**
- * Should be call in the constructor or {@link Policy#onCreate(BaseTask, Intent, int, int)} will
- * be missed.
+ * Should be call in the constructor or {@link Policy#onCreate(BaseTask, Bundle)} will be missed.
*/
@MainThread
public BaseTask addPolicy(Policy policy) {
@@ -107,6 +113,7 @@ public abstract class BaseTask implements Task {
mHasFailed = true;
}
+ /** @param timeMillis the time since epoch, in milliseconds. */
@MainThread
public void setExecutionTime(long timeMillis) {
Assert.isMainThread();
@@ -131,7 +138,7 @@ public abstract class BaseTask implements Task {
*/
public static Intent createIntent(
Context context, Class<? extends BaseTask> task, PhoneAccountHandle phoneAccountHandle) {
- Intent intent = TaskSchedulerService.createIntent(context, task);
+ Intent intent = Tasks.createIntent(context, task);
intent.putExtra(EXTRA_PHONE_ACCOUNT_HANDLE, phoneAccountHandle);
return intent;
}
@@ -142,12 +149,27 @@ public abstract class BaseTask implements Task {
}
@Override
+ public Bundle toBundle() {
+ mExtras.putLong(EXTRA_EXECUTION_TIME, mExecutionTime);
+ return mExtras;
+ }
+
+ @Override
@CallSuper
- public void onCreate(Context context, Intent intent, int flags, int startId) {
+ public void onCreate(Context context, Bundle extras) {
mContext = context;
- mPhoneAccountHandle = intent.getParcelableExtra(EXTRA_PHONE_ACCOUNT_HANDLE);
+ mExtras = extras;
+ mPhoneAccountHandle = extras.getParcelable(EXTRA_PHONE_ACCOUNT_HANDLE);
for (Policy policy : mPolicies) {
- policy.onCreate(this, intent, flags, startId);
+ policy.onCreate(this, extras);
+ }
+ }
+
+ @Override
+ @CallSuper
+ public void onRestore(Bundle extras) {
+ if (mExtras.containsKey(EXTRA_EXECUTION_TIME)) {
+ mExecutionTime = extras.getLong(EXTRA_EXECUTION_TIME);
}
}
diff --git a/java/com/android/voicemail/impl/scheduling/BlockerTask.java b/java/com/android/voicemail/impl/scheduling/BlockerTask.java
index 353508d56..1c8badaed 100644
--- a/java/com/android/voicemail/impl/scheduling/BlockerTask.java
+++ b/java/com/android/voicemail/impl/scheduling/BlockerTask.java
@@ -17,10 +17,12 @@
package com.android.voicemail.impl.scheduling;
import android.content.Context;
-import android.content.Intent;
+import android.os.Bundle;
+import com.android.dialer.proguard.UsedByReflection;
import com.android.voicemail.impl.VvmLog;
/** Task to block another task of the same ID from being queued for a certain amount of time. */
+@UsedByReflection(value = "Tasks.java")
public class BlockerTask extends BaseTask {
private static final String TAG = "BlockerTask";
@@ -33,10 +35,10 @@ public class BlockerTask extends BaseTask {
}
@Override
- public void onCreate(Context context, Intent intent, int flags, int startId) {
- super.onCreate(context, intent, flags, startId);
- setId(intent.getIntExtra(EXTRA_TASK_ID, TASK_INVALID));
- setExecutionTime(getTimeMillis() + intent.getIntExtra(EXTRA_BLOCK_FOR_MILLIS, 0));
+ public void onCreate(Context context, Bundle extras) {
+ super.onCreate(context, extras);
+ setId(extras.getInt(EXTRA_TASK_ID, TASK_INVALID));
+ setExecutionTime(getTimeMillis() + extras.getInt(EXTRA_BLOCK_FOR_MILLIS, 0));
}
@Override
@@ -46,6 +48,6 @@ public class BlockerTask extends BaseTask {
@Override
public void onDuplicatedTaskAdded(Task task) {
- VvmLog.v(TAG, task.toString() + "blocked, " + getReadyInMilliSeconds() + "millis remaining");
+ VvmLog.i(TAG, task + "blocked, " + getReadyInMilliSeconds() + "millis remaining");
}
}
diff --git a/java/com/android/voicemail/impl/scheduling/MinimalIntervalPolicy.java b/java/com/android/voicemail/impl/scheduling/MinimalIntervalPolicy.java
index 8b2fe7098..76fba4fb0 100644
--- a/java/com/android/voicemail/impl/scheduling/MinimalIntervalPolicy.java
+++ b/java/com/android/voicemail/impl/scheduling/MinimalIntervalPolicy.java
@@ -17,6 +17,7 @@
package com.android.voicemail.impl.scheduling;
import android.content.Intent;
+import android.os.Bundle;
import com.android.voicemail.impl.scheduling.Task.TaskId;
/**
@@ -35,7 +36,7 @@ public class MinimalIntervalPolicy implements Policy {
}
@Override
- public void onCreate(BaseTask task, Intent intent, int flags, int startId) {
+ public void onCreate(BaseTask task, Bundle extras) {
mTask = task;
mId = mTask.getId();
}
@@ -47,7 +48,7 @@ public class MinimalIntervalPolicy implements Policy {
public void onCompleted() {
if (!mTask.hasFailed()) {
Intent intent =
- mTask.createIntent(mTask.getContext(), BlockerTask.class, mId.phoneAccountHandle);
+ BaseTask.createIntent(mTask.getContext(), BlockerTask.class, mId.phoneAccountHandle);
intent.putExtra(BlockerTask.EXTRA_TASK_ID, mId.id);
intent.putExtra(BlockerTask.EXTRA_BLOCK_FOR_MILLIS, mBlockForMillis);
mTask.getContext().startService(intent);
diff --git a/java/com/android/voicemail/impl/scheduling/Policy.java b/java/com/android/voicemail/impl/scheduling/Policy.java
index 607782191..9624aeb7d 100644
--- a/java/com/android/voicemail/impl/scheduling/Policy.java
+++ b/java/com/android/voicemail/impl/scheduling/Policy.java
@@ -16,7 +16,7 @@
package com.android.voicemail.impl.scheduling;
-import android.content.Intent;
+import android.os.Bundle;
/**
* A set of listeners managed by {@link BaseTask} for common behaviors such as retrying. Call {@link
@@ -24,7 +24,7 @@ import android.content.Intent;
*/
public interface Policy {
- void onCreate(BaseTask task, Intent intent, int flags, int startId);
+ void onCreate(BaseTask task, Bundle extras);
void onBeforeExecute();
diff --git a/java/com/android/voicemail/impl/scheduling/PostponePolicy.java b/java/com/android/voicemail/impl/scheduling/PostponePolicy.java
index e24df0c7a..46773b53a 100644
--- a/java/com/android/voicemail/impl/scheduling/PostponePolicy.java
+++ b/java/com/android/voicemail/impl/scheduling/PostponePolicy.java
@@ -16,7 +16,7 @@
package com.android.voicemail.impl.scheduling;
-import android.content.Intent;
+import android.os.Bundle;
import com.android.voicemail.impl.VvmLog;
/**
@@ -37,7 +37,7 @@ public class PostponePolicy implements Policy {
}
@Override
- public void onCreate(BaseTask task, Intent intent, int flags, int startId) {
+ public void onCreate(BaseTask task, Bundle extras) {
mTask = task;
mTask.setExecutionTime(mTask.getTimeMillis() + mPostponeMillis);
}
@@ -62,7 +62,7 @@ public class PostponePolicy implements Policy {
if (mTask.hasStarted()) {
return;
}
- VvmLog.d(TAG, "postponing " + mTask);
+ VvmLog.i(TAG, "postponing " + mTask);
mTask.setExecutionTime(mTask.getTimeMillis() + mPostponeMillis);
}
}
diff --git a/java/com/android/voicemail/impl/scheduling/RetryPolicy.java b/java/com/android/voicemail/impl/scheduling/RetryPolicy.java
index a8e4a3d3c..b8703ea15 100644
--- a/java/com/android/voicemail/impl/scheduling/RetryPolicy.java
+++ b/java/com/android/voicemail/impl/scheduling/RetryPolicy.java
@@ -17,6 +17,7 @@
package com.android.voicemail.impl.scheduling;
import android.content.Intent;
+import android.os.Bundle;
import android.telecom.PhoneAccountHandle;
import com.android.voicemail.impl.VoicemailStatus;
import com.android.voicemail.impl.VvmLog;
@@ -60,11 +61,11 @@ public class RetryPolicy implements Policy {
}
@Override
- public void onCreate(BaseTask task, Intent intent, int flags, int startId) {
+ public void onCreate(BaseTask task, Bundle extras) {
mTask = task;
- mRetryCount = intent.getIntExtra(EXTRA_RETRY_COUNT, 0);
+ mRetryCount = extras.getInt(EXTRA_RETRY_COUNT, 0);
if (mRetryCount > 0) {
- VvmLog.d(
+ VvmLog.i(
TAG,
"retry #" + mRetryCount + " for " + mTask + " queued, executing in " + mRetryDelayMillis);
mTask.setExecutionTime(mTask.getTimeMillis() + mRetryDelayMillis);
@@ -85,10 +86,10 @@ public class RetryPolicy implements Policy {
public void onCompleted() {
if (!mFailed || !hasMoreRetries()) {
if (!mFailed) {
- VvmLog.d(TAG, mTask.toString() + " completed successfully");
+ VvmLog.i(TAG, mTask + " completed successfully");
}
if (!hasMoreRetries()) {
- VvmLog.d(TAG, "Retry limit for " + mTask + " reached");
+ VvmLog.i(TAG, "Retry limit for " + mTask + " reached");
}
VvmLog.i(TAG, "committing deferred status: " + mVoicemailStatusEditor.getValues());
mVoicemailStatusEditor.deferredApply();
diff --git a/java/com/android/voicemail/impl/scheduling/Task.java b/java/com/android/voicemail/impl/scheduling/Task.java
index 2d08f5b03..447a9db7b 100644
--- a/java/com/android/voicemail/impl/scheduling/Task.java
+++ b/java/com/android/voicemail/impl/scheduling/Task.java
@@ -17,26 +17,24 @@
package com.android.voicemail.impl.scheduling;
import android.content.Context;
-import android.content.Intent;
+import android.os.Bundle;
import android.support.annotation.MainThread;
import android.support.annotation.WorkerThread;
import android.telecom.PhoneAccountHandle;
import java.util.Objects;
/**
- * A task for {@link TaskSchedulerService} to execute. Since the task is sent through a intent to
- * the scheduler, The task must be constructable with the intent. Specifically, It must have a
- * constructor with zero arguments, and have all relevant data packed inside the intent. Use {@link
- * TaskSchedulerService#createIntent(Context, Class)} to create a intent that will construct the
- * Task.
+ * A task for {@link TaskSchedulerService} to execute. Since the task is sent through a bundle to
+ * the scheduler, The task must be constructable with the bundle. Specifically, It must have a
+ * constructor with zero arguments, and have all relevant data packed inside the bundle. Use {@link
+ * Tasks#createIntent(Context, Class)} to create a intent that will construct the Task.
*
* <p>Only {@link #onExecuteInBackgroundThread()} is run on the worker thread.
*/
public interface Task {
-
/**
* TaskId to indicate it has not be set. If a task does not provide a default TaskId it should be
- * set before {@link Task#onCreate(Context, Intent, int, int) returns}
+ * set before {@link Task#onCreate(Context, Bundle)} returns
*/
int TASK_INVALID = -1;
@@ -49,6 +47,7 @@ public interface Task {
int TASK_UPLOAD = 1;
int TASK_SYNC = 2;
int TASK_ACTIVATION = 3;
+ int TASK_STATUS_CHECK = 4;
/**
* Used to differentiate between types of tasks. If a task with the same TaskId is already in the
@@ -87,8 +86,29 @@ public interface Task {
TaskId getId();
+ /**
+ * Serializes the task into a bundle, which will be stored in a {@link android.app.job.JobInfo}
+ * and used to reconstruct the task even if the app is terminated. The task will be initialized
+ * with {@link #onCreate(Context, Bundle)}.
+ */
+ Bundle toBundle();
+
+ /**
+ * A task object is created through reflection, calling the default constructor. The actual
+ * initialization is done in this method. If the task is not a new instance, but being restored
+ * from a bundle, {@link #onRestore(Bundle)} will be called afterwards.
+ */
+ @MainThread
+ void onCreate(Context context, Bundle extras);
+
+ /**
+ * Called after {@link #onCreate(Context, Bundle)} if the task is being restored from a Bundle
+ * instead creating a new instance. For example, if the task is stored in {@link
+ * TaskSchedulerJobService} during a long sleep, this will be called when the job is ran again and
+ * the tasks are being restored from the saved state.
+ */
@MainThread
- void onCreate(Context context, Intent intent, int flags, int startId);
+ void onRestore(Bundle extras);
/**
* @return number of milliSeconds the scheduler should wait before running this task. A value less
diff --git a/java/com/android/voicemail/impl/scheduling/TaskQueue.java b/java/com/android/voicemail/impl/scheduling/TaskQueue.java
new file mode 100644
index 000000000..fc5aa947a
--- /dev/null
+++ b/java/com/android/voicemail/impl/scheduling/TaskQueue.java
@@ -0,0 +1,149 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.voicemail.impl.scheduling;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import com.android.voicemail.impl.Assert;
+import com.android.voicemail.impl.VvmLog;
+import com.android.voicemail.impl.scheduling.Task.TaskId;
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Queue;
+
+/**
+ * A queue that manages priority and duplication of {@link Task}. A task is identified by a {@link
+ * TaskId}, which consists of an integer representing the operation the task, and a {@link
+ * android.telecom.PhoneAccountHandle} representing which SIM it is operated on.
+ */
+class TaskQueue implements Iterable<Task> {
+
+ private final Queue<Task> queue = new ArrayDeque<>();
+
+ public List<Bundle> toBundles() {
+ List<Bundle> result = new ArrayList<>(queue.size());
+ for (Task task : queue) {
+ result.add(Tasks.toBundle(task));
+ }
+ return result;
+ }
+
+ public void fromBundles(Context context, List<Bundle> pendingTasks) {
+ Assert.isTrue(queue.isEmpty());
+ for (Bundle pendingTask : pendingTasks) {
+ Task task = Tasks.createTask(context, pendingTask);
+ task.onRestore(pendingTask);
+ add(task);
+ }
+ }
+
+ /**
+ * Add a new task to the queue. A new task with a TaskId collision will be discarded, and {@link
+ * Task#onDuplicatedTaskAdded(Task)} will be called on the existing task.
+ *
+ * @return {@code true} if the task is added, or {@code false} if the task is discarded due to
+ * collision.
+ */
+ public boolean add(Task task) {
+ if (task.getId().id == Task.TASK_INVALID) {
+ throw new AssertionError("Task id was not set to a valid value before adding.");
+ }
+ if (task.getId().id != Task.TASK_ALLOW_DUPLICATES) {
+ Task oldTask = getTask(task.getId());
+ if (oldTask != null) {
+ oldTask.onDuplicatedTaskAdded(task);
+ VvmLog.i("TaskQueue.add", "duplicated task added");
+ return false;
+ }
+ }
+ queue.add(task);
+ return true;
+ }
+
+ public void remove(Task task) {
+ queue.remove(task);
+ }
+
+ public Task getTask(TaskId id) {
+ Assert.isMainThread();
+ for (Task task : queue) {
+ if (task.getId().equals(id)) {
+ return task;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Packed return value of {@link #getNextTask(long)}. If a runnable task is found {@link
+ * #minimalWaitTimeMillis} will be {@code null}. If no tasks is runnable {@link #task} will be
+ * {@code null}, and {@link #minimalWaitTimeMillis} will contain the time to wait. If there are no
+ * tasks at all both will be {@code null}.
+ */
+ static final class NextTask {
+ @Nullable final Task task;
+ @Nullable final Long minimalWaitTimeMillis;
+
+ NextTask(@Nullable Task task, @Nullable Long minimalWaitTimeMillis) {
+ this.task = task;
+ this.minimalWaitTimeMillis = minimalWaitTimeMillis;
+ }
+ }
+
+ /**
+ * The next task is the first task with {@link Task#getReadyInMilliSeconds()} return a value less
+ * then {@code readyToleranceMillis}, in insertion order. If no task matches this criteria, the
+ * minimal value of {@link Task#getReadyInMilliSeconds()} is returned instead. If there are no
+ * tasks at all, the minimalWaitTimeMillis will also be null.
+ */
+ @NonNull
+ NextTask getNextTask(long readyToleranceMillis) {
+ Long minimalWaitTime = null;
+ for (Task task : queue) {
+ long waitTime = task.getReadyInMilliSeconds();
+ if (waitTime < readyToleranceMillis) {
+ return new NextTask(task, 0L);
+ } else {
+ if (minimalWaitTime == null || waitTime < minimalWaitTime) {
+ minimalWaitTime = waitTime;
+ }
+ }
+ }
+ return new NextTask(null, minimalWaitTime);
+ }
+
+ public void clear() {
+ queue.clear();
+ }
+
+ public int size() {
+ return queue.size();
+ }
+
+ public boolean isEmpty() {
+ return queue.isEmpty();
+ }
+
+ @Override
+ public Iterator<Task> iterator() {
+ return queue.iterator();
+ }
+}
diff --git a/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java b/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java
new file mode 100644
index 000000000..eab410eb0
--- /dev/null
+++ b/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java
@@ -0,0 +1,158 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.voicemail.impl.scheduling;
+
+import android.annotation.TargetApi;
+import android.app.job.JobInfo;
+import android.app.job.JobParameters;
+import android.app.job.JobScheduler;
+import android.app.job.JobService;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.Build.VERSION_CODES;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.Parcelable;
+import android.support.annotation.MainThread;
+import com.android.dialer.constants.ScheduledJobIds;
+import com.android.voicemail.impl.Assert;
+import com.android.voicemail.impl.VvmLog;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A {@link JobService} that will trigger the background execution of {@link TaskSchedulerService}.
+ */
+@TargetApi(VERSION_CODES.O)
+public class TaskSchedulerJobService extends JobService implements TaskSchedulerService.Job {
+
+ private static final String TAG = "TaskSchedulerJobService";
+
+ private static final String EXTRA_TASK_EXTRAS_ARRAY = "extra_task_extras_array";
+
+ private JobParameters jobParameters;
+ private TaskSchedulerService scheduler;
+
+ private final ServiceConnection mConnection =
+ new ServiceConnection() {
+
+ @Override
+ public void onServiceConnected(ComponentName className, IBinder binder) {
+ VvmLog.i(TAG, "TaskSchedulerService connected");
+ scheduler = ((TaskSchedulerService.LocalBinder) binder).getService();
+ scheduler.onStartJob(
+ TaskSchedulerJobService.this,
+ getBundleList(
+ jobParameters.getTransientExtras().getParcelableArray(EXTRA_TASK_EXTRAS_ARRAY)));
+ }
+
+ @Override
+ public void onServiceDisconnected(ComponentName unused) {
+ // local service, process should always be killed together.
+ Assert.fail();
+ }
+ };
+
+ @Override
+ @MainThread
+ public boolean onStartJob(JobParameters params) {
+ jobParameters = params;
+ bindService(
+ new Intent(this, TaskSchedulerService.class), mConnection, Context.BIND_AUTO_CREATE);
+ return true /* job still running in background */;
+ }
+
+ @Override
+ @MainThread
+ public boolean onStopJob(JobParameters params) {
+ scheduler.onStopJob();
+ jobParameters = null;
+ return false /* don't reschedule. TaskScheduler service will post a new job */;
+ }
+
+ /**
+ * Schedule a job to run the {@code pendingTasks}. If a job is already scheduled it will be
+ * appended to the back of the queue and the job will be rescheduled.
+ *
+ * @param delayMillis delay before running the job. Must be 0 if{@code isNewJob} is true.
+ * @param isNewJob a new job will be forced to run immediately.
+ */
+ @MainThread
+ public static void scheduleJob(
+ Context context, List<Bundle> pendingTasks, long delayMillis, boolean isNewJob) {
+ Assert.isMainThread();
+ JobScheduler jobScheduler = context.getSystemService(JobScheduler.class);
+ JobInfo pendingJob = jobScheduler.getPendingJob(ScheduledJobIds.VVM_TASK_SCHEDULER_JOB);
+ VvmLog.i(TAG, "scheduling job with " + pendingTasks.size() + " tasks");
+ if (pendingJob != null) {
+ if (isNewJob) {
+ List<Bundle> existingTasks =
+ getBundleList(
+ pendingJob.getTransientExtras().getParcelableArray(EXTRA_TASK_EXTRAS_ARRAY));
+ VvmLog.i(TAG, "merging job with " + existingTasks.size() + " existing tasks");
+ TaskQueue queue = new TaskQueue();
+ queue.fromBundles(context, existingTasks);
+ for (Bundle pendingTask : pendingTasks) {
+ queue.add(Tasks.createTask(context, pendingTask));
+ }
+ pendingTasks = queue.toBundles();
+ }
+ VvmLog.i(TAG, "canceling existing job.");
+ jobScheduler.cancel(ScheduledJobIds.VVM_TASK_SCHEDULER_JOB);
+ }
+ Bundle extras = new Bundle();
+ extras.putParcelableArray(
+ EXTRA_TASK_EXTRAS_ARRAY, pendingTasks.toArray(new Bundle[pendingTasks.size()]));
+ JobInfo.Builder builder =
+ new JobInfo.Builder(
+ ScheduledJobIds.VVM_TASK_SCHEDULER_JOB,
+ new ComponentName(context, TaskSchedulerJobService.class))
+ .setTransientExtras(extras)
+ .setMinimumLatency(delayMillis)
+ .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY);
+ if (isNewJob) {
+ Assert.isTrue(delayMillis == 0);
+ builder.setOverrideDeadline(0);
+ VvmLog.i(TAG, "running job instantly.");
+ }
+ jobScheduler.schedule(builder.build());
+ VvmLog.i(TAG, "job scheduled");
+ }
+
+ /**
+ * The system will hold a wakelock when {@link #onStartJob(JobParameters)} is called to ensure the
+ * device will not sleep when the job is still running. Finish the job so the system will release
+ * the wakelock
+ */
+ @Override
+ public void finish() {
+ VvmLog.i(TAG, "finishing job and unbinding TaskSchedulerService");
+ jobFinished(jobParameters, false);
+ jobParameters = null;
+ unbindService(mConnection);
+ }
+
+ private static List<Bundle> getBundleList(Parcelable[] parcelables) {
+ List<Bundle> result = new ArrayList<>(parcelables.length);
+ for (Parcelable parcelable : parcelables) {
+ result.add((Bundle) parcelable);
+ }
+ return result;
+ }
+}
diff --git a/java/com/android/voicemail/impl/scheduling/TaskSchedulerService.java b/java/com/android/voicemail/impl/scheduling/TaskSchedulerService.java
index 81bd36fee..5ad2447de 100644
--- a/java/com/android/voicemail/impl/scheduling/TaskSchedulerService.java
+++ b/java/com/android/voicemail/impl/scheduling/TaskSchedulerService.java
@@ -16,20 +16,18 @@
package com.android.voicemail.impl.scheduling;
-import android.app.AlarmManager;
-import android.app.PendingIntent;
+import android.annotation.TargetApi;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.Binder;
+import android.os.Build.VERSION_CODES;
+import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
-import android.os.PowerManager;
-import android.os.PowerManager.WakeLock;
-import android.os.SystemClock;
import android.support.annotation.MainThread;
import android.support.annotation.Nullable;
import android.support.annotation.VisibleForTesting;
@@ -37,20 +35,50 @@ import android.support.annotation.WorkerThread;
import com.android.voicemail.impl.Assert;
import com.android.voicemail.impl.NeededForTesting;
import com.android.voicemail.impl.VvmLog;
-import com.android.voicemail.impl.scheduling.Task.TaskId;
-import java.util.ArrayDeque;
-import java.util.Queue;
+import com.android.voicemail.impl.scheduling.TaskQueue.NextTask;
+import java.util.List;
/**
- * A service to queue and run {@link Task} on a worker thread. Only one task will be ran at a time,
- * and same task cannot exist in the queue at the same time. The service will be started when a
- * intent is received, and stopped when there are no more tasks in the queue.
+ * A service to queue and run {@link Task} with the {@link android.app.job.JobScheduler}. A task is
+ * queued using {@link Context#startService(Intent)}. The intent should contain enough information
+ * in {@link Intent#getExtras()} to construct the task (see {@link Tasks#createIntent(Context,
+ * Class)}).
+ *
+ * <p>All tasks are ran in the background with a wakelock being held by the {@link
+ * android.app.job.JobScheduler}, which is between {@link #onStartJob(Job, List)} and {@link
+ * #finishJob()}. The {@link TaskSchedulerJobService} also has a {@link TaskQueue}, but the data is
+ * stored in the {@link android.app.job.JobScheduler} instead of the process memory, so if the
+ * process is killed the queued tasks will be restored. If a new task is added, a new {@link
+ * TaskSchedulerJobService} will be scheduled to run the task. If the job is already scheduled, the
+ * new task will be pushed into the queue of the scheduled job. If the job is already running, the
+ * job will be queued in process memory.
+ *
+ * <p>Only one task will be ran at a time, and same task cannot exist in the queue at the same time.
+ * Refer to {@link TaskQueue} for queuing and execution order.
+ *
+ * <p>If there are still tasks in the queue but none are executable immediately, the service will
+ * enter a "sleep", pushing all remaining task into a new job and end the current job.
+ *
+ * <p>The service will be started when a intent is received, and stopped when there are no more
+ * tasks in the queue.
+ *
+ * <p>{@link android.app.job.JobScheduler} is not used directly due to:
+ *
+ * <ul>
+ * <li>The {@link android.telecom.PhoneAccountHandle} used to differentiate task can not be easily
+ * mapped into an integer for job id
+ * <li>A job cannot be mutated to store information such as retry count.
+ * </ul>
*/
+@SuppressWarnings("AndroidApiChecker") /* stream() */
+@TargetApi(VERSION_CODES.O)
public class TaskSchedulerService extends Service {
- private static final String TAG = "VvmTaskScheduler";
+ interface Job {
+ void finish();
+ }
- private static final String ACTION_WAKEUP = "action_wakeup";
+ private static final String TAG = "VvmTaskScheduler";
private static final int READY_TOLERANCE_MILLISECONDS = 100;
@@ -58,15 +86,13 @@ public class TaskSchedulerService extends Service {
* Threshold to determine whether to do a short or long sleep when a task is scheduled in the
* future.
*
- * <p>A short sleep will continue to held the wake lock and use {@link
- * Handler#postDelayed(Runnable, long)} to wait for the next task.
+ * <p>A short sleep will continue the job and use {@link Handler#postDelayed(Runnable, long)} to
+ * wait for the next task.
*
- * <p>A long sleep will release the wake lock and set a {@link AlarmManager} alarm. The alarm is
- * exact and will wake up the device. Note: as this service is run in the telephony process it
- * does not seem to be restricted by doze or sleep, it will fire exactly at the moment. The
- * unbundled version should take doze into account.
+ * <p>A long sleep will finish the job and schedule a new one. The exact execution time is
+ * subjected to {@link android.app.job.JobScheduler} battery optimization, and is not exact.
*/
- private static final int SHORT_SLEEP_THRESHOLD_MILLISECONDS = 60_000;
+ private static final int SHORT_SLEEP_THRESHOLD_MILLISECONDS = 10_000;
/**
* When there are no more tasks to be run the service should be stopped. But when all tasks has
* finished there might still be more tasks in the message queue waiting to be processed,
@@ -75,14 +101,9 @@ public class TaskSchedulerService extends Service {
*/
private static final int STOP_DELAY_MILLISECONDS = 5_000;
- private static final String EXTRA_CLASS_NAME = "extra_class_name";
-
- private static final String WAKE_LOCK_TAG = "TaskSchedulerService_wakelock";
-
// The thread to run tasks on
private volatile WorkerThreadHandler mWorkerThreadHandler;
- private Context mContext = this;
/**
* Used by tests to turn task handling into a single threaded process by calling {@link
* Handler#handleMessage(Message)} directly
@@ -91,21 +112,27 @@ public class TaskSchedulerService extends Service {
private MainThreadHandler mMainThreadHandler;
- private WakeLock mWakeLock;
+ // Binder given to clients
+ private final IBinder mBinder = new LocalBinder();
/** Main thread only, access through {@link #getTasks()} */
- private final Queue<Task> mTasks = new ArrayDeque<>();
+ private final TaskQueue mTasks = new TaskQueue();
private boolean mWorkerThreadIsBusy = false;
+ private Job mJob;
+
private final Runnable mStopServiceWithDelay =
new Runnable() {
+ @MainThread
@Override
public void run() {
- VvmLog.d(TAG, "Stopping service");
+ VvmLog.i(TAG, "Stopping service");
+ finishJob();
stopSelf();
}
};
+
/** Should attempt to run the next task when a task has finished or been added. */
private boolean mTaskAutoRunDisabledForTesting = false;
@@ -122,7 +149,7 @@ public class TaskSchedulerService extends Service {
Assert.isNotMainThread();
Task task = (Task) msg.obj;
try {
- VvmLog.v(TAG, "executing task " + task);
+ VvmLog.i(TAG, "executing task " + task);
task.onExecuteInBackgroundThread();
} catch (Throwable throwable) {
VvmLog.e(TAG, "Exception while executing task " + task + ":", throwable);
@@ -157,10 +184,6 @@ public class TaskSchedulerService extends Service {
@MainThread
public void onCreate() {
super.onCreate();
- mWakeLock =
- getSystemService(PowerManager.class)
- .newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKE_LOCK_TAG);
- mWakeLock.setReferenceCounted(false);
HandlerThread thread = new HandlerThread("VvmTaskSchedulerService");
thread.start();
@@ -171,27 +194,27 @@ public class TaskSchedulerService extends Service {
@Override
public void onDestroy() {
mWorkerThreadHandler.getLooper().quit();
- mWakeLock.release();
}
@Override
@MainThread
public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
Assert.isMainThread();
- // maybeRunNextTask() will release the wakelock either by entering a long sleep or stopping
- // the service.
- mWakeLock.acquire();
- if (ACTION_WAKEUP.equals(intent.getAction())) {
- VvmLog.d(TAG, "woke up by AlarmManager");
+ if (intent == null) {
+ VvmLog.w(TAG, "null intent received");
+ return START_NOT_STICKY;
+ }
+ Task task = Tasks.createTask(this, intent.getExtras());
+ Assert.isTrue(task != null);
+ addTask(task);
+
+ mMainThreadHandler.removeCallbacks(mStopServiceWithDelay);
+ VvmLog.i(TAG, "task added");
+ if (mJob == null) {
+ scheduleJob(0, true);
} else {
- Task task = createTask(intent, flags, startId);
- if (task == null) {
- VvmLog.e(TAG, "cannot create task form intent");
- } else {
- addTask(task);
- }
+ maybeRunNextTask();
}
- maybeRunNextTask();
// STICKY means the service will be automatically restarted will the last intent if it is
// killed.
return START_NOT_STICKY;
@@ -201,66 +224,14 @@ public class TaskSchedulerService extends Service {
@VisibleForTesting
void addTask(Task task) {
Assert.isMainThread();
- if (task.getId().id == Task.TASK_INVALID) {
- throw new AssertionError("Task id was not set to a valid value before adding.");
- }
- if (task.getId().id != Task.TASK_ALLOW_DUPLICATES) {
- Task oldTask = getTask(task.getId());
- if (oldTask != null) {
- oldTask.onDuplicatedTaskAdded(task);
- return;
- }
- }
- mMainThreadHandler.removeCallbacks(mStopServiceWithDelay);
getTasks().add(task);
- maybeRunNextTask();
- }
-
- @MainThread
- @Nullable
- private Task getTask(TaskId taskId) {
- Assert.isMainThread();
- for (Task task : getTasks()) {
- if (task.getId().equals(taskId)) {
- return task;
- }
- }
- return null;
}
@MainThread
- private Queue<Task> getTasks() {
- Assert.isMainThread();
- return mTasks;
- }
-
- /** Create an intent that will queue the <code>task</code> */
- public static Intent createIntent(Context context, Class<? extends Task> task) {
- Intent intent = new Intent(context, TaskSchedulerService.class);
- intent.putExtra(EXTRA_CLASS_NAME, task.getName());
- return intent;
- }
-
@VisibleForTesting
- @MainThread
- @Nullable
- Task createTask(@Nullable Intent intent, int flags, int startId) {
+ TaskQueue getTasks() {
Assert.isMainThread();
- if (intent == null) {
- return null;
- }
- String className = intent.getStringExtra(EXTRA_CLASS_NAME);
- VvmLog.d(TAG, "create task:" + className);
- if (className == null) {
- throw new IllegalArgumentException("EXTRA_CLASS_NAME expected");
- }
- try {
- Task task = (Task) Class.forName(className).newInstance();
- task.onCreate(mContext, intent, flags, startId);
- return task;
- } catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) {
- throw new IllegalArgumentException(e);
- }
+ return mTasks;
}
@MainThread
@@ -282,37 +253,31 @@ public class TaskSchedulerService extends Service {
@MainThread
void runNextTask() {
Assert.isMainThread();
- // The current alarm is no longer valid, a new one will be set up if required.
- getSystemService(AlarmManager.class).cancel(getWakeupIntent());
if (getTasks().isEmpty()) {
prepareStop();
return;
}
- Long minimalWaitTime = null;
- for (Task task : getTasks()) {
- long waitTime = task.getReadyInMilliSeconds();
- if (waitTime < READY_TOLERANCE_MILLISECONDS) {
- task.onBeforeExecute();
- Message message = mWorkerThreadHandler.obtainMessage();
- message.obj = task;
- mWorkerThreadIsBusy = true;
- mMessageSender.send(message);
- return;
- } else {
- if (minimalWaitTime == null || waitTime < minimalWaitTime) {
- minimalWaitTime = waitTime;
- }
- }
+ NextTask nextTask = getTasks().getNextTask(READY_TOLERANCE_MILLISECONDS);
+
+ if (nextTask.task != null) {
+ nextTask.task.onBeforeExecute();
+ Message message = mWorkerThreadHandler.obtainMessage();
+ message.obj = nextTask.task;
+ mWorkerThreadIsBusy = true;
+ mMessageSender.send(message);
+ return;
}
- VvmLog.d(TAG, "minimal wait time:" + minimalWaitTime);
- if (!mTaskAutoRunDisabledForTesting && minimalWaitTime != null) {
+ VvmLog.i(TAG, "minimal wait time:" + nextTask.minimalWaitTimeMillis);
+ if (!mTaskAutoRunDisabledForTesting && nextTask.minimalWaitTimeMillis != null) {
// No tasks are currently ready. Sleep until the next one should be.
// If a new task is added during the sleep the service will wake immediately.
- sleep(minimalWaitTime);
+ sleep(nextTask.minimalWaitTimeMillis);
}
}
+ @MainThread
private void sleep(long timeMillis) {
+ VvmLog.i(TAG, "sleep for " + timeMillis + " millis");
if (timeMillis < SHORT_SLEEP_THRESHOLD_MILLISECONDS) {
mMainThreadHandler.postDelayed(
new Runnable() {
@@ -324,34 +289,24 @@ public class TaskSchedulerService extends Service {
timeMillis);
return;
}
-
- // Tasks does not have a strict timing requirement, use AlarmManager.set() so the OS could
- // optimize the battery usage. As this service currently run in the telephony process the
- // OS give it privileges to behave the same as setExact(), but set() is the targeted
- // behavior once this is unbundled.
- getSystemService(AlarmManager.class)
- .set(
- AlarmManager.ELAPSED_REALTIME_WAKEUP,
- SystemClock.elapsedRealtime() + timeMillis,
- getWakeupIntent());
- mWakeLock.release();
- VvmLog.d(TAG, "Long sleep for " + timeMillis + " millis");
+ finishJob();
+ mMainThreadHandler.post(() -> scheduleJob(timeMillis, false));
}
- private PendingIntent getWakeupIntent() {
- Intent intent = new Intent(ACTION_WAKEUP, null, this, getClass());
- return PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
+ private List<Bundle> serializePendingTasks() {
+ return getTasks().toBundles();
}
private void prepareStop() {
- VvmLog.d(
+ VvmLog.i(
TAG,
- "No more tasks, stopping service if no task are added in "
+ "no more tasks, stopping service if no task are added in "
+ STOP_DELAY_MILLISECONDS
+ " millis");
mMainThreadHandler.postDelayed(mStopServiceWithDelay, STOP_DELAY_MILLISECONDS);
}
+ @NeededForTesting
static class MessageSender {
public void send(Message message) {
@@ -360,11 +315,6 @@ public class TaskSchedulerService extends Service {
}
@NeededForTesting
- void setContextForTest(Context context) {
- mContext = context;
- }
-
- @NeededForTesting
void setTaskAutoRunDisabledForTest(boolean value) {
mTaskAutoRunDisabledForTesting = value;
}
@@ -374,15 +324,65 @@ public class TaskSchedulerService extends Service {
mMessageSender = sender;
}
- @NeededForTesting
- void clearTasksForTest() {
+ /**
+ * The {@link TaskSchedulerJobService} has started and all queued task should be executed in the
+ * worker thread.
+ */
+ @MainThread
+ public void onStartJob(Job job, List<Bundle> pendingTasks) {
+ VvmLog.i(TAG, "onStartJob");
+ mJob = job;
+ mTasks.fromBundles(this, pendingTasks);
+ maybeRunNextTask();
+ }
+
+ /**
+ * The {@link TaskSchedulerJobService} is being terminated by the system (timeout or network
+ * lost). A new job will be queued to resume all pending tasks. The current unfinished job may be
+ * ran again.
+ */
+ @MainThread
+ public void onStopJob() {
+ VvmLog.e(TAG, "onStopJob");
+ if (isJobRunning()) {
+ finishJob();
+ mMainThreadHandler.post(() -> scheduleJob(0, true));
+ }
+ }
+
+ /**
+ * Serializes all pending tasks and schedule a new {@link TaskSchedulerJobService}.
+ *
+ * @param delayMillis the delay before stating the job, see {@link
+ * android.app.job.JobInfo.Builder#setMinimumLatency(long)}. This must be 0 if {@code
+ * isNewJob} is true.
+ * @param isNewJob a new job will be requested to run immediately, bypassing all requirements.
+ */
+ @MainThread
+ private void scheduleJob(long delayMillis, boolean isNewJob) {
+ Assert.isMainThread();
+ TaskSchedulerJobService.scheduleJob(this, serializePendingTasks(), delayMillis, isNewJob);
mTasks.clear();
}
+ /**
+ * Signals {@link TaskSchedulerJobService} the current session of tasks has finished, and the wake
+ * lock can be released. Note: this only takes effect after the main thread has been returned. If
+ * a new job need to be scheduled, it should be posted on the main thread handler instead of
+ * calling directly.
+ */
+ @MainThread
+ private void finishJob() {
+ Assert.isMainThread();
+ VvmLog.i(TAG, "finishing Job");
+ mJob.finish();
+ mJob = null;
+ }
+
@Override
@Nullable
public IBinder onBind(Intent intent) {
- return new LocalBinder();
+ return mBinder;
}
@NeededForTesting
@@ -393,4 +393,8 @@ public class TaskSchedulerService extends Service {
return TaskSchedulerService.this;
}
}
+
+ private boolean isJobRunning() {
+ return mJob != null;
+ }
}
diff --git a/java/com/android/voicemail/impl/scheduling/Tasks.java b/java/com/android/voicemail/impl/scheduling/Tasks.java
new file mode 100644
index 000000000..34debaf29
--- /dev/null
+++ b/java/com/android/voicemail/impl/scheduling/Tasks.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.voicemail.impl.scheduling;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import com.android.voicemail.impl.VvmLog;
+
+/** Common operations on {@link Task} */
+final class Tasks {
+
+ private Tasks() {}
+
+ static final String EXTRA_CLASS_NAME = "extra_class_name";
+
+ /**
+ * Create a task from a bundle. The bundle is created either with {@link #toBundle(Task)} or
+ * {@link #createIntent(Context, Class)} from the target {@link Task}
+ */
+ public static Task createTask(Context context, Bundle extras) {
+ // The extra contains custom parcelables which cannot be unmarshalled by the framework class
+ // loader.
+ extras.setClassLoader(context.getClassLoader());
+ String className = extras.getString(EXTRA_CLASS_NAME);
+ VvmLog.i("Task.createTask", "create task:" + className);
+ if (className == null) {
+ throw new IllegalArgumentException("EXTRA_CLASS_NAME expected");
+ }
+ try {
+ Task task = (Task) Class.forName(className).getDeclaredConstructor().newInstance();
+ task.onCreate(context, extras);
+ return task;
+ } catch (ReflectiveOperationException e) {
+ throw new IllegalArgumentException(e);
+ }
+ }
+
+ /**
+ * Serializes necessary states to a bundle that can be used to restore the task with {@link
+ * #createTask(Context, Bundle)}
+ */
+ public static Bundle toBundle(Task task) {
+ Bundle result = task.toBundle();
+ result.putString(EXTRA_CLASS_NAME, task.getClass().getName());
+ return result;
+ }
+
+ /**
+ * Create an intent that when called with {@link Context#startService(Intent)}, will queue the
+ * <code>task</code>. Implementations of {@link Task} should use the result of this and fill in
+ * necessary information.
+ */
+ public static Intent createIntent(Context context, Class<? extends Task> task) {
+ Intent intent = new Intent(context, TaskSchedulerService.class);
+ intent.putExtra(EXTRA_CLASS_NAME, task.getName());
+ return intent;
+ }
+}
diff --git a/java/com/android/voicemail/impl/settings/VisualVoicemailSettingsUtil.java b/java/com/android/voicemail/impl/settings/VisualVoicemailSettingsUtil.java
index 4c95e7783..9ce32a97c 100644
--- a/java/com/android/voicemail/impl/settings/VisualVoicemailSettingsUtil.java
+++ b/java/com/android/voicemail/impl/settings/VisualVoicemailSettingsUtil.java
@@ -22,6 +22,7 @@ import com.android.voicemail.VoicemailComponent;
import com.android.voicemail.impl.OmtpVvmCarrierConfigHelper;
import com.android.voicemail.impl.R;
import com.android.voicemail.impl.VisualVoicemailPreferences;
+import com.android.voicemail.impl.VvmLog;
import com.android.voicemail.impl.sync.VvmAccountManager;
/** Save whether or not a particular account is enabled in shared to be retrieved later. */
@@ -31,6 +32,7 @@ public class VisualVoicemailSettingsUtil {
public static void setEnabled(
Context context, PhoneAccountHandle phoneAccount, boolean isEnabled) {
+ VvmLog.i("VisualVoicemailSettingsUtil.setEnable", phoneAccount + " enabled:" + isEnabled);
new VisualVoicemailPreferences(context, phoneAccount)
.edit()
.putBoolean(IS_ENABLED_KEY, isEnabled)
diff --git a/java/com/android/voicemail/impl/settings/VoicemailChangePinActivity.java b/java/com/android/voicemail/impl/settings/VoicemailChangePinActivity.java
index 330dc3621..b22a765cf 100644
--- a/java/com/android/voicemail/impl/settings/VoicemailChangePinActivity.java
+++ b/java/com/android/voicemail/impl/settings/VoicemailChangePinActivity.java
@@ -45,8 +45,7 @@ import android.widget.EditText;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
import android.widget.Toast;
-import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
+import com.android.dialer.logging.DialerImpression;
import com.android.voicemail.impl.OmtpConstants;
import com.android.voicemail.impl.OmtpConstants.ChangePinResult;
import com.android.voicemail.impl.OmtpEvents;
@@ -59,6 +58,7 @@ import com.android.voicemail.impl.imap.ImapHelper;
import com.android.voicemail.impl.imap.ImapHelper.InitializingException;
import com.android.voicemail.impl.mail.MessagingException;
import com.android.voicemail.impl.sync.VvmNetworkRequestCallback;
+import com.android.voicemail.impl.utils.LoggerUtils;
/**
* Dialog to change the voicemail PIN. The TUI (Telephony User Interface) PIN is used when accessing
@@ -278,7 +278,8 @@ public class VoicemailChangePinActivity extends Activity
activity.handleOmtpEvent(OmtpEvents.CONFIG_PIN_SET);
activity.finish();
- Logger.get(activity).logImpression(DialerImpression.Type.VVM_CHANGE_PIN_COMPLETED);
+ LoggerUtils.logImpressionOnMainThread(
+ activity, DialerImpression.Type.VVM_CHANGE_PIN_COMPLETED);
Toast.makeText(
activity, activity.getString(R.string.change_pin_succeeded), Toast.LENGTH_SHORT)
.show();
diff --git a/java/com/android/voicemail/impl/settings/VoicemailSettingsFragment.java b/java/com/android/voicemail/impl/settings/VoicemailSettingsFragment.java
index 716f503ff..423fd11b4 100644
--- a/java/com/android/voicemail/impl/settings/VoicemailSettingsFragment.java
+++ b/java/com/android/voicemail/impl/settings/VoicemailSettingsFragment.java
@@ -27,8 +27,8 @@ import android.support.annotation.Nullable;
import android.telecom.PhoneAccountHandle;
import android.telephony.TelephonyManager;
import com.android.dialer.common.Assert;
+import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
import com.android.voicemail.VoicemailClient;
import com.android.voicemail.VoicemailComponent;
import com.android.voicemail.impl.OmtpVvmCarrierConfigHelper;
@@ -164,8 +164,6 @@ public class VoicemailSettingsFragment extends PreferenceFragment
VisualVoicemailSettingsUtil.isEnabled(getContext(), phoneAccountHandle));
autoArchiveSwitchPreference.setOnPreferenceChangeListener(this);
- autoArchiveSwitchPreference.setSummary(
- getText(R.string.voicemail_visual_voicemail_auto_archive_temporary_disclaimer));
autoArchiveSwitchPreference.setChecked(
VisualVoicemailSettingsUtil.isArchiveEnabled(getContext(), phoneAccountHandle));
} else {
diff --git a/java/com/android/voicemail/impl/sms/LegacyModeSmsHandler.java b/java/com/android/voicemail/impl/sms/LegacyModeSmsHandler.java
index 1d1a639c5..5decf6376 100644
--- a/java/com/android/voicemail/impl/sms/LegacyModeSmsHandler.java
+++ b/java/com/android/voicemail/impl/sms/LegacyModeSmsHandler.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2016 Google Inc. All Rights Reserved.
+ * Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,13 +16,21 @@
package com.android.voicemail.impl.sms;
+import android.annotation.TargetApi;
+import android.app.PendingIntent;
import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Build.VERSION_CODES;
import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.telecom.PhoneAccount;
import android.telecom.PhoneAccountHandle;
+import android.telephony.TelephonyManager;
import android.telephony.VisualVoicemailSms;
+import com.android.voicemail.VoicemailClient;
import com.android.voicemail.impl.OmtpConstants;
import com.android.voicemail.impl.OmtpVvmCarrierConfigHelper;
-import com.android.voicemail.impl.TelephonyManagerStub;
import com.android.voicemail.impl.VvmLog;
/**
@@ -30,37 +38,95 @@ import com.android.voicemail.impl.VvmLog;
*
* @see OmtpVvmCarrierConfigHelper#isLegacyModeEnabled()
*/
+@TargetApi(VERSION_CODES.O)
public class LegacyModeSmsHandler {
private static final String TAG = "LegacyModeSmsHandler";
+ private static final int CALL_VOICEMAIL_REQUEST_CODE = 1;
+ private static final int LAUNCH_VOICEMAIL_SETTINGS_REQUEST_CODE = 2;
+
public static void handle(Context context, VisualVoicemailSms sms) {
- VvmLog.v(TAG, "processing VVM SMS on legacy mode");
+ VvmLog.i(TAG, "processing VVM SMS on legacy mode");
String eventType = sms.getPrefix();
Bundle data = sms.getFields();
PhoneAccountHandle handle = sms.getPhoneAccountHandle();
if (eventType.equals(OmtpConstants.SYNC_SMS_PREFIX)) {
SyncMessage message = new SyncMessage(data);
- VvmLog.v(
+ VvmLog.i(
TAG, "Received SYNC sms for " + handle + " with event " + message.getSyncTriggerEvent());
switch (message.getSyncTriggerEvent()) {
case OmtpConstants.NEW_MESSAGE:
case OmtpConstants.MAILBOX_UPDATE:
- // The user has called into the voicemail and the new message count could
- // change.
- // For some carriers new message count could be set to 0 even if there are still
- // unread messages, to clear the message waiting indicator.
- VvmLog.v(TAG, "updating MWI");
-
- // Setting voicemail message count to non-zero will show the telephony voicemail
- // notification, and zero will clear it.
- TelephonyManagerStub.showVoicemailNotification(message.getNewMessageCount());
+ sendLegacyVoicemailNotification(context, handle, message.getNewMessageCount());
+
break;
default:
break;
}
}
}
+
+ private static void sendLegacyVoicemailNotification(
+ Context context, PhoneAccountHandle phoneAccountHandle, int messageCount) {
+ // The user has called into the voicemail and the new message count could
+ // change.
+ // For some carriers new message count could be set to 0 even if there are still
+ // unread messages, to clear the message waiting indicator.
+
+ VvmLog.i(TAG, "sending voicemail notification");
+ Intent intent = new Intent(VoicemailClient.ACTION_SHOW_LEGACY_VOICEMAIL);
+ intent.setPackage(context.getPackageName());
+ intent.putExtra(TelephonyManager.EXTRA_PHONE_ACCOUNT_HANDLE, phoneAccountHandle);
+ // Setting voicemail message count to non-zero will show the telephony voicemail
+ // notification, and zero will clear it.
+ intent.putExtra(TelephonyManager.EXTRA_NOTIFICATION_COUNT, messageCount);
+
+ String voicemailNumber = getVoicemailNumber(context, phoneAccountHandle);
+ PendingIntent callVoicemailPendingIntent = null;
+ PendingIntent launchVoicemailSettingsPendingIntent = null;
+
+ if (voicemailNumber != null) {
+ callVoicemailPendingIntent =
+ PendingIntent.getActivity(
+ context,
+ CALL_VOICEMAIL_REQUEST_CODE,
+ new Intent(
+ Intent.ACTION_CALL, Uri.fromParts(PhoneAccount.SCHEME_VOICEMAIL, "", null)),
+ PendingIntent.FLAG_UPDATE_CURRENT);
+ } else {
+ Intent launchVoicemailSettingsIntent =
+ new Intent(TelephonyManager.ACTION_CONFIGURE_VOICEMAIL);
+ launchVoicemailSettingsIntent.putExtra(TelephonyManager.EXTRA_HIDE_PUBLIC_SETTINGS, true);
+
+ launchVoicemailSettingsPendingIntent =
+ PendingIntent.getActivity(
+ context,
+ LAUNCH_VOICEMAIL_SETTINGS_REQUEST_CODE,
+ launchVoicemailSettingsIntent,
+ PendingIntent.FLAG_UPDATE_CURRENT);
+ }
+
+ intent.putExtra(TelephonyManager.EXTRA_VOICEMAIL_NUMBER, voicemailNumber);
+ intent.putExtra(TelephonyManager.EXTRA_CALL_VOICEMAIL_INTENT, callVoicemailPendingIntent);
+ intent.putExtra(
+ TelephonyManager.EXTRA_LAUNCH_VOICEMAIL_SETTINGS_INTENT,
+ launchVoicemailSettingsPendingIntent);
+
+ context.sendBroadcast(intent);
+ }
+
+ @Nullable
+ private static String getVoicemailNumber(Context context, PhoneAccountHandle phoneAccountHandle) {
+ TelephonyManager telephonyManager =
+ context
+ .getSystemService(TelephonyManager.class)
+ .createForPhoneAccountHandle(phoneAccountHandle);
+ if (telephonyManager == null) {
+ return null;
+ }
+ return telephonyManager.getVoiceMailNumber();
+ }
}
diff --git a/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java b/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java
index 83a3960dd..af934dd3c 100644
--- a/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java
+++ b/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java
@@ -24,8 +24,7 @@ import android.support.v4.os.BuildCompat;
import android.telecom.PhoneAccountHandle;
import android.text.TextUtils;
import android.util.ArrayMap;
-import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
+import com.android.dialer.logging.DialerImpression;
import com.android.voicemail.VoicemailComponent;
import com.android.voicemail.impl.ActivationTask;
import com.android.voicemail.impl.Assert;
@@ -41,6 +40,7 @@ import com.android.voicemail.impl.scheduling.BaseTask;
import com.android.voicemail.impl.settings.VisualVoicemailSettingsUtil;
import com.android.voicemail.impl.sync.VvmNetworkRequest.NetworkWrapper;
import com.android.voicemail.impl.sync.VvmNetworkRequest.RequestFailedException;
+import com.android.voicemail.impl.utils.LoggerUtils;
import com.android.voicemail.impl.utils.VoicemailDatabaseUtil;
import java.util.List;
import java.util.Map;
@@ -98,7 +98,7 @@ public class OmtpVvmSyncService {
}
OmtpVvmCarrierConfigHelper config = new OmtpVvmCarrierConfigHelper(mContext, phoneAccount);
- Logger.get(mContext).logImpression(DialerImpression.Type.VVM_SYNC_STARTED);
+ LoggerUtils.logImpressionOnMainThread(mContext, DialerImpression.Type.VVM_SYNC_STARTED);
// DATA_IMAP_OPERATION_STARTED posting should not be deferred. This event clears all data
// channel errors, which should happen when the task starts, not when it ends. It is the
// "Sync in progress..." status.
@@ -136,7 +136,7 @@ public class OmtpVvmSyncService {
imapHelper.updateQuota();
autoDeleteAndArchiveVM(imapHelper, phoneAccount);
imapHelper.handleEvent(OmtpEvents.DATA_IMAP_OPERATION_COMPLETED);
- Logger.get(mContext).logImpression(DialerImpression.Type.VVM_SYNC_COMPLETED);
+ LoggerUtils.logImpressionOnMainThread(mContext, DialerImpression.Type.VVM_SYNC_COMPLETED);
} else {
task.fail();
}
@@ -158,14 +158,15 @@ public class OmtpVvmSyncService {
> AUTO_DELETE_ARCHIVE_VM_THRESHOLD) {
deleteAndArchiveVM(imapHelper);
imapHelper.updateQuota();
- Logger.get(mContext)
- .logImpression(DialerImpression.Type.VVM_ARCHIVE_AUTO_DELETED_VM_FROM_SERVER);
+ LoggerUtils.logImpressionOnMainThread(
+ mContext, DialerImpression.Type.VVM_ARCHIVE_AUTO_DELETED_VM_FROM_SERVER);
} else {
VvmLog.i(TAG, "no need to archive and auto delete VM, quota below threshold");
}
} else {
- VvmLog.i(TAG, "isArchiveAllowedAndEnabled is false");
- Logger.get(mContext).logImpression(DialerImpression.Type.VVM_ARCHIVE_AUTO_DELETE_TURNED_OFF);
+ VvmLog.i(TAG, "autoDeleteAndArchiveVM is turned off");
+ LoggerUtils.logImpressionOnMainThread(
+ mContext, DialerImpression.Type.VVM_ARCHIVE_AUTO_DELETE_TURNED_OFF);
}
}
@@ -214,7 +215,7 @@ public class OmtpVvmSyncService {
boolean downloadSuccess = true;
if (SYNC_FULL_SYNC.equals(action) || SYNC_UPLOAD_ONLY.equals(action)) {
- uploadSuccess = upload(imapHelper);
+ uploadSuccess = upload(account, imapHelper);
}
if (SYNC_FULL_SYNC.equals(action) || SYNC_DOWNLOAD_ONLY.equals(action)) {
downloadSuccess = download(imapHelper, account);
@@ -242,9 +243,9 @@ public class OmtpVvmSyncService {
new TranscriptionFetchedCallback(mContext, voicemail), voicemail.getSourceData());
}
- private boolean upload(ImapHelper imapHelper) {
- List<Voicemail> readVoicemails = mQueryHelper.getReadVoicemails();
- List<Voicemail> deletedVoicemails = mQueryHelper.getDeletedVoicemails();
+ private boolean upload(PhoneAccountHandle phoneAccountHandle, ImapHelper imapHelper) {
+ List<Voicemail> readVoicemails = mQueryHelper.getReadVoicemails(phoneAccountHandle);
+ List<Voicemail> deletedVoicemails = mQueryHelper.getDeletedVoicemails(phoneAccountHandle);
boolean success = true;
@@ -271,7 +272,7 @@ public class OmtpVvmSyncService {
private boolean download(ImapHelper imapHelper, PhoneAccountHandle account) {
List<Voicemail> serverVoicemails = imapHelper.fetchAllVoicemails();
- List<Voicemail> localVoicemails = mQueryHelper.getAllVoicemails();
+ List<Voicemail> localVoicemails = mQueryHelper.getAllVoicemails(account);
if (localVoicemails == null || serverVoicemails == null) {
// Null value means the query failed.
@@ -302,7 +303,8 @@ public class OmtpVvmSyncService {
if (!TextUtils.isEmpty(remoteVoicemail.getTranscription())
&& TextUtils.isEmpty(localVoicemail.getTranscription())) {
- Logger.get(mContext).logImpression(DialerImpression.Type.VVM_TRANSCRIPTION_DOWNLOADED);
+ LoggerUtils.logImpressionOnMainThread(
+ mContext, DialerImpression.Type.VVM_TRANSCRIPTION_DOWNLOADED);
mQueryHelper.updateWithTranscription(localVoicemail, remoteVoicemail.getTranscription());
}
}
@@ -312,7 +314,8 @@ public class OmtpVvmSyncService {
boolean prefetchEnabled = shouldPerformPrefetch(account, imapHelper);
for (Voicemail remoteVoicemail : remoteMap.values()) {
if (!TextUtils.isEmpty(remoteVoicemail.getTranscription())) {
- Logger.get(mContext).logImpression(DialerImpression.Type.VVM_TRANSCRIPTION_DOWNLOADED);
+ LoggerUtils.logImpressionOnMainThread(
+ mContext, DialerImpression.Type.VVM_TRANSCRIPTION_DOWNLOADED);
}
Uri uri = VoicemailDatabaseUtil.insert(mContext, remoteVoicemail);
if (prefetchEnabled) {
diff --git a/java/com/android/voicemail/impl/sync/SyncOneTask.java b/java/com/android/voicemail/impl/sync/SyncOneTask.java
index e57235e4b..19419ec8a 100644
--- a/java/com/android/voicemail/impl/sync/SyncOneTask.java
+++ b/java/com/android/voicemail/impl/sync/SyncOneTask.java
@@ -18,18 +18,21 @@ package com.android.voicemail.impl.sync;
import android.content.Context;
import android.content.Intent;
+import android.os.Bundle;
import android.telecom.PhoneAccountHandle;
-import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
+import com.android.dialer.logging.DialerImpression;
+import com.android.dialer.proguard.UsedByReflection;
import com.android.voicemail.impl.Voicemail;
import com.android.voicemail.impl.VoicemailStatus;
import com.android.voicemail.impl.scheduling.BaseTask;
import com.android.voicemail.impl.scheduling.RetryPolicy;
+import com.android.voicemail.impl.utils.LoggerUtils;
/**
* Task to download a single voicemail from the server. This task is initiated by a SMS notifying
* the new voicemail arrival, and ignores the duplicated tasks constraint.
*/
+@UsedByReflection(value = "Tasks.java")
public class SyncOneTask extends BaseTask {
private static final int RETRY_TIMES = 2;
@@ -56,11 +59,12 @@ public class SyncOneTask extends BaseTask {
addPolicy(new RetryPolicy(RETRY_TIMES, RETRY_INTERVAL_MILLIS));
}
- public void onCreate(Context context, Intent intent, int flags, int startId) {
- super.onCreate(context, intent, flags, startId);
- mPhone = intent.getParcelableExtra(EXTRA_PHONE_ACCOUNT_HANDLE);
- mSyncType = intent.getStringExtra(EXTRA_SYNC_TYPE);
- mVoicemail = intent.getParcelableExtra(EXTRA_VOICEMAIL);
+ @Override
+ public void onCreate(Context context, Bundle extras) {
+ super.onCreate(context, extras);
+ mPhone = extras.getParcelable(EXTRA_PHONE_ACCOUNT_HANDLE);
+ mSyncType = extras.getString(EXTRA_SYNC_TYPE);
+ mVoicemail = extras.getParcelable(EXTRA_VOICEMAIL);
}
@Override
@@ -71,7 +75,7 @@ public class SyncOneTask extends BaseTask {
@Override
public Intent createRestartIntent() {
- Logger.get(getContext()).logImpression(DialerImpression.Type.VVM_AUTO_RETRY_SYNC);
+ LoggerUtils.logImpressionOnMainThread(getContext(), DialerImpression.Type.VVM_AUTO_RETRY_SYNC);
Intent intent = super.createRestartIntent();
intent.putExtra(EXTRA_PHONE_ACCOUNT_HANDLE, mPhone);
intent.putExtra(EXTRA_SYNC_TYPE, mSyncType);
diff --git a/java/com/android/voicemail/impl/sync/SyncTask.java b/java/com/android/voicemail/impl/sync/SyncTask.java
index a9e592068..27f803401 100644
--- a/java/com/android/voicemail/impl/sync/SyncTask.java
+++ b/java/com/android/voicemail/impl/sync/SyncTask.java
@@ -18,14 +18,17 @@ package com.android.voicemail.impl.sync;
import android.content.Context;
import android.content.Intent;
+import android.os.Bundle;
import android.telecom.PhoneAccountHandle;
-import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.nano.DialerImpression;
+import com.android.dialer.logging.DialerImpression;
+import com.android.dialer.proguard.UsedByReflection;
import com.android.voicemail.impl.scheduling.BaseTask;
import com.android.voicemail.impl.scheduling.MinimalIntervalPolicy;
import com.android.voicemail.impl.scheduling.RetryPolicy;
+import com.android.voicemail.impl.utils.LoggerUtils;
/** System initiated sync request. */
+@UsedByReflection(value = "Tasks.java")
public class SyncTask extends BaseTask {
// Try sync for a total of 5 times, should take around 5 minutes before finally giving up.
@@ -55,10 +58,11 @@ public class SyncTask extends BaseTask {
addPolicy(new MinimalIntervalPolicy(MINIMAL_INTERVAL_MILLIS));
}
- public void onCreate(Context context, Intent intent, int flags, int startId) {
- super.onCreate(context, intent, flags, startId);
- mPhone = intent.getParcelableExtra(EXTRA_PHONE_ACCOUNT_HANDLE);
- mSyncType = intent.getStringExtra(EXTRA_SYNC_TYPE);
+ @Override
+ public void onCreate(Context context, Bundle extras) {
+ super.onCreate(context, extras);
+ mPhone = extras.getParcelable(EXTRA_PHONE_ACCOUNT_HANDLE);
+ mSyncType = extras.getString(EXTRA_SYNC_TYPE);
}
@Override
@@ -69,7 +73,7 @@ public class SyncTask extends BaseTask {
@Override
public Intent createRestartIntent() {
- Logger.get(getContext()).logImpression(DialerImpression.Type.VVM_AUTO_RETRY_SYNC);
+ LoggerUtils.logImpressionOnMainThread(getContext(), DialerImpression.Type.VVM_AUTO_RETRY_SYNC);
Intent intent = super.createRestartIntent();
intent.putExtra(EXTRA_PHONE_ACCOUNT_HANDLE, mPhone);
intent.putExtra(EXTRA_SYNC_TYPE, mSyncType);
diff --git a/java/com/android/voicemail/impl/sync/UploadTask.java b/java/com/android/voicemail/impl/sync/UploadTask.java
index 7d1a79756..403074572 100644
--- a/java/com/android/voicemail/impl/sync/UploadTask.java
+++ b/java/com/android/voicemail/impl/sync/UploadTask.java
@@ -18,7 +18,9 @@ package com.android.voicemail.impl.sync;
import android.content.Context;
import android.content.Intent;
+import android.os.Bundle;
import android.telecom.PhoneAccountHandle;
+import com.android.dialer.proguard.UsedByReflection;
import com.android.voicemail.impl.VoicemailStatus;
import com.android.voicemail.impl.VvmLog;
import com.android.voicemail.impl.scheduling.BaseTask;
@@ -28,6 +30,7 @@ import com.android.voicemail.impl.scheduling.PostponePolicy;
* Upload task triggered by database changes. Will wait until the database has been stable for
* {@link #POSTPONE_MILLIS} to execute.
*/
+@UsedByReflection(value = "Tasks.java")
public class UploadTask extends BaseTask {
private static final String TAG = "VvmUploadTask";
@@ -45,8 +48,8 @@ public class UploadTask extends BaseTask {
}
@Override
- public void onCreate(Context context, Intent intent, int flags, int startId) {
- super.onCreate(context, intent, flags, startId);
+ public void onCreate(Context context, Bundle extras) {
+ super.onCreate(context, extras);
}
@Override
diff --git a/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java b/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java
index fc8119a80..bfc2e5f20 100644
--- a/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java
+++ b/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java
@@ -25,7 +25,9 @@ import android.net.Uri;
import android.os.Build.VERSION_CODES;
import android.provider.VoicemailContract;
import android.provider.VoicemailContract.Voicemails;
+import android.support.annotation.NonNull;
import android.telecom.PhoneAccountHandle;
+import android.text.TextUtils;
import com.android.dialer.common.Assert;
import com.android.voicemail.impl.Voicemail;
import java.util.ArrayList;
@@ -52,6 +54,12 @@ public class VoicemailsQueryHelper {
Voicemails.DIRTY + "=1 AND " + Voicemails.DELETED + "!=1 AND " + Voicemails.IS_READ + "=1";
static final String DELETED_SELECTION = Voicemails.DELETED + "=1";
static final String ARCHIVED_SELECTION = Voicemails.ARCHIVED + "=0";
+ private static final String PHONE_ACCOUNT_HANDLE_SELECTION =
+ "("
+ + Voicemails.PHONE_ACCOUNT_COMPONENT_NAME
+ + "=? AND "
+ + Voicemails.PHONE_ACCOUNT_ID
+ + "=?)";
private Context mContext;
private ContentResolver mContentResolver;
@@ -68,8 +76,8 @@ public class VoicemailsQueryHelper {
*
* @return A list of read voicemails.
*/
- public List<Voicemail> getReadVoicemails() {
- return getLocalVoicemails(READ_SELECTION);
+ public List<Voicemail> getReadVoicemails(@NonNull PhoneAccountHandle phoneAccountHandle) {
+ return getLocalVoicemails(phoneAccountHandle, READ_SELECTION);
}
/**
@@ -77,8 +85,8 @@ public class VoicemailsQueryHelper {
*
* @return A list of deleted voicemails.
*/
- public List<Voicemail> getDeletedVoicemails() {
- return getLocalVoicemails(DELETED_SELECTION);
+ public List<Voicemail> getDeletedVoicemails(@NonNull PhoneAccountHandle phoneAccountHandle) {
+ return getLocalVoicemails(phoneAccountHandle, DELETED_SELECTION);
}
/**
@@ -86,8 +94,8 @@ public class VoicemailsQueryHelper {
*
* @return A list of all locally stored voicemails.
*/
- public List<Voicemail> getAllVoicemails() {
- return getLocalVoicemails(null);
+ public List<Voicemail> getAllVoicemails(@NonNull PhoneAccountHandle phoneAccountHandle) {
+ return getLocalVoicemails(phoneAccountHandle, null);
}
/**
@@ -96,8 +104,20 @@ public class VoicemailsQueryHelper {
* @param selection A filter declaring which rows to return. {@code null} returns all rows.
* @return A list of voicemails according to the selection statement.
*/
- private List<Voicemail> getLocalVoicemails(String selection) {
- Cursor cursor = mContentResolver.query(mSourceUri, PROJECTION, selection, null, null);
+ private List<Voicemail> getLocalVoicemails(
+ @NonNull PhoneAccountHandle phoneAccountHandle, String selection) {
+
+ String[] selectionArgs =
+ new String[] {
+ phoneAccountHandle.getComponentName().flattenToString(), phoneAccountHandle.getId()
+ };
+ if (TextUtils.isEmpty(selection)) {
+ selection = PHONE_ACCOUNT_HANDLE_SELECTION;
+ } else {
+ selection = PHONE_ACCOUNT_HANDLE_SELECTION + " AND (" + selection + ")";
+ }
+
+ Cursor cursor = mContentResolver.query(mSourceUri, PROJECTION, selection, selectionArgs, null);
if (cursor == null) {
return null;
}
diff --git a/java/com/android/voicemail/impl/utils/LoggerUtils.java b/java/com/android/voicemail/impl/utils/LoggerUtils.java
new file mode 100644
index 000000000..070772f2f
--- /dev/null
+++ b/java/com/android/voicemail/impl/utils/LoggerUtils.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.voicemail.impl.utils;
+
+import android.content.Context;
+import android.support.annotation.AnyThread;
+import com.android.dialer.common.concurrent.ThreadUtil;
+import com.android.dialer.logging.DialerImpression;
+import com.android.dialer.logging.Logger;
+
+/** Common utility method when using {@link Logger} */
+public class LoggerUtils {
+
+ /** Posts the impression logging to the main thread so it will be thread safe. */
+ @AnyThread
+ public static void logImpressionOnMainThread(Context context, DialerImpression.Type impression) {
+ ThreadUtil.postOnUiThread(() -> Logger.get(context).logImpression(impression));
+ }
+}
diff --git a/java/com/android/voicemail/stub/StubVoicemailClient.java b/java/com/android/voicemail/stub/StubVoicemailClient.java
index 172b3ffcc..e2b470799 100644
--- a/java/com/android/voicemail/stub/StubVoicemailClient.java
+++ b/java/com/android/voicemail/stub/StubVoicemailClient.java
@@ -37,6 +37,15 @@ public final class StubVoicemailClient implements VoicemailClient {
}
@Override
+ public boolean isVoicemailEnabled(Context context, PhoneAccountHandle phoneAccountHandle) {
+ return false;
+ }
+
+ @Override
+ public void setVoicemailEnabled(
+ Context context, PhoneAccountHandle phoneAccountHandle, boolean enabled) {}
+
+ @Override
public void appendOmtpVoicemailSelectionClause(
Context context, StringBuilder where, List<String> selectionArgs) {}
@@ -67,4 +76,9 @@ public final class StubVoicemailClient implements VoicemailClient {
public Intent getSetPinIntent(Context context, PhoneAccountHandle phoneAccountHandle) {
return new Intent(TelephonyManager.ACTION_CONFIGURE_VOICEMAIL);
}
+
+ @Override
+ public boolean isActivated(Context context, PhoneAccountHandle phoneAccountHandle) {
+ return false;
+ }
}