From 2f1c7586bcce334ca69022eb8dc6d8965ceb6a05 Mon Sep 17 00:00:00 2001 From: Eric Erfanian Date: Mon, 19 Jun 2017 11:26:01 -0700 Subject: Update AOSP Dialer source from internal google3 repository at cl/159428781. Test: make, treehugger This CL updates the AOSP Dialer source with all the changes that have gone into the private google3 repository. This includes all the changes from cl/152373142 (4/06/2017) to cl/159428781 (6/19/2017). This goal of these drops is to keep the AOSP source in sync with the internal google3 repository. Currently these sync are done by hand with very minor modifications to the internal source code. See the Android.mk file for list of modifications. Our current goal is to do frequent drops (daily if possible) and eventually switched to an automated process. Change-Id: Ie60a84b3936efd0ea3d95d7c86bf96d2b1663030 --- .../android/contacts/common/ClipboardUtils.java | 2 - .../contacts/common/ContactPhotoManager.java | 34 +- .../contacts/common/ContactPhotoManagerImpl.java | 5 +- .../contacts/common/ContactPresenceIconUtil.java | 3 +- .../android/contacts/common/ContactStatusUtil.java | 2 - .../com/android/contacts/common/ContactsUtils.java | 185 +---- java/com/android/contacts/common/GeoUtil.java | 55 -- .../android/contacts/common/MoreContactUtils.java | 36 - .../contacts/common/compat/ContactsCompat.java | 16 - .../contacts/common/compat/PhoneAccountCompat.java | 55 +- .../common/compat/PhoneNumberUtilsCompat.java | 132 +--- .../common/compat/TelephonyManagerCompat.java | 80 +-- .../compat/telecom/TelecomManagerCompat.java | 282 +------- .../contacts/common/dialog/CallSubjectDialog.java | 12 +- .../common/extensions/PhoneDirectoryExtender.java | 10 + .../extensions/PhoneDirectoryExtenderAccessor.java | 6 + .../extensions/PhoneDirectoryExtenderStub.java | 13 + .../contacts/common/format/FormatUtils.java | 181 ----- .../contacts/common/format/TextHighlighter.java | 55 +- .../common/format/testing/SpannedTestUtils.java | 85 --- .../common/lettertiles/LetterTileDrawable.java | 42 +- .../common/list/ContactEntryListAdapter.java | 58 +- .../common/list/ContactEntryListFragment.java | 20 +- .../contacts/common/list/ContactListItemView.java | 216 +++--- .../contacts/common/list/ContactTileView.java | 19 +- .../common/list/PhoneNumberListAdapter.java | 70 +- .../common/list/PhoneNumberPickerFragment.java | 70 +- .../contacts/common/list/ViewPagerTabs.java | 29 +- .../contacts/common/location/CountryDetector.java | 221 ------ .../common/location/UpdateCountryService.java | 104 --- .../contacts/common/model/ContactLoader.java | 1 + .../contacts/common/model/account/AccountType.java | 3 +- .../common/model/account/BaseAccountType.java | 4 +- .../common/res/drawable-hdpi/ic_ab_search.png | Bin 1115 -> 0 bytes .../res/drawable-hdpi/ic_arrow_back_24dp.png | Bin 612 -> 0 bytes .../res/drawable-hdpi/ic_business_white_120dp.png | Bin 2477 -> 0 bytes .../common/res/drawable-hdpi/ic_call_24dp.png | Bin 340 -> 0 bytes .../common/res/drawable-hdpi/ic_close_dk.png | Bin 609 -> 0 bytes .../common/res/drawable-hdpi/ic_create_24dp.png | Bin 370 -> 0 bytes .../res/drawable-hdpi/ic_group_white_24dp.png | Bin 389 -> 0 bytes .../ic_history_white_drawable_24dp.png | Bin 525 -> 0 bytes .../res/drawable-hdpi/ic_info_outline_24dp.png | Bin 485 -> 0 bytes .../common/res/drawable-hdpi/ic_menu_back.png | Bin 799 -> 0 bytes .../common/res/drawable-hdpi/ic_menu_group_dk.png | Bin 1954 -> 0 bytes .../common/res/drawable-hdpi/ic_menu_group_lt.png | Bin 1922 -> 0 bytes .../res/drawable-hdpi/ic_menu_overflow_lt.png | Bin 220 -> 0 bytes .../common/res/drawable-hdpi/ic_menu_person_dk.png | Bin 1439 -> 0 bytes .../common/res/drawable-hdpi/ic_menu_person_lt.png | Bin 1416 -> 0 bytes .../ic_menu_remove_field_holo_light.png | Bin 515 -> 0 bytes .../common/res/drawable-hdpi/ic_menu_star_dk.png | Bin 1438 -> 0 bytes .../res/drawable-hdpi/ic_menu_star_holo_light.png | Bin 1211 -> 0 bytes .../common/res/drawable-hdpi/ic_menu_star_lt.png | Bin 1414 -> 0 bytes .../common/res/drawable-hdpi/ic_person_24dp.png | Bin 273 -> 0 bytes .../common/res/drawable-hdpi/ic_rx_videocam.png | Bin 413 -> 0 bytes .../common/res/drawable-hdpi/ic_tx_videocam.png | Bin 370 -> 0 bytes .../common/res/drawable-hdpi/ic_videocam.png | Bin 269 -> 0 bytes .../res/drawable-hdpi/ic_voicemail_avatar.png | Bin 2856 -> 0 bytes .../res/drawable-hdpi/list_activated_holo.9.png | Bin 154 -> 0 bytes .../res/drawable-hdpi/list_background_holo.9.png | Bin 224 -> 0 bytes .../res/drawable-hdpi/list_focused_holo.9.png | Bin 235 -> 0 bytes .../list_longpressed_holo_light.9.png | Bin 158 -> 0 bytes .../drawable-hdpi/list_pressed_holo_light.9.png | Bin 159 -> 0 bytes .../list_section_divider_holo_custom.9.png | Bin 205 -> 0 bytes .../common/res/drawable-hdpi/list_title_holo.9.png | Bin 267 -> 0 bytes .../drawable-ldrtl-hdpi/list_focused_holo.9.png | Bin 234 -> 0 bytes .../list_section_divider_holo_custom.9.png | Bin 191 -> 0 bytes .../res/drawable-ldrtl-hdpi/list_title_holo.9.png | Bin 258 -> 0 bytes .../drawable-ldrtl-mdpi/list_focused_holo.9.png | Bin 234 -> 0 bytes .../list_section_divider_holo_custom.9.png | Bin 180 -> 0 bytes .../res/drawable-ldrtl-mdpi/list_title_holo.9.png | Bin 186 -> 0 bytes .../list_activated_holo.9.png | Bin 1666 -> 0 bytes .../list_activated_holo.9.png | Bin 1034 -> 0 bytes .../list_activated_holo.9.png | Bin 2486 -> 0 bytes .../drawable-ldrtl-xhdpi/list_focused_holo.9.png | Bin 234 -> 0 bytes .../list_section_divider_holo_custom.9.png | Bin 196 -> 0 bytes .../res/drawable-ldrtl-xhdpi/list_title_holo.9.png | Bin 255 -> 0 bytes .../res/drawable-mdpi/list_activated_holo.9.png | Bin 151 -> 0 bytes .../res/drawable-mdpi/list_focused_holo.9.png | Bin 235 -> 0 bytes .../list_longpressed_holo_light.9.png | Bin 155 -> 0 bytes .../drawable-mdpi/list_pressed_holo_light.9.png | Bin 158 -> 0 bytes .../list_section_divider_holo_custom.9.png | Bin 198 -> 0 bytes .../list_activated_holo.9.png | Bin 1659 -> 0 bytes .../list_activated_holo.9.png | Bin 1005 -> 0 bytes .../list_activated_holo.9.png | Bin 2478 -> 0 bytes .../res/drawable-xhdpi/list_activated_holo.9.png | Bin 158 -> 0 bytes .../res/drawable-xhdpi/list_focused_holo.9.png | Bin 235 -> 0 bytes .../list_longpressed_holo_light.9.png | Bin 162 -> 0 bytes .../drawable-xhdpi/list_pressed_holo_light.9.png | Bin 163 -> 0 bytes .../list_section_divider_holo_custom.9.png | Bin 210 -> 0 bytes .../res/drawable-xxhdpi/list_activated_holo.9.png | Bin 1140 -> 0 bytes .../res/drawable-xxhdpi/list_focused_holo.9.png | Bin 1147 -> 0 bytes .../list_longpressed_holo_light.9.png | Bin 1051 -> 0 bytes .../drawable-xxhdpi/list_pressed_holo_light.9.png | Bin 1051 -> 0 bytes .../contacts/common/res/drawable/ic_back_arrow.xml | 20 - .../common/res/drawable/ic_call_and_share.xml | 22 - .../res/drawable/ic_person_add_tinted_24dp.xml | 20 - .../common/res/drawable/ic_search_add_contact.xml | 20 - .../common/res/drawable/ic_search_video_call.xml | 22 - ...t_selector_background_transition_holo_light.xml | 20 - .../common/res/layout/dialog_call_subject.xml | 2 +- .../common/res/layout/search_bar_expanded.xml | 4 +- .../contacts/common/res/values-af/strings.xml | 4 +- .../contacts/common/res/values-am/strings.xml | 4 +- .../contacts/common/res/values-ar/strings.xml | 4 +- .../contacts/common/res/values-az/strings.xml | 4 +- .../common/res/values-b+sr+Latn/strings.xml | 4 +- .../contacts/common/res/values-be/strings.xml | 4 +- .../contacts/common/res/values-bg/strings.xml | 4 +- .../contacts/common/res/values-bn/strings.xml | 4 +- .../contacts/common/res/values-bs/strings.xml | 4 +- .../contacts/common/res/values-ca/strings.xml | 4 +- .../contacts/common/res/values-cs/strings.xml | 4 +- .../contacts/common/res/values-da/strings.xml | 4 +- .../contacts/common/res/values-de/strings.xml | 4 +- .../contacts/common/res/values-el/strings.xml | 4 +- .../contacts/common/res/values-en-rAU/strings.xml | 4 +- .../contacts/common/res/values-en-rGB/strings.xml | 4 +- .../contacts/common/res/values-en-rIN/strings.xml | 4 +- .../contacts/common/res/values-es-rUS/strings.xml | 4 +- .../contacts/common/res/values-es/strings.xml | 4 +- .../contacts/common/res/values-et/strings.xml | 4 +- .../contacts/common/res/values-eu/strings.xml | 4 +- .../contacts/common/res/values-fa/strings.xml | 4 +- .../contacts/common/res/values-fi/strings.xml | 4 +- .../contacts/common/res/values-fr-rCA/strings.xml | 4 +- .../contacts/common/res/values-fr/strings.xml | 4 +- .../contacts/common/res/values-gl/strings.xml | 4 +- .../contacts/common/res/values-gu/strings.xml | 4 +- .../contacts/common/res/values-hi/strings.xml | 4 +- .../contacts/common/res/values-hr/strings.xml | 4 +- .../contacts/common/res/values-hu/strings.xml | 4 +- .../contacts/common/res/values-hy/strings.xml | 4 +- .../contacts/common/res/values-in/strings.xml | 4 +- .../contacts/common/res/values-is/strings.xml | 4 +- .../contacts/common/res/values-it/strings.xml | 4 +- .../contacts/common/res/values-iw/strings.xml | 4 +- .../contacts/common/res/values-ja/strings.xml | 4 +- .../contacts/common/res/values-ka/strings.xml | 4 +- .../contacts/common/res/values-kk/strings.xml | 4 +- .../contacts/common/res/values-km/strings.xml | 4 +- .../contacts/common/res/values-kn/strings.xml | 4 +- .../contacts/common/res/values-ko/strings.xml | 4 +- .../contacts/common/res/values-ky/strings.xml | 4 +- .../contacts/common/res/values-lo/strings.xml | 4 +- .../contacts/common/res/values-lt/strings.xml | 4 +- .../contacts/common/res/values-lv/strings.xml | 4 +- .../contacts/common/res/values-mk/strings.xml | 4 +- .../contacts/common/res/values-ml/strings.xml | 4 +- .../contacts/common/res/values-mn/strings.xml | 4 +- .../contacts/common/res/values-mr/strings.xml | 4 +- .../contacts/common/res/values-ms/strings.xml | 4 +- .../contacts/common/res/values-my/strings.xml | 4 +- .../contacts/common/res/values-nb/strings.xml | 4 +- .../contacts/common/res/values-ne/strings.xml | 4 +- .../contacts/common/res/values-nl/strings.xml | 4 +- .../contacts/common/res/values-no/strings.xml | 4 +- .../contacts/common/res/values-pa/strings.xml | 4 +- .../contacts/common/res/values-pl/strings.xml | 4 +- .../contacts/common/res/values-pt-rBR/strings.xml | 4 +- .../contacts/common/res/values-pt-rPT/strings.xml | 4 +- .../contacts/common/res/values-pt/strings.xml | 4 +- .../contacts/common/res/values-ro/strings.xml | 4 +- .../contacts/common/res/values-ru/strings.xml | 4 +- .../contacts/common/res/values-si/strings.xml | 4 +- .../contacts/common/res/values-sk/strings.xml | 4 +- .../contacts/common/res/values-sl/strings.xml | 4 +- .../contacts/common/res/values-sq/strings.xml | 4 +- .../contacts/common/res/values-sr/strings.xml | 4 +- .../contacts/common/res/values-sv/strings.xml | 4 +- .../contacts/common/res/values-sw/strings.xml | 4 +- .../contacts/common/res/values-ta/strings.xml | 4 +- .../contacts/common/res/values-te/strings.xml | 4 +- .../contacts/common/res/values-th/strings.xml | 4 +- .../contacts/common/res/values-tl/strings.xml | 4 +- .../contacts/common/res/values-tr/strings.xml | 4 +- .../contacts/common/res/values-uk/strings.xml | 4 +- .../contacts/common/res/values-ur/strings.xml | 4 +- .../contacts/common/res/values-uz/strings.xml | 4 +- .../contacts/common/res/values-vi/strings.xml | 4 +- .../contacts/common/res/values-zh-rCN/strings.xml | 4 +- .../contacts/common/res/values-zh-rHK/strings.xml | 4 +- .../contacts/common/res/values-zh-rTW/strings.xml | 4 +- .../contacts/common/res/values-zu/strings.xml | 4 +- .../android/contacts/common/res/values/dimens.xml | 2 +- .../com/android/contacts/common/res/values/ids.xml | 1 + .../android/contacts/common/res/values/strings.xml | 12 +- .../android/contacts/common/res/values/styles.xml | 1 - .../contacts/common/util/AccountFilterUtil.java | 42 -- .../android/contacts/common/util/BitmapUtil.java | 26 - .../contacts/common/util/ContactDisplayUtils.java | 12 +- .../android/contacts/common/util/DateUtils.java | 241 ------- .../common/util/MaterialColorMapUtils.java | 8 - .../contacts/common/util/NameConverter.java | 242 ------- .../android/contacts/common/util/StopWatch.java | 28 +- .../common/util/TelephonyManagerUtils.java | 9 - .../contacts/common/util/TrafficStatsTags.java | 22 - java/com/android/dialer/about/AndroidManifest.xml | 2 +- java/com/android/dialer/about/res/raw/keep.xml | 1 - java/com/android/dialer/app/AndroidManifest.xml | 1 + java/com/android/dialer/app/Bindings.java | 28 - java/com/android/dialer/app/DialtactsActivity.java | 159 +++-- .../android/dialer/app/SpecialCharSequenceMgr.java | 5 +- .../dialer/app/bindings/DialerBindings.java | 25 - .../dialer/app/bindings/DialerBindingsFactory.java | 26 - .../dialer/app/bindings/DialerBindingsStub.java | 48 -- .../dialer/app/calllog/CallLogActivity.java | 34 +- .../android/dialer/app/calllog/CallLogAdapter.java | 306 ++++++-- .../dialer/app/calllog/CallLogAsyncTaskUtil.java | 6 +- .../dialer/app/calllog/CallLogFragment.java | 123 +++- .../app/calllog/CallLogListItemViewHolder.java | 223 ++++-- .../calllog/CallLogNotificationsQueryHelper.java | 92 ++- .../app/calllog/CallLogNotificationsService.java | 115 ++- .../dialer/app/calllog/CallLogReceiver.java | 4 +- .../dialer/app/calllog/ClearCallLogDialog.java | 2 +- .../app/calllog/DefaultVoicemailNotifier.java | 446 ------------ .../app/calllog/DialerQuickContactBadge.java | 63 ++ .../android/dialer/app/calllog/IntentProvider.java | 12 +- .../app/calllog/LegacyVoicemailNotifier.java | 156 +++++ .../dialer/app/calllog/MissedCallNotifier.java | 116 +++- .../dialer/app/calllog/PhoneAccountHandles.java | 62 -- .../app/calllog/VisualVoicemailNotifier.java | 291 ++++++++ .../app/calllog/VisualVoicemailUpdateTask.java | 168 +++++ .../dialer/app/calllog/VoicemailQueryHandler.java | 44 +- .../app/calllog/calllogcache/CallLogCache.java | 6 +- .../calllog/calllogcache/CallLogCacheLollipop.java | 74 -- .../calllogcache/CallLogCacheLollipopMr1.java | 30 +- .../dialer/app/contactinfo/ContactInfoCache.java | 10 +- .../dialer/app/dialpad/DialpadFragment.java | 19 + .../dialer/app/filterednumber/NumbersAdapter.java | 5 +- .../app/legacybindings/DialerLegacyBindings.java | 2 + .../legacybindings/DialerLegacyBindingsStub.java | 4 + .../dialer/app/list/AllContactsFragment.java | 20 +- .../app/list/DialerPhoneNumberListAdapter.java | 34 +- .../android/dialer/app/list/DialerViewPager.java | 55 ++ .../dialer/app/list/DialtactsPagerAdapter.java | 4 +- .../com/android/dialer/app/list/ListsFragment.java | 38 +- .../dialer/app/list/OldSpeedDialFragment.java | 29 +- .../dialer/app/list/PhoneFavoriteListView.java | 19 +- .../app/list/PhoneFavoriteSquareTileView.java | 4 + .../dialer/app/list/PhoneFavoriteTileView.java | 40 +- .../dialer/app/list/PhoneFavoritesTileAdapter.java | 79 ++- .../dialer/app/list/RegularSearchFragment.java | 17 +- java/com/android/dialer/app/list/RemoveView.java | 2 +- .../android/dialer/app/list/SearchFragment.java | 27 +- .../dialer/app/list/SmartDialSearchFragment.java | 20 +- .../app/manifests/activities/AndroidManifest.xml | 4 +- .../app/res/drawable-hdpi/empty_contacts.png | Bin 2461 -> 0 bytes .../app/res/drawable-hdpi/ic_check_mark_48dp.png | Bin 0 -> 749 bytes .../res/drawable-hdpi/ic_check_mark_blue_24dp.png | Bin 0 -> 408 bytes .../ic_empty_check_mark_white_24dp.png | Bin 0 -> 375 bytes .../app/res/drawable-hdpi/ic_results_phone.png | Bin 1084 -> 0 bytes .../app/res/drawable-mdpi/empty_contacts.png | Bin 1778 -> 0 bytes .../app/res/drawable-mdpi/ic_check_mark_48dp.png | Bin 0 -> 526 bytes .../app/res/drawable-mdpi/ic_results_phone.png | Bin 801 -> 0 bytes .../app/res/drawable-xhdpi/empty_contacts.png | Bin 3352 -> 0 bytes .../app/res/drawable-xhdpi/ic_check_mark_48dp.png | Bin 0 -> 981 bytes .../app/res/drawable-xhdpi/ic_results_phone.png | Bin 1376 -> 0 bytes .../app/res/drawable-xxhdpi/empty_contacts.png | Bin 3686 -> 0 bytes .../app/res/drawable-xxhdpi/ic_check_mark_48dp.png | Bin 0 -> 1443 bytes .../app/res/drawable-xxhdpi/ic_results_phone.png | Bin 2090 -> 0 bytes .../app/res/drawable-xxxhdpi/empty_contacts.png | Bin 5204 -> 0 bytes .../res/drawable-xxxhdpi/ic_check_mark_48dp.png | Bin 0 -> 1893 bytes .../app/res/drawable-xxxhdpi/ic_results_phone.png | Bin 2281 -> 0 bytes .../dialer/app/res/drawable/ic_search_phone.xml | 20 - .../dialer/app/res/drawable/ic_wifi_calling.xml | 29 + .../empty_content_view_dialpad_search.xml | 6 +- .../app/res/layout/action_mode_close_button.xml | 31 + .../app/res/layout/all_contacts_fragment.xml | 2 +- .../dialer/app/res/layout/call_log_fragment.xml | 32 +- .../dialer/app/res/layout/call_log_list_item.xml | 4 +- .../app/res/layout/call_log_list_item_actions.xml | 4 +- .../dialer/app/res/layout/dialpad_fragment.xml | 47 +- .../dialer/app/res/layout/empty_content_view.xml | 54 -- .../layout/empty_content_view_dialpad_search.xml | 6 +- .../dialer/app/res/layout/lists_fragment.xml | 104 +-- .../dialer/app/res/layout/search_edittext.xml | 2 +- .../dialer/app/res/layout/speed_dial_fragment.xml | 2 +- .../dialer/app/res/menu/dialtacts_options.xml | 3 + .../android/dialer/app/res/values-af/strings.xml | 23 +- .../android/dialer/app/res/values-am/strings.xml | 23 +- .../android/dialer/app/res/values-ar/strings.xml | 27 +- .../android/dialer/app/res/values-az/strings.xml | 23 +- .../dialer/app/res/values-b+sr+Latn/strings.xml | 24 +- .../android/dialer/app/res/values-be/strings.xml | 25 +- .../android/dialer/app/res/values-bg/strings.xml | 23 +- .../android/dialer/app/res/values-bn/strings.xml | 23 +- .../android/dialer/app/res/values-bs/strings.xml | 24 +- .../android/dialer/app/res/values-ca/strings.xml | 27 +- .../android/dialer/app/res/values-cs/strings.xml | 25 +- .../android/dialer/app/res/values-da/strings.xml | 23 +- .../android/dialer/app/res/values-de/strings.xml | 23 +- .../android/dialer/app/res/values-el/strings.xml | 23 +- .../dialer/app/res/values-en-rAU/strings.xml | 23 +- .../dialer/app/res/values-en-rGB/strings.xml | 23 +- .../dialer/app/res/values-en-rIN/strings.xml | 23 +- .../dialer/app/res/values-es-rUS/strings.xml | 23 +- .../android/dialer/app/res/values-es/strings.xml | 23 +- .../android/dialer/app/res/values-et/strings.xml | 23 +- .../android/dialer/app/res/values-eu/strings.xml | 23 +- .../android/dialer/app/res/values-fa/strings.xml | 23 +- .../android/dialer/app/res/values-fi/strings.xml | 23 +- .../dialer/app/res/values-fr-rCA/strings.xml | 23 +- .../android/dialer/app/res/values-fr/strings.xml | 23 +- .../android/dialer/app/res/values-gl/strings.xml | 23 +- .../android/dialer/app/res/values-gu/strings.xml | 23 +- .../android/dialer/app/res/values-hi/strings.xml | 23 +- .../android/dialer/app/res/values-hr/strings.xml | 24 +- .../android/dialer/app/res/values-hu/strings.xml | 23 +- .../android/dialer/app/res/values-hy/strings.xml | 23 +- .../android/dialer/app/res/values-in/strings.xml | 23 +- .../android/dialer/app/res/values-is/strings.xml | 23 +- .../android/dialer/app/res/values-it/strings.xml | 23 +- .../android/dialer/app/res/values-iw/strings.xml | 25 +- .../android/dialer/app/res/values-ja/strings.xml | 23 +- .../android/dialer/app/res/values-ka/strings.xml | 23 +- .../android/dialer/app/res/values-kk/strings.xml | 23 +- .../android/dialer/app/res/values-km/strings.xml | 23 +- .../android/dialer/app/res/values-kn/strings.xml | 23 +- .../android/dialer/app/res/values-ko/strings.xml | 23 +- .../android/dialer/app/res/values-ky/strings.xml | 23 +- .../android/dialer/app/res/values-lo/strings.xml | 23 +- .../android/dialer/app/res/values-lt/strings.xml | 25 +- .../android/dialer/app/res/values-lv/strings.xml | 24 +- .../android/dialer/app/res/values-mk/strings.xml | 23 +- .../android/dialer/app/res/values-ml/strings.xml | 23 +- .../android/dialer/app/res/values-mn/strings.xml | 23 +- .../android/dialer/app/res/values-mr/strings.xml | 23 +- .../android/dialer/app/res/values-ms/strings.xml | 23 +- .../android/dialer/app/res/values-my/strings.xml | 23 +- .../android/dialer/app/res/values-nb/strings.xml | 23 +- .../android/dialer/app/res/values-ne/strings.xml | 23 +- .../android/dialer/app/res/values-nl/strings.xml | 23 +- .../android/dialer/app/res/values-no/strings.xml | 23 +- .../android/dialer/app/res/values-pa/strings.xml | 23 +- .../android/dialer/app/res/values-pl/strings.xml | 25 +- .../dialer/app/res/values-pt-rBR/strings.xml | 23 +- .../dialer/app/res/values-pt-rPT/strings.xml | 23 +- .../android/dialer/app/res/values-pt/strings.xml | 23 +- .../android/dialer/app/res/values-ro/strings.xml | 24 +- .../android/dialer/app/res/values-ru/strings.xml | 25 +- .../android/dialer/app/res/values-si/strings.xml | 23 +- .../android/dialer/app/res/values-sk/strings.xml | 25 +- .../android/dialer/app/res/values-sl/strings.xml | 25 +- .../android/dialer/app/res/values-sq/strings.xml | 23 +- .../android/dialer/app/res/values-sr/strings.xml | 24 +- .../android/dialer/app/res/values-sv/strings.xml | 23 +- .../android/dialer/app/res/values-sw/strings.xml | 23 +- .../android/dialer/app/res/values-ta/strings.xml | 23 +- .../android/dialer/app/res/values-te/strings.xml | 23 +- .../android/dialer/app/res/values-th/strings.xml | 25 +- .../android/dialer/app/res/values-tl/strings.xml | 23 +- .../android/dialer/app/res/values-tr/strings.xml | 23 +- .../android/dialer/app/res/values-uk/strings.xml | 25 +- .../android/dialer/app/res/values-ur/strings.xml | 23 +- .../android/dialer/app/res/values-uz/strings.xml | 23 +- .../android/dialer/app/res/values-vi/strings.xml | 23 +- .../dialer/app/res/values-zh-rCN/strings.xml | 23 +- .../dialer/app/res/values-zh-rHK/strings.xml | 23 +- .../dialer/app/res/values-zh-rTW/strings.xml | 23 +- .../android/dialer/app/res/values-zu/strings.xml | 23 +- java/com/android/dialer/app/res/values/colors.xml | 4 - java/com/android/dialer/app/res/values/dimens.xml | 8 +- java/com/android/dialer/app/res/values/strings.xml | 114 +-- java/com/android/dialer/app/res/values/styles.xml | 17 +- .../android/dialer/app/res/xml/sound_settings.xml | 4 +- .../app/settings/AppCompatPreferenceActivity.java | 5 - .../app/settings/DialerSettingsActivity.java | 15 +- .../dialer/app/settings/SoundSettingsFragment.java | 10 +- .../LegacyVoicemailNotificationReceiver.java | 31 +- .../app/voicemail/VoicemailPlaybackPresenter.java | 9 +- .../error/OmtpVoicemailMessageCreator.java | 6 + .../error/VoicemailStatusCorruptionHandler.java | 2 +- .../error/VoicemailTosMessageCreator.java | 301 ++++++++ .../error/Vvm3VoicemailMessageCreator.java | 150 +--- .../error/res/layout/voicemail_tos_fragment.xml | 16 +- .../app/voicemail/error/res/values-af/strings.xml | 16 +- .../app/voicemail/error/res/values-am/strings.xml | 16 +- .../app/voicemail/error/res/values-ar/strings.xml | 16 +- .../app/voicemail/error/res/values-az/strings.xml | 16 +- .../error/res/values-b+sr+Latn/strings.xml | 16 +- .../app/voicemail/error/res/values-be/strings.xml | 16 +- .../app/voicemail/error/res/values-bg/strings.xml | 16 +- .../app/voicemail/error/res/values-bn/strings.xml | 16 +- .../app/voicemail/error/res/values-bs/strings.xml | 16 +- .../app/voicemail/error/res/values-ca/strings.xml | 16 +- .../app/voicemail/error/res/values-cs/strings.xml | 16 +- .../app/voicemail/error/res/values-da/strings.xml | 16 +- .../app/voicemail/error/res/values-de/strings.xml | 16 +- .../app/voicemail/error/res/values-el/strings.xml | 16 +- .../voicemail/error/res/values-en-rAU/strings.xml | 16 +- .../voicemail/error/res/values-en-rGB/strings.xml | 16 +- .../voicemail/error/res/values-en-rIN/strings.xml | 16 +- .../voicemail/error/res/values-es-rUS/strings.xml | 16 +- .../app/voicemail/error/res/values-es/strings.xml | 16 +- .../app/voicemail/error/res/values-et/strings.xml | 16 +- .../app/voicemail/error/res/values-eu/strings.xml | 16 +- .../app/voicemail/error/res/values-fa/strings.xml | 16 +- .../app/voicemail/error/res/values-fi/strings.xml | 16 +- .../voicemail/error/res/values-fr-rCA/strings.xml | 16 +- .../app/voicemail/error/res/values-fr/strings.xml | 16 +- .../app/voicemail/error/res/values-gl/strings.xml | 16 +- .../app/voicemail/error/res/values-gu/strings.xml | 16 +- .../app/voicemail/error/res/values-hi/strings.xml | 18 +- .../app/voicemail/error/res/values-hr/strings.xml | 16 +- .../app/voicemail/error/res/values-hu/strings.xml | 16 +- .../app/voicemail/error/res/values-hy/strings.xml | 16 +- .../app/voicemail/error/res/values-in/strings.xml | 16 +- .../app/voicemail/error/res/values-is/strings.xml | 16 +- .../app/voicemail/error/res/values-it/strings.xml | 16 +- .../app/voicemail/error/res/values-iw/strings.xml | 16 +- .../app/voicemail/error/res/values-ja/strings.xml | 16 +- .../app/voicemail/error/res/values-ka/strings.xml | 16 +- .../app/voicemail/error/res/values-kk/strings.xml | 16 +- .../app/voicemail/error/res/values-km/strings.xml | 16 +- .../app/voicemail/error/res/values-kn/strings.xml | 16 +- .../app/voicemail/error/res/values-ko/strings.xml | 16 +- .../app/voicemail/error/res/values-ky/strings.xml | 16 +- .../app/voicemail/error/res/values-lo/strings.xml | 16 +- .../app/voicemail/error/res/values-lt/strings.xml | 16 +- .../app/voicemail/error/res/values-lv/strings.xml | 16 +- .../app/voicemail/error/res/values-mk/strings.xml | 16 +- .../app/voicemail/error/res/values-ml/strings.xml | 16 +- .../app/voicemail/error/res/values-mn/strings.xml | 16 +- .../app/voicemail/error/res/values-mr/strings.xml | 16 +- .../app/voicemail/error/res/values-ms/strings.xml | 16 +- .../app/voicemail/error/res/values-my/strings.xml | 16 +- .../app/voicemail/error/res/values-nb/strings.xml | 16 +- .../app/voicemail/error/res/values-ne/strings.xml | 16 +- .../app/voicemail/error/res/values-nl/strings.xml | 16 +- .../app/voicemail/error/res/values-no/strings.xml | 16 +- .../app/voicemail/error/res/values-pa/strings.xml | 16 +- .../app/voicemail/error/res/values-pl/strings.xml | 16 +- .../voicemail/error/res/values-pt-rBR/strings.xml | 16 +- .../voicemail/error/res/values-pt-rPT/strings.xml | 16 +- .../app/voicemail/error/res/values-pt/strings.xml | 16 +- .../app/voicemail/error/res/values-ro/strings.xml | 16 +- .../app/voicemail/error/res/values-ru/strings.xml | 16 +- .../app/voicemail/error/res/values-si/strings.xml | 16 +- .../app/voicemail/error/res/values-sk/strings.xml | 16 +- .../app/voicemail/error/res/values-sl/strings.xml | 16 +- .../app/voicemail/error/res/values-sq/strings.xml | 16 +- .../app/voicemail/error/res/values-sr/strings.xml | 16 +- .../app/voicemail/error/res/values-sv/strings.xml | 16 +- .../app/voicemail/error/res/values-sw/strings.xml | 18 +- .../app/voicemail/error/res/values-ta/strings.xml | 16 +- .../app/voicemail/error/res/values-te/strings.xml | 16 +- .../app/voicemail/error/res/values-th/strings.xml | 16 +- .../app/voicemail/error/res/values-tl/strings.xml | 16 +- .../app/voicemail/error/res/values-tr/strings.xml | 16 +- .../app/voicemail/error/res/values-uk/strings.xml | 16 +- .../app/voicemail/error/res/values-ur/strings.xml | 16 +- .../app/voicemail/error/res/values-uz/strings.xml | 16 +- .../app/voicemail/error/res/values-vi/strings.xml | 16 +- .../voicemail/error/res/values-zh-rCN/strings.xml | 16 +- .../voicemail/error/res/values-zh-rHK/strings.xml | 16 +- .../voicemail/error/res/values-zh-rTW/strings.xml | 16 +- .../app/voicemail/error/res/values-zu/strings.xml | 16 +- .../app/voicemail/error/res/values/strings.xml | 37 +- .../app/widget/DialpadSearchEmptyContentView.java | 1 + .../dialer/app/widget/EmptyContentView.java | 121 ---- .../dialer/app/widget/SearchEditTextLayout.java | 22 +- .../android/dialer/backup/DialerBackupAgent.java | 2 +- .../android/dialer/backup/DialerBackupUtils.java | 2 +- .../binary/aosp/AospDialerRootComponent.java | 4 + .../dialer/binary/aosp/testing/AndroidManifest.xml | 24 + .../dialer/binary/aosp/testing/TestActivity.java | 25 + .../basecomponent/BaseDialerRootComponent.java | 8 + .../dialer/binary/common/DialerApplication.java | 10 +- .../dialer/blocking/FilteredNumbersUtil.java | 11 +- .../dialer/callcomposer/AndroidManifest.xml | 2 +- .../dialer/callcomposer/CallComposerActivity.java | 137 ++-- .../callcomposer/CameraComposerFragment.java | 43 +- .../dialer/callcomposer/GalleryCursorLoader.java | 4 +- .../callcomposer/MessageComposerFragment.java | 36 +- .../dialer/callcomposer/camera/CameraManager.java | 122 ++-- .../callcomposer/camera/ImagePersistTask.java | 38 +- .../callcomposer/camera/exif/ExifInterface.java | 2 +- .../cameraui/res/layout/camera_view.xml | 19 +- .../cameraui/res/values-af/strings.xml | 29 +- .../cameraui/res/values-am/strings.xml | 29 +- .../cameraui/res/values-ar/strings.xml | 29 +- .../cameraui/res/values-az/strings.xml | 29 +- .../cameraui/res/values-b+sr+Latn/strings.xml | 29 +- .../cameraui/res/values-be/strings.xml | 29 +- .../cameraui/res/values-bg/strings.xml | 29 +- .../cameraui/res/values-bn/strings.xml | 29 +- .../cameraui/res/values-bs/strings.xml | 29 +- .../cameraui/res/values-ca/strings.xml | 29 +- .../cameraui/res/values-cs/strings.xml | 29 +- .../cameraui/res/values-da/strings.xml | 29 +- .../cameraui/res/values-de/strings.xml | 29 +- .../cameraui/res/values-el/strings.xml | 29 +- .../cameraui/res/values-en-rAU/strings.xml | 29 +- .../cameraui/res/values-en-rGB/strings.xml | 29 +- .../cameraui/res/values-en-rIN/strings.xml | 29 +- .../cameraui/res/values-es-rUS/strings.xml | 29 +- .../cameraui/res/values-es/strings.xml | 29 +- .../cameraui/res/values-et/strings.xml | 29 +- .../cameraui/res/values-eu/strings.xml | 29 +- .../cameraui/res/values-fa/strings.xml | 29 +- .../cameraui/res/values-fi/strings.xml | 29 +- .../cameraui/res/values-fr-rCA/strings.xml | 29 +- .../cameraui/res/values-fr/strings.xml | 29 +- .../cameraui/res/values-gl/strings.xml | 29 +- .../cameraui/res/values-gu/strings.xml | 29 +- .../cameraui/res/values-hi/strings.xml | 29 +- .../cameraui/res/values-hr/strings.xml | 29 +- .../cameraui/res/values-hu/strings.xml | 29 +- .../cameraui/res/values-hy/strings.xml | 29 +- .../cameraui/res/values-in/strings.xml | 29 +- .../cameraui/res/values-is/strings.xml | 29 +- .../cameraui/res/values-it/strings.xml | 29 +- .../cameraui/res/values-iw/strings.xml | 29 +- .../cameraui/res/values-ja/strings.xml | 29 +- .../cameraui/res/values-ka/strings.xml | 29 +- .../cameraui/res/values-kk/strings.xml | 29 +- .../cameraui/res/values-km/strings.xml | 29 +- .../cameraui/res/values-kn/strings.xml | 29 +- .../cameraui/res/values-ko/strings.xml | 29 +- .../cameraui/res/values-ky/strings.xml | 29 +- .../cameraui/res/values-lo/strings.xml | 29 +- .../cameraui/res/values-lt/strings.xml | 29 +- .../cameraui/res/values-lv/strings.xml | 29 +- .../cameraui/res/values-mk/strings.xml | 29 +- .../cameraui/res/values-ml/strings.xml | 29 +- .../cameraui/res/values-mn/strings.xml | 29 +- .../cameraui/res/values-mr/strings.xml | 29 +- .../cameraui/res/values-ms/strings.xml | 29 +- .../cameraui/res/values-my/strings.xml | 29 +- .../cameraui/res/values-nb/strings.xml | 29 +- .../cameraui/res/values-ne/strings.xml | 29 +- .../cameraui/res/values-nl/strings.xml | 29 +- .../cameraui/res/values-no/strings.xml | 29 +- .../cameraui/res/values-pa/strings.xml | 29 +- .../cameraui/res/values-pl/strings.xml | 29 +- .../cameraui/res/values-pt-rBR/strings.xml | 29 +- .../cameraui/res/values-pt-rPT/strings.xml | 29 +- .../cameraui/res/values-pt/strings.xml | 29 +- .../cameraui/res/values-ro/strings.xml | 29 +- .../cameraui/res/values-ru/strings.xml | 29 +- .../cameraui/res/values-si/strings.xml | 29 +- .../cameraui/res/values-sk/strings.xml | 29 +- .../cameraui/res/values-sl/strings.xml | 29 +- .../cameraui/res/values-sq/strings.xml | 29 +- .../cameraui/res/values-sr/strings.xml | 29 +- .../cameraui/res/values-sv/strings.xml | 29 +- .../cameraui/res/values-sw/strings.xml | 29 +- .../cameraui/res/values-ta/strings.xml | 29 +- .../cameraui/res/values-te/strings.xml | 29 +- .../cameraui/res/values-th/strings.xml | 29 +- .../cameraui/res/values-tl/strings.xml | 29 +- .../cameraui/res/values-tr/strings.xml | 29 +- .../cameraui/res/values-uk/strings.xml | 29 +- .../cameraui/res/values-ur/strings.xml | 29 +- .../cameraui/res/values-uz/strings.xml | 29 +- .../cameraui/res/values-vi/strings.xml | 29 +- .../cameraui/res/values-zh-rCN/strings.xml | 29 +- .../cameraui/res/values-zh-rHK/strings.xml | 29 +- .../cameraui/res/values-zh-rTW/strings.xml | 29 +- .../cameraui/res/values-zu/strings.xml | 29 +- .../callcomposer/cameraui/res/values/dimens.xml | 2 +- .../callcomposer/cameraui/res/values/strings.xml | 33 +- .../callcomposer/proto/call_composer_contact.proto | 18 - .../res/layout/call_composer_activity.xml | 41 +- .../res/layout/fragment_message_composer.xml | 2 +- .../dialer/callcomposer/res/values-af/strings.xml | 3 + .../dialer/callcomposer/res/values-am/strings.xml | 3 + .../dialer/callcomposer/res/values-ar/strings.xml | 3 + .../dialer/callcomposer/res/values-az/strings.xml | 3 + .../callcomposer/res/values-b+sr+Latn/strings.xml | 3 + .../dialer/callcomposer/res/values-be/strings.xml | 3 + .../dialer/callcomposer/res/values-bg/strings.xml | 3 + .../dialer/callcomposer/res/values-bn/strings.xml | 3 + .../dialer/callcomposer/res/values-bs/strings.xml | 3 + .../dialer/callcomposer/res/values-ca/strings.xml | 7 +- .../dialer/callcomposer/res/values-cs/strings.xml | 3 + .../dialer/callcomposer/res/values-da/strings.xml | 3 + .../dialer/callcomposer/res/values-de/strings.xml | 3 + .../dialer/callcomposer/res/values-el/strings.xml | 3 + .../callcomposer/res/values-en-rAU/strings.xml | 3 + .../callcomposer/res/values-en-rGB/strings.xml | 3 + .../callcomposer/res/values-en-rIN/strings.xml | 3 + .../callcomposer/res/values-es-rUS/strings.xml | 3 + .../dialer/callcomposer/res/values-es/strings.xml | 3 + .../dialer/callcomposer/res/values-et/strings.xml | 3 + .../dialer/callcomposer/res/values-eu/strings.xml | 3 + .../dialer/callcomposer/res/values-fa/strings.xml | 3 + .../dialer/callcomposer/res/values-fi/strings.xml | 3 + .../callcomposer/res/values-fr-rCA/strings.xml | 3 + .../dialer/callcomposer/res/values-fr/strings.xml | 3 + .../dialer/callcomposer/res/values-gl/strings.xml | 3 + .../dialer/callcomposer/res/values-gu/strings.xml | 3 + .../dialer/callcomposer/res/values-hi/strings.xml | 3 + .../dialer/callcomposer/res/values-hr/strings.xml | 3 + .../dialer/callcomposer/res/values-hu/strings.xml | 3 + .../dialer/callcomposer/res/values-hy/strings.xml | 3 + .../dialer/callcomposer/res/values-in/strings.xml | 3 + .../dialer/callcomposer/res/values-is/strings.xml | 3 + .../dialer/callcomposer/res/values-it/strings.xml | 3 + .../dialer/callcomposer/res/values-iw/strings.xml | 3 + .../dialer/callcomposer/res/values-ja/strings.xml | 3 + .../dialer/callcomposer/res/values-ka/strings.xml | 3 + .../dialer/callcomposer/res/values-kk/strings.xml | 3 + .../dialer/callcomposer/res/values-km/strings.xml | 3 + .../dialer/callcomposer/res/values-kn/strings.xml | 3 + .../dialer/callcomposer/res/values-ko/strings.xml | 3 + .../dialer/callcomposer/res/values-ky/strings.xml | 3 + .../dialer/callcomposer/res/values-lo/strings.xml | 3 + .../dialer/callcomposer/res/values-lt/strings.xml | 3 + .../dialer/callcomposer/res/values-lv/strings.xml | 3 + .../dialer/callcomposer/res/values-mk/strings.xml | 3 + .../dialer/callcomposer/res/values-ml/strings.xml | 3 + .../dialer/callcomposer/res/values-mn/strings.xml | 3 + .../dialer/callcomposer/res/values-mr/strings.xml | 3 + .../dialer/callcomposer/res/values-ms/strings.xml | 3 + .../dialer/callcomposer/res/values-my/strings.xml | 3 + .../dialer/callcomposer/res/values-nb/strings.xml | 3 + .../dialer/callcomposer/res/values-ne/strings.xml | 3 + .../dialer/callcomposer/res/values-nl/strings.xml | 3 + .../dialer/callcomposer/res/values-no/strings.xml | 3 + .../dialer/callcomposer/res/values-pa/strings.xml | 3 + .../dialer/callcomposer/res/values-pl/strings.xml | 3 + .../callcomposer/res/values-pt-rBR/strings.xml | 3 + .../callcomposer/res/values-pt-rPT/strings.xml | 3 + .../dialer/callcomposer/res/values-pt/strings.xml | 3 + .../dialer/callcomposer/res/values-ro/strings.xml | 3 + .../dialer/callcomposer/res/values-ru/strings.xml | 3 + .../dialer/callcomposer/res/values-si/strings.xml | 3 + .../dialer/callcomposer/res/values-sk/strings.xml | 3 + .../dialer/callcomposer/res/values-sl/strings.xml | 3 + .../dialer/callcomposer/res/values-sq/strings.xml | 3 + .../dialer/callcomposer/res/values-sr/strings.xml | 3 + .../dialer/callcomposer/res/values-sv/strings.xml | 3 + .../dialer/callcomposer/res/values-sw/strings.xml | 3 + .../dialer/callcomposer/res/values-ta/strings.xml | 3 + .../dialer/callcomposer/res/values-te/strings.xml | 3 + .../dialer/callcomposer/res/values-th/strings.xml | 3 + .../dialer/callcomposer/res/values-tl/strings.xml | 3 + .../dialer/callcomposer/res/values-tr/strings.xml | 3 + .../dialer/callcomposer/res/values-uk/strings.xml | 3 + .../dialer/callcomposer/res/values-ur/strings.xml | 3 + .../dialer/callcomposer/res/values-uz/strings.xml | 3 + .../dialer/callcomposer/res/values-vi/strings.xml | 3 + .../callcomposer/res/values-zh-rCN/strings.xml | 3 + .../callcomposer/res/values-zh-rHK/strings.xml | 3 + .../callcomposer/res/values-zh-rTW/strings.xml | 3 + .../dialer/callcomposer/res/values-zu/strings.xml | 3 + .../dialer/callcomposer/res/values/strings.xml | 6 + .../dialer/callcomposer/res/values/styles.xml | 2 +- .../android/dialer/calldetails/AndroidManifest.xml | 4 +- .../dialer/calldetails/CallDetailsActivity.java | 61 +- .../dialer/calldetails/CallDetailsAdapter.java | 21 +- .../calldetails/CallDetailsFooterViewHolder.java | 32 +- .../calldetails/CallDetailsHeaderViewHolder.java | 29 +- .../dialer/calldetails/ReportDialogFragment.java | 161 +++++ .../calldetails/res/layout/call_details_footer.xml | 9 + .../res/layout/caller_id_report_dialog.xml | 35 + .../calldetails/res/layout/contact_container.xml | 16 +- .../dialer/calldetails/res/values-af/strings.xml | 6 +- .../dialer/calldetails/res/values-am/strings.xml | 6 +- .../dialer/calldetails/res/values-ar/strings.xml | 6 +- .../dialer/calldetails/res/values-az/strings.xml | 6 +- .../calldetails/res/values-b+sr+Latn/strings.xml | 6 +- .../dialer/calldetails/res/values-be/strings.xml | 6 +- .../dialer/calldetails/res/values-bg/strings.xml | 6 +- .../dialer/calldetails/res/values-bn/strings.xml | 6 +- .../dialer/calldetails/res/values-bs/strings.xml | 6 +- .../dialer/calldetails/res/values-ca/strings.xml | 6 +- .../dialer/calldetails/res/values-cs/strings.xml | 6 +- .../dialer/calldetails/res/values-da/strings.xml | 6 +- .../dialer/calldetails/res/values-de/strings.xml | 6 +- .../dialer/calldetails/res/values-el/strings.xml | 6 +- .../calldetails/res/values-en-rAU/strings.xml | 6 +- .../calldetails/res/values-en-rGB/strings.xml | 6 +- .../calldetails/res/values-en-rIN/strings.xml | 6 +- .../calldetails/res/values-es-rUS/strings.xml | 6 +- .../dialer/calldetails/res/values-es/strings.xml | 6 +- .../dialer/calldetails/res/values-et/strings.xml | 6 +- .../dialer/calldetails/res/values-eu/strings.xml | 6 +- .../dialer/calldetails/res/values-fa/strings.xml | 6 +- .../dialer/calldetails/res/values-fi/strings.xml | 6 +- .../calldetails/res/values-fr-rCA/strings.xml | 6 +- .../dialer/calldetails/res/values-fr/strings.xml | 6 +- .../dialer/calldetails/res/values-gl/strings.xml | 6 +- .../dialer/calldetails/res/values-gu/strings.xml | 6 +- .../dialer/calldetails/res/values-hi/strings.xml | 6 +- .../dialer/calldetails/res/values-hr/strings.xml | 6 +- .../dialer/calldetails/res/values-hu/strings.xml | 6 +- .../dialer/calldetails/res/values-hy/strings.xml | 6 +- .../dialer/calldetails/res/values-in/strings.xml | 6 +- .../dialer/calldetails/res/values-is/strings.xml | 6 +- .../dialer/calldetails/res/values-it/strings.xml | 6 +- .../dialer/calldetails/res/values-iw/strings.xml | 6 +- .../dialer/calldetails/res/values-ja/strings.xml | 6 +- .../dialer/calldetails/res/values-ka/strings.xml | 6 +- .../dialer/calldetails/res/values-kk/strings.xml | 6 +- .../dialer/calldetails/res/values-km/strings.xml | 6 +- .../dialer/calldetails/res/values-kn/strings.xml | 6 +- .../dialer/calldetails/res/values-ko/strings.xml | 6 +- .../dialer/calldetails/res/values-ky/strings.xml | 6 +- .../dialer/calldetails/res/values-lo/strings.xml | 6 +- .../dialer/calldetails/res/values-lt/strings.xml | 6 +- .../dialer/calldetails/res/values-lv/strings.xml | 6 +- .../dialer/calldetails/res/values-mk/strings.xml | 6 +- .../dialer/calldetails/res/values-ml/strings.xml | 6 +- .../dialer/calldetails/res/values-mn/strings.xml | 6 +- .../dialer/calldetails/res/values-mr/strings.xml | 6 +- .../dialer/calldetails/res/values-ms/strings.xml | 6 +- .../dialer/calldetails/res/values-my/strings.xml | 6 +- .../dialer/calldetails/res/values-nb/strings.xml | 6 +- .../dialer/calldetails/res/values-ne/strings.xml | 6 +- .../dialer/calldetails/res/values-nl/strings.xml | 6 +- .../dialer/calldetails/res/values-no/strings.xml | 6 +- .../dialer/calldetails/res/values-pa/strings.xml | 6 +- .../dialer/calldetails/res/values-pl/strings.xml | 6 +- .../calldetails/res/values-pt-rBR/strings.xml | 6 +- .../calldetails/res/values-pt-rPT/strings.xml | 6 +- .../dialer/calldetails/res/values-pt/strings.xml | 6 +- .../dialer/calldetails/res/values-ro/strings.xml | 6 +- .../dialer/calldetails/res/values-ru/strings.xml | 6 +- .../dialer/calldetails/res/values-si/strings.xml | 6 +- .../dialer/calldetails/res/values-sk/strings.xml | 6 +- .../dialer/calldetails/res/values-sl/strings.xml | 6 +- .../dialer/calldetails/res/values-sq/strings.xml | 6 +- .../dialer/calldetails/res/values-sr/strings.xml | 6 +- .../dialer/calldetails/res/values-sv/strings.xml | 6 +- .../dialer/calldetails/res/values-sw/strings.xml | 6 +- .../dialer/calldetails/res/values-ta/strings.xml | 6 +- .../dialer/calldetails/res/values-te/strings.xml | 6 +- .../dialer/calldetails/res/values-th/strings.xml | 6 +- .../dialer/calldetails/res/values-tl/strings.xml | 6 +- .../dialer/calldetails/res/values-tr/strings.xml | 6 +- .../dialer/calldetails/res/values-uk/strings.xml | 6 +- .../dialer/calldetails/res/values-ur/strings.xml | 6 +- .../dialer/calldetails/res/values-uz/strings.xml | 6 +- .../dialer/calldetails/res/values-vi/strings.xml | 6 +- .../calldetails/res/values-zh-rCN/strings.xml | 6 +- .../calldetails/res/values-zh-rHK/strings.xml | 6 +- .../calldetails/res/values-zh-rTW/strings.xml | 6 +- .../dialer/calldetails/res/values-zu/strings.xml | 6 +- .../dialer/calldetails/res/values/dimens.xml | 2 - .../dialer/calldetails/res/values/strings.xml | 19 +- .../dialer/calldetails/res/values/styles.xml | 18 - .../dialer/callintent/CallIntentBuilder.java | 16 +- .../dialer/callintent/call_specific_app_data.proto | 14 + .../callintent/speed_dial_contact_type.proto | 19 + .../android/dialer/calllog/CallLogComponent.java | 2 + .../android/dialer/calllog/CallLogFramework.java | 5 +- java/com/android/dialer/calllog/CallLogModule.java | 8 +- java/com/android/dialer/calllog/DataSources.java | 31 - .../calllog/RefreshAnnotatedCallLogWorker.java | 123 ++-- .../dialer/calllog/database/AndroidManifest.xml | 28 + .../dialer/calllog/database/AnnotatedCallLog.java | 53 -- .../database/AnnotatedCallLogContentProvider.java | 331 +++++++++ .../database/AnnotatedCallLogDatabaseHelper.java | 46 +- .../calllog/database/CallLogDatabaseComponent.java | 40 ++ .../dialer/calllog/database/CallLogMutations.java | 58 -- .../android/dialer/calllog/database/Coalescer.java | 180 +++++ .../dialer/calllog/database/MutationApplier.java | 105 +++ .../contract/AnnotatedCallLogContract.java | 135 ++++ .../calllog/datasources/CallLogDataSource.java | 67 +- .../calllog/datasources/CallLogMutations.java | 110 +++ .../dialer/calllog/datasources/DataSources.java | 30 + .../datasources/contacts/ContactsDataSource.java | 25 +- .../systemcalllog/SystemCallLogDataSource.java | 251 ++++++- .../calllog/datasources/util/RowCombiner.java | 53 ++ .../calllog/testing/FakeCallLogApplication.java | 53 ++ .../android/dialer/calllog/ui/AndroidManifest.xml | 2 +- .../calllog/ui/AnnotatedCallLogCursorLoader.java | 48 -- .../dialer/calllog/ui/NewCallLogAdapter.java | 53 ++ .../dialer/calllog/ui/NewCallLogFragment.java | 101 +-- .../dialer/calllog/ui/NewCallLogViewHolder.java | 43 ++ .../calllog/ui/res/layout/new_call_log_entry.xml | 16 +- .../ui/res/layout/new_call_log_fragment.xml | 7 +- java/com/android/dialer/common/Assert.java | 9 +- java/com/android/dialer/common/ConfigProvider.java | 27 - .../dialer/common/ConfigProviderBindings.java | 76 -- .../dialer/common/ConfigProviderFactory.java | 26 - .../concurrent/DefaultDialerExecutorFactory.java | 111 ++- .../dialer/common/concurrent/DialerExecutor.java | 10 + .../common/concurrent/DialerExecutorComponent.java | 39 ++ .../common/concurrent/DialerExecutorModule.java | 28 + .../common/concurrent/DialerUiTaskFragment.java | 94 ++- .../dialer/common/concurrent/ThreadUtil.java | 5 + java/com/android/dialer/compat/CompatUtils.java | 155 ----- .../dialer/configprovider/AndroidManifest.xml | 23 + .../dialer/configprovider/ConfigProvider.java | 27 + .../configprovider/ConfigProviderBindings.java | 68 ++ .../configprovider/ConfigProviderComponent.java | 41 ++ .../configprovider/SharedPrefConfigProvider.java | 131 ++++ .../SharedPrefConfigProviderModule.java | 30 + java/com/android/dialer/constants/Constants.java | 3 + .../android/dialer/constants/ScheduledJobIds.java | 1 + .../android/dialer/constants/TrafficStatsTags.java | 28 + .../dialer/constants/aospdialer/ConstantsImpl.java | 6 + .../dialer/contactactions/AndroidManifest.xml | 16 + .../contactactions/ContactActionBottomSheet.java | 136 ++++ .../dialer/contactactions/ContactActionModule.java | 38 + .../dialer/contactactions/DividerModule.java | 41 ++ .../dialer/contactactions/IntentModule.java | 75 ++ .../contactactions/res/layout/contact_layout.xml | 53 ++ .../contactactions/res/layout/divider_layout.xml | 23 + .../contactactions/res/layout/module_layout.xml | 40 ++ .../contactactions/res/layout/sheet_layout.xml | 24 + .../dialer/contactactions/res/values/dimens.xml | 20 + .../contactsfragment/AddContactViewHolder.java | 42 ++ .../dialer/contactsfragment/ContactViewHolder.java | 11 + .../dialer/contactsfragment/ContactsAdapter.java | 102 ++- .../contactsfragment/ContactsCursorLoader.java | 29 +- .../dialer/contactsfragment/ContactsFragment.java | 160 ++++- .../dialer/contactsfragment/FastScroller.java | 130 ++++ .../fast_scroller_container_background.xml | 28 + .../res/drawable/fast_scroller_scroll_bar.xml | 32 + .../res/layout/add_contact_row.xml | 50 ++ .../contactsfragment/res/layout/contact_row.xml | 6 +- .../res/layout/fragment_contacts.xml | 41 +- .../dialer/contactsfragment/res/values/dimens.xml | 9 +- .../dialer/database/DialerDatabaseHelper.java | 357 +++++----- .../dialer/dialercontact/dialer_contact.proto | 26 + .../dialer/dialpadview/res/values/dimens.xml | 2 +- .../enrichedcall/FuzzyPhoneNumberMatcher.java | 41 +- .../android/dialer/inject/ApplicationContext.java | 22 + java/com/android/dialer/inject/ContextModule.java | 7 +- .../interactions/PhoneNumberInteraction.java | 9 + .../android/dialer/lightbringer/Lightbringer.java | 18 +- .../dialer/lightbringer/stub/LightbringerStub.java | 55 +- .../android/dialer/location/CountryDetector.java | 6 +- .../android/dialer/logging/LoggingBindings.java | 18 +- .../dialer/logging/LoggingBindingsStub.java | 17 + .../dialer/logging/contact_lookup_result.proto | 40 +- .../android/dialer/logging/contact_source.proto | 1 + .../android/dialer/logging/dialer_impression.proto | 54 +- .../android/dialer/logging/interaction_event.proto | 20 + .../dialer/logging/reporting_location.proto | 1 + java/com/android/dialer/logging/screen_event.proto | 1 + java/com/android/dialer/logging/ui_action.proto | 43 ++ java/com/android/dialer/main/Main.java | 27 + java/com/android/dialer/main/MainComponent.java | 39 ++ .../android/dialer/main/impl/AndroidManifest.xml | 110 +++ .../com/android/dialer/main/impl/MainActivity.java | 91 +++ java/com/android/dialer/main/impl/MainImpl.java | 90 +++ java/com/android/dialer/main/impl/MainModule.java | 30 + .../android/dialer/main/impl/MainPagerAdapter.java | 75 ++ .../com/android/dialer/main/impl/StubFragment.java | 35 + .../res/drawable-xxxhdpi/nui_launcher_icon.png | Bin 0 -> 5554 bytes .../dialer/main/impl/res/layout/main_activity.xml | 68 ++ .../dialer/main/impl/res/layout/stub_fragment.xml | 27 + .../dialer/main/impl/res/menu/main_menu.xml | 47 ++ .../dialer/main/impl/res/values-af/strings.xml | 32 + .../dialer/main/impl/res/values-am/strings.xml | 36 + .../dialer/main/impl/res/values-ar/strings.xml | 32 + .../dialer/main/impl/res/values-az/strings.xml | 36 + .../main/impl/res/values-b+sr+Latn/strings.xml | 32 + .../dialer/main/impl/res/values-be/strings.xml | 36 + .../dialer/main/impl/res/values-bg/strings.xml | 32 + .../dialer/main/impl/res/values-bn/strings.xml | 32 + .../dialer/main/impl/res/values-bs/strings.xml | 32 + .../dialer/main/impl/res/values-ca/strings.xml | 36 + .../dialer/main/impl/res/values-cs/strings.xml | 36 + .../dialer/main/impl/res/values-da/strings.xml | 36 + .../dialer/main/impl/res/values-de/strings.xml | 32 + .../dialer/main/impl/res/values-el/strings.xml | 36 + .../dialer/main/impl/res/values-en-rAU/strings.xml | 32 + .../dialer/main/impl/res/values-en-rGB/strings.xml | 32 + .../dialer/main/impl/res/values-en-rIN/strings.xml | 32 + .../dialer/main/impl/res/values-es-rUS/strings.xml | 36 + .../dialer/main/impl/res/values-es/strings.xml | 32 + .../dialer/main/impl/res/values-et/strings.xml | 36 + .../dialer/main/impl/res/values-eu/strings.xml | 36 + .../dialer/main/impl/res/values-fa/strings.xml | 36 + .../dialer/main/impl/res/values-fi/strings.xml | 36 + .../dialer/main/impl/res/values-fr-rCA/strings.xml | 32 + .../dialer/main/impl/res/values-fr/strings.xml | 32 + .../dialer/main/impl/res/values-gl/strings.xml | 32 + .../dialer/main/impl/res/values-gu/strings.xml | 32 + .../dialer/main/impl/res/values-hi/strings.xml | 32 + .../dialer/main/impl/res/values-hr/strings.xml | 36 + .../dialer/main/impl/res/values-hu/strings.xml | 36 + .../dialer/main/impl/res/values-hy/strings.xml | 32 + .../dialer/main/impl/res/values-in/strings.xml | 36 + .../dialer/main/impl/res/values-is/strings.xml | 36 + .../dialer/main/impl/res/values-it/strings.xml | 36 + .../dialer/main/impl/res/values-iw/strings.xml | 32 + .../dialer/main/impl/res/values-ja/strings.xml | 36 + .../dialer/main/impl/res/values-ka/strings.xml | 36 + .../dialer/main/impl/res/values-kk/strings.xml | 36 + .../dialer/main/impl/res/values-km/strings.xml | 36 + .../dialer/main/impl/res/values-kn/strings.xml | 36 + .../dialer/main/impl/res/values-ko/strings.xml | 32 + .../dialer/main/impl/res/values-ky/strings.xml | 36 + .../dialer/main/impl/res/values-lo/strings.xml | 32 + .../dialer/main/impl/res/values-lt/strings.xml | 32 + .../dialer/main/impl/res/values-lv/strings.xml | 36 + .../dialer/main/impl/res/values-mk/strings.xml | 36 + .../dialer/main/impl/res/values-ml/strings.xml | 36 + .../dialer/main/impl/res/values-mn/strings.xml | 32 + .../dialer/main/impl/res/values-mr/strings.xml | 32 + .../dialer/main/impl/res/values-ms/strings.xml | 32 + .../dialer/main/impl/res/values-my/strings.xml | 32 + .../dialer/main/impl/res/values-nb/strings.xml | 36 + .../dialer/main/impl/res/values-ne/strings.xml | 32 + .../dialer/main/impl/res/values-nl/strings.xml | 36 + .../dialer/main/impl/res/values-no/strings.xml | 36 + .../dialer/main/impl/res/values-pa/strings.xml | 32 + .../dialer/main/impl/res/values-pl/strings.xml | 32 + .../dialer/main/impl/res/values-pt-rBR/strings.xml | 36 + .../dialer/main/impl/res/values-pt-rPT/strings.xml | 36 + .../dialer/main/impl/res/values-pt/strings.xml | 36 + .../dialer/main/impl/res/values-ro/strings.xml | 36 + .../dialer/main/impl/res/values-ru/strings.xml | 36 + .../dialer/main/impl/res/values-si/strings.xml | 36 + .../dialer/main/impl/res/values-sk/strings.xml | 36 + .../dialer/main/impl/res/values-sl/strings.xml | 36 + .../dialer/main/impl/res/values-sq/strings.xml | 36 + .../dialer/main/impl/res/values-sr/strings.xml | 32 + .../dialer/main/impl/res/values-sv/strings.xml | 32 + .../dialer/main/impl/res/values-sw/strings.xml | 36 + .../dialer/main/impl/res/values-ta/strings.xml | 32 + .../dialer/main/impl/res/values-te/strings.xml | 32 + .../dialer/main/impl/res/values-th/strings.xml | 32 + .../dialer/main/impl/res/values-tl/strings.xml | 36 + .../dialer/main/impl/res/values-tr/strings.xml | 36 + .../dialer/main/impl/res/values-uk/strings.xml | 32 + .../dialer/main/impl/res/values-ur/strings.xml | 32 + .../dialer/main/impl/res/values-uz/strings.xml | 36 + .../dialer/main/impl/res/values-vi/strings.xml | 36 + .../dialer/main/impl/res/values-zh-rCN/strings.xml | 32 + .../dialer/main/impl/res/values-zh-rHK/strings.xml | 32 + .../dialer/main/impl/res/values-zh-rTW/strings.xml | 36 + .../dialer/main/impl/res/values-zu/strings.xml | 36 + .../dialer/main/impl/res/values/strings.xml | 49 ++ .../android/dialer/main/impl/res/values/styles.xml | 28 + .../android/dialer/multimedia/MultimediaData.java | 6 + .../dialer/notification/AndroidManifest.xml | 16 +- .../notification/GroupedNotificationUtil.java | 66 -- .../dialer/notification/NotificationChannelId.java | 41 ++ .../notification/NotificationChannelManager.java | 456 ++++-------- .../notification/PackageUpdatedReceiver.java | 37 - .../dialer/notification/VoicemailChannelUtils.java | 217 ++++++ .../dialer/notification/res/values-af/strings.xml | 1 - .../dialer/notification/res/values-am/strings.xml | 1 - .../dialer/notification/res/values-ar/strings.xml | 1 - .../dialer/notification/res/values-az/strings.xml | 1 - .../notification/res/values-b+sr+Latn/strings.xml | 1 - .../dialer/notification/res/values-be/strings.xml | 1 - .../dialer/notification/res/values-bg/strings.xml | 1 - .../dialer/notification/res/values-bn/strings.xml | 1 - .../dialer/notification/res/values-bs/strings.xml | 1 - .../dialer/notification/res/values-ca/strings.xml | 1 - .../dialer/notification/res/values-cs/strings.xml | 1 - .../dialer/notification/res/values-da/strings.xml | 1 - .../dialer/notification/res/values-de/strings.xml | 1 - .../dialer/notification/res/values-el/strings.xml | 1 - .../notification/res/values-en-rAU/strings.xml | 1 - .../notification/res/values-en-rGB/strings.xml | 1 - .../notification/res/values-en-rIN/strings.xml | 1 - .../notification/res/values-es-rUS/strings.xml | 1 - .../dialer/notification/res/values-es/strings.xml | 1 - .../dialer/notification/res/values-et/strings.xml | 1 - .../dialer/notification/res/values-eu/strings.xml | 1 - .../dialer/notification/res/values-fa/strings.xml | 1 - .../dialer/notification/res/values-fi/strings.xml | 1 - .../notification/res/values-fr-rCA/strings.xml | 1 - .../dialer/notification/res/values-fr/strings.xml | 1 - .../dialer/notification/res/values-gl/strings.xml | 1 - .../dialer/notification/res/values-gu/strings.xml | 1 - .../dialer/notification/res/values-hi/strings.xml | 1 - .../dialer/notification/res/values-hr/strings.xml | 1 - .../dialer/notification/res/values-hu/strings.xml | 1 - .../dialer/notification/res/values-hy/strings.xml | 1 - .../dialer/notification/res/values-in/strings.xml | 1 - .../dialer/notification/res/values-is/strings.xml | 1 - .../dialer/notification/res/values-it/strings.xml | 1 - .../dialer/notification/res/values-iw/strings.xml | 1 - .../dialer/notification/res/values-ja/strings.xml | 1 - .../dialer/notification/res/values-ka/strings.xml | 1 - .../dialer/notification/res/values-kk/strings.xml | 1 - .../dialer/notification/res/values-km/strings.xml | 1 - .../dialer/notification/res/values-kn/strings.xml | 1 - .../dialer/notification/res/values-ko/strings.xml | 1 - .../dialer/notification/res/values-ky/strings.xml | 1 - .../dialer/notification/res/values-lo/strings.xml | 1 - .../dialer/notification/res/values-lt/strings.xml | 1 - .../dialer/notification/res/values-lv/strings.xml | 1 - .../dialer/notification/res/values-mk/strings.xml | 1 - .../dialer/notification/res/values-ml/strings.xml | 1 - .../dialer/notification/res/values-mn/strings.xml | 1 - .../dialer/notification/res/values-mr/strings.xml | 1 - .../dialer/notification/res/values-ms/strings.xml | 1 - .../dialer/notification/res/values-my/strings.xml | 1 - .../dialer/notification/res/values-nb/strings.xml | 1 - .../dialer/notification/res/values-ne/strings.xml | 1 - .../dialer/notification/res/values-nl/strings.xml | 1 - .../dialer/notification/res/values-no/strings.xml | 1 - .../dialer/notification/res/values-pa/strings.xml | 1 - .../dialer/notification/res/values-pl/strings.xml | 1 - .../notification/res/values-pt-rBR/strings.xml | 1 - .../notification/res/values-pt-rPT/strings.xml | 1 - .../dialer/notification/res/values-pt/strings.xml | 1 - .../dialer/notification/res/values-ro/strings.xml | 1 - .../dialer/notification/res/values-ru/strings.xml | 1 - .../dialer/notification/res/values-si/strings.xml | 1 - .../dialer/notification/res/values-sk/strings.xml | 1 - .../dialer/notification/res/values-sl/strings.xml | 1 - .../dialer/notification/res/values-sq/strings.xml | 1 - .../dialer/notification/res/values-sr/strings.xml | 1 - .../dialer/notification/res/values-sv/strings.xml | 1 - .../dialer/notification/res/values-sw/strings.xml | 1 - .../dialer/notification/res/values-ta/strings.xml | 1 - .../dialer/notification/res/values-te/strings.xml | 1 - .../dialer/notification/res/values-th/strings.xml | 1 - .../dialer/notification/res/values-tl/strings.xml | 1 - .../dialer/notification/res/values-tr/strings.xml | 1 - .../dialer/notification/res/values-uk/strings.xml | 1 - .../dialer/notification/res/values-ur/strings.xml | 1 - .../dialer/notification/res/values-uz/strings.xml | 1 - .../dialer/notification/res/values-vi/strings.xml | 1 - .../notification/res/values-zh-rCN/strings.xml | 1 - .../notification/res/values-zh-rHK/strings.xml | 1 - .../notification/res/values-zh-rTW/strings.xml | 1 - .../dialer/notification/res/values-zu/strings.xml | 1 - .../android/dialer/notification/res/values/ids.xml | 27 - .../dialer/notification/res/values/strings.xml | 1 - .../android/dialer/oem/CequintCallerIdManager.java | 100 +-- .../dialer/oem/MotorolaHiddenMenuKeySequence.java | 4 +- java/com/android/dialer/oem/MotorolaUtils.java | 27 +- .../res/values-mcc310-mnc000/motorola_config.xml | 17 +- .../res/values-mcc310-mnc120/motorola_config.xml | 17 +- .../res/values-mcc311-mnc490/motorola_config.xml | 17 +- .../res/values-mcc311-mnc870/motorola_config.xml | 17 +- .../res/values-mcc312-mnc530/motorola_config.xml | 17 +- .../res/values-mcc316-mnc010/motorola_config.xml | 17 +- .../dialer/oem/res/values/motorola_config.xml | 19 +- .../android/dialer/p13n/inference/P13nRanking.java | 2 +- .../performancereport/PerformanceReport.java | 155 +++++ .../CachedNumberLookupService.java | 2 + .../dialer/phonenumbercache/ContactInfo.java | 4 +- .../dialer/phonenumbercache/ContactInfoHelper.java | 35 +- .../android/dialer/phonenumberproto/Converter.java | 120 ++++ .../phonenumberproto/DialerPhoneNumberUtil.java | 108 +++ .../phonenumberproto/dialer_phone_number.proto | 172 +++++ .../android/dialer/postcall/AndroidManifest.xml | 2 +- java/com/android/dialer/postcall/PostCall.java | 38 +- java/com/android/dialer/protos/ProtoParsers.java | 125 +--- java/com/android/dialer/searchfragment/README.md | 62 ++ .../searchfragment/common/AndroidManifest.xml | 16 + .../dialer/searchfragment/common/Projections.java | 50 ++ .../searchfragment/common/QueryBoldingUtil.java | 154 +++++ .../searchfragment/common/QueryFilteringUtil.java | 141 ++++ .../common/res/layout/search_contact_row.xml | 69 ++ .../searchfragment/common/res/values/dimens.xml | 23 + .../searchfragment/cp2/SearchContactCursor.java | 392 +++++++++++ .../cp2/SearchContactViewHolder.java | 204 ++++++ .../cp2/SearchContactsCursorLoader.java | 42 ++ .../dialer/searchfragment/list/AndroidManifest.xml | 16 + .../searchfragment/list/HeaderViewHolder.java | 36 + .../searchfragment/list/NewSearchFragment.java | 125 ++++ .../dialer/searchfragment/list/SearchAdapter.java | 108 +++ .../searchfragment/list/SearchCursorManager.java | 273 ++++++++ .../list/res/layout/fragment_search.xml | 21 + .../list/res/layout/header_layout.xml | 22 + .../nearbyplaces/AndroidManifest.xml | 16 + .../nearbyplaces/NearbyPlaceViewHolder.java | 90 +++ .../nearbyplaces/NearbyPlacesCursorLoader.java | 43 ++ .../nearbyplaces/res/values-af/strings.xml | 21 + .../nearbyplaces/res/values-am/strings.xml | 22 + .../nearbyplaces/res/values-ar/strings.xml | 21 + .../nearbyplaces/res/values-az/strings.xml | 22 + .../nearbyplaces/res/values-b+sr+Latn/strings.xml | 21 + .../nearbyplaces/res/values-be/strings.xml | 22 + .../nearbyplaces/res/values-bg/strings.xml | 21 + .../nearbyplaces/res/values-bn/strings.xml | 21 + .../nearbyplaces/res/values-bs/strings.xml | 21 + .../nearbyplaces/res/values-ca/strings.xml | 22 + .../nearbyplaces/res/values-cs/strings.xml | 22 + .../nearbyplaces/res/values-da/strings.xml | 22 + .../nearbyplaces/res/values-de/strings.xml | 21 + .../nearbyplaces/res/values-el/strings.xml | 22 + .../nearbyplaces/res/values-en-rAU/strings.xml | 21 + .../nearbyplaces/res/values-en-rGB/strings.xml | 21 + .../nearbyplaces/res/values-en-rIN/strings.xml | 21 + .../nearbyplaces/res/values-es-rUS/strings.xml | 22 + .../nearbyplaces/res/values-es/strings.xml | 21 + .../nearbyplaces/res/values-et/strings.xml | 22 + .../nearbyplaces/res/values-eu/strings.xml | 22 + .../nearbyplaces/res/values-fa/strings.xml | 22 + .../nearbyplaces/res/values-fi/strings.xml | 22 + .../nearbyplaces/res/values-fr-rCA/strings.xml | 21 + .../nearbyplaces/res/values-fr/strings.xml | 21 + .../nearbyplaces/res/values-gl/strings.xml | 21 + .../nearbyplaces/res/values-gu/strings.xml | 21 + .../nearbyplaces/res/values-hi/strings.xml | 21 + .../nearbyplaces/res/values-hr/strings.xml | 22 + .../nearbyplaces/res/values-hu/strings.xml | 22 + .../nearbyplaces/res/values-hy/strings.xml | 21 + .../nearbyplaces/res/values-in/strings.xml | 22 + .../nearbyplaces/res/values-is/strings.xml | 22 + .../nearbyplaces/res/values-it/strings.xml | 22 + .../nearbyplaces/res/values-iw/strings.xml | 21 + .../nearbyplaces/res/values-ja/strings.xml | 22 + .../nearbyplaces/res/values-ka/strings.xml | 22 + .../nearbyplaces/res/values-kk/strings.xml | 22 + .../nearbyplaces/res/values-km/strings.xml | 22 + .../nearbyplaces/res/values-kn/strings.xml | 22 + .../nearbyplaces/res/values-ko/strings.xml | 21 + .../nearbyplaces/res/values-ky/strings.xml | 22 + .../nearbyplaces/res/values-lo/strings.xml | 21 + .../nearbyplaces/res/values-lt/strings.xml | 21 + .../nearbyplaces/res/values-lv/strings.xml | 22 + .../nearbyplaces/res/values-mk/strings.xml | 22 + .../nearbyplaces/res/values-ml/strings.xml | 22 + .../nearbyplaces/res/values-mn/strings.xml | 21 + .../nearbyplaces/res/values-mr/strings.xml | 21 + .../nearbyplaces/res/values-ms/strings.xml | 21 + .../nearbyplaces/res/values-my/strings.xml | 21 + .../nearbyplaces/res/values-nb/strings.xml | 22 + .../nearbyplaces/res/values-ne/strings.xml | 21 + .../nearbyplaces/res/values-nl/strings.xml | 22 + .../nearbyplaces/res/values-no/strings.xml | 22 + .../nearbyplaces/res/values-pa/strings.xml | 21 + .../nearbyplaces/res/values-pl/strings.xml | 21 + .../nearbyplaces/res/values-pt-rBR/strings.xml | 22 + .../nearbyplaces/res/values-pt-rPT/strings.xml | 22 + .../nearbyplaces/res/values-pt/strings.xml | 22 + .../nearbyplaces/res/values-ro/strings.xml | 22 + .../nearbyplaces/res/values-ru/strings.xml | 22 + .../nearbyplaces/res/values-si/strings.xml | 22 + .../nearbyplaces/res/values-sk/strings.xml | 22 + .../nearbyplaces/res/values-sl/strings.xml | 22 + .../nearbyplaces/res/values-sq/strings.xml | 22 + .../nearbyplaces/res/values-sr/strings.xml | 21 + .../nearbyplaces/res/values-sv/strings.xml | 21 + .../nearbyplaces/res/values-sw/strings.xml | 22 + .../nearbyplaces/res/values-ta/strings.xml | 21 + .../nearbyplaces/res/values-te/strings.xml | 21 + .../nearbyplaces/res/values-th/strings.xml | 21 + .../nearbyplaces/res/values-tl/strings.xml | 22 + .../nearbyplaces/res/values-tr/strings.xml | 22 + .../nearbyplaces/res/values-uk/strings.xml | 21 + .../nearbyplaces/res/values-ur/strings.xml | 21 + .../nearbyplaces/res/values-uz/strings.xml | 22 + .../nearbyplaces/res/values-vi/strings.xml | 22 + .../nearbyplaces/res/values-zh-rCN/strings.xml | 21 + .../nearbyplaces/res/values-zh-rHK/strings.xml | 21 + .../nearbyplaces/res/values-zh-rTW/strings.xml | 22 + .../nearbyplaces/res/values-zu/strings.xml | 22 + .../nearbyplaces/res/values/strings.xml | 20 + .../android/dialer/shortcuts/AndroidManifest.xml | 2 +- java/com/android/dialer/shortcuts/Shortcuts.java | 2 +- .../dialer/simulator/impl/SimulatorContacts.java | 2 +- java/com/android/dialer/telecom/TelecomUtil.java | 110 +-- .../android/dialer/theme/res/values-af/strings.xml | 2 + .../android/dialer/theme/res/values-am/strings.xml | 2 + .../android/dialer/theme/res/values-ar/strings.xml | 2 + .../android/dialer/theme/res/values-az/strings.xml | 2 + .../dialer/theme/res/values-b+sr+Latn/strings.xml | 2 + .../android/dialer/theme/res/values-be/strings.xml | 2 + .../android/dialer/theme/res/values-bg/strings.xml | 2 + .../android/dialer/theme/res/values-bn/strings.xml | 2 + .../android/dialer/theme/res/values-bs/strings.xml | 2 + .../android/dialer/theme/res/values-ca/strings.xml | 2 + .../android/dialer/theme/res/values-cs/strings.xml | 2 + .../android/dialer/theme/res/values-da/strings.xml | 2 + .../android/dialer/theme/res/values-de/strings.xml | 2 + .../android/dialer/theme/res/values-el/strings.xml | 2 + .../dialer/theme/res/values-en-rAU/strings.xml | 2 + .../dialer/theme/res/values-en-rGB/strings.xml | 2 + .../dialer/theme/res/values-en-rIN/strings.xml | 2 + .../dialer/theme/res/values-es-rUS/strings.xml | 2 + .../android/dialer/theme/res/values-es/strings.xml | 2 + .../android/dialer/theme/res/values-et/strings.xml | 2 + .../android/dialer/theme/res/values-eu/strings.xml | 2 + .../android/dialer/theme/res/values-fa/strings.xml | 2 + .../android/dialer/theme/res/values-fi/strings.xml | 2 + .../dialer/theme/res/values-fr-rCA/strings.xml | 2 + .../android/dialer/theme/res/values-fr/strings.xml | 2 + .../android/dialer/theme/res/values-gl/strings.xml | 2 + .../android/dialer/theme/res/values-gu/strings.xml | 2 + .../android/dialer/theme/res/values-hi/strings.xml | 2 + .../android/dialer/theme/res/values-hr/strings.xml | 2 + .../android/dialer/theme/res/values-hu/strings.xml | 2 + .../android/dialer/theme/res/values-hy/strings.xml | 2 + .../android/dialer/theme/res/values-in/strings.xml | 2 + .../android/dialer/theme/res/values-is/strings.xml | 2 + .../android/dialer/theme/res/values-it/strings.xml | 2 + .../android/dialer/theme/res/values-iw/strings.xml | 2 + .../android/dialer/theme/res/values-ja/strings.xml | 2 + .../android/dialer/theme/res/values-ka/strings.xml | 2 + .../android/dialer/theme/res/values-kk/strings.xml | 2 + .../android/dialer/theme/res/values-km/strings.xml | 2 + .../android/dialer/theme/res/values-kn/strings.xml | 2 + .../android/dialer/theme/res/values-ko/strings.xml | 2 + .../android/dialer/theme/res/values-ky/strings.xml | 2 + .../android/dialer/theme/res/values-lo/strings.xml | 2 + .../android/dialer/theme/res/values-lt/strings.xml | 2 + .../android/dialer/theme/res/values-lv/strings.xml | 2 + .../android/dialer/theme/res/values-mk/strings.xml | 2 + .../android/dialer/theme/res/values-ml/strings.xml | 2 + .../android/dialer/theme/res/values-mn/strings.xml | 2 + .../android/dialer/theme/res/values-mr/strings.xml | 2 + .../android/dialer/theme/res/values-ms/strings.xml | 2 + .../android/dialer/theme/res/values-my/strings.xml | 2 + .../android/dialer/theme/res/values-nb/strings.xml | 2 + .../android/dialer/theme/res/values-ne/strings.xml | 2 + .../android/dialer/theme/res/values-nl/strings.xml | 2 + .../android/dialer/theme/res/values-no/strings.xml | 2 + .../android/dialer/theme/res/values-pa/strings.xml | 2 + .../android/dialer/theme/res/values-pl/strings.xml | 2 + .../dialer/theme/res/values-pt-rBR/strings.xml | 2 + .../dialer/theme/res/values-pt-rPT/strings.xml | 2 + .../android/dialer/theme/res/values-pt/strings.xml | 2 + .../android/dialer/theme/res/values-ro/strings.xml | 2 + .../android/dialer/theme/res/values-ru/strings.xml | 2 + .../android/dialer/theme/res/values-si/strings.xml | 2 + .../android/dialer/theme/res/values-sk/strings.xml | 2 + .../android/dialer/theme/res/values-sl/strings.xml | 2 + .../android/dialer/theme/res/values-sq/strings.xml | 2 + .../android/dialer/theme/res/values-sr/strings.xml | 2 + .../android/dialer/theme/res/values-sv/strings.xml | 2 + .../android/dialer/theme/res/values-sw/strings.xml | 2 + .../android/dialer/theme/res/values-ta/strings.xml | 2 + .../android/dialer/theme/res/values-te/strings.xml | 2 + .../android/dialer/theme/res/values-th/strings.xml | 2 + .../android/dialer/theme/res/values-tl/strings.xml | 2 + .../android/dialer/theme/res/values-tr/strings.xml | 2 + .../android/dialer/theme/res/values-uk/strings.xml | 2 + .../android/dialer/theme/res/values-ur/strings.xml | 2 + .../android/dialer/theme/res/values-uz/strings.xml | 2 + .../android/dialer/theme/res/values-vi/strings.xml | 2 + .../dialer/theme/res/values-zh-rCN/strings.xml | 2 + .../dialer/theme/res/values-zh-rHK/strings.xml | 2 + .../dialer/theme/res/values-zh-rTW/strings.xml | 2 + .../android/dialer/theme/res/values-zu/strings.xml | 2 + .../android/dialer/theme/res/values/strings.xml | 6 + .../com/android/dialer/theme/res/values/themes.xml | 43 ++ java/com/android/dialer/util/CallUtil.java | 22 +- java/com/android/dialer/util/PermissionsUtil.java | 60 ++ java/com/android/dialer/widget/DialerToolbar.java | 5 + .../android/dialer/widget/EmptyContentView.java | 127 ++++ .../android/dialer/widget/LockableViewPager.java | 50 ++ .../com/android/dialer/widget/MessageFragment.java | 29 +- .../widget/res/drawable-hdpi/empty_contacts.png | Bin 0 -> 2461 bytes .../widget/res/drawable-mdpi/empty_contacts.png | Bin 0 -> 1778 bytes .../widget/res/drawable-xhdpi/empty_contacts.png | Bin 0 -> 3352 bytes .../widget/res/drawable-xxhdpi/empty_contacts.png | Bin 0 -> 3686 bytes .../widget/res/drawable-xxxhdpi/empty_contacts.png | Bin 0 -> 5204 bytes .../widget/res/layout-land/empty_content_view.xml | 56 ++ .../dialer/widget/res/layout/dialer_toolbar.xml | 8 +- .../widget/res/layout/empty_content_view.xml | 54 ++ .../dialer/widget/res/layout/fragment_message.xml | 4 +- .../dialer/widget/res/values-af/strings.xml | 21 + .../dialer/widget/res/values-am/strings.xml | 22 + .../dialer/widget/res/values-ar/strings.xml | 21 + .../dialer/widget/res/values-az/strings.xml | 22 + .../dialer/widget/res/values-b+sr+Latn/strings.xml | 21 + .../dialer/widget/res/values-be/strings.xml | 22 + .../dialer/widget/res/values-bg/strings.xml | 21 + .../dialer/widget/res/values-bn/strings.xml | 21 + .../dialer/widget/res/values-bs/strings.xml | 21 + .../dialer/widget/res/values-ca/strings.xml | 22 + .../dialer/widget/res/values-cs/strings.xml | 22 + .../dialer/widget/res/values-da/strings.xml | 22 + .../dialer/widget/res/values-de/strings.xml | 21 + .../dialer/widget/res/values-el/strings.xml | 22 + .../dialer/widget/res/values-en-rAU/strings.xml | 21 + .../dialer/widget/res/values-en-rGB/strings.xml | 21 + .../dialer/widget/res/values-en-rIN/strings.xml | 21 + .../dialer/widget/res/values-es-rUS/strings.xml | 22 + .../dialer/widget/res/values-es/strings.xml | 21 + .../dialer/widget/res/values-et/strings.xml | 22 + .../dialer/widget/res/values-eu/strings.xml | 22 + .../dialer/widget/res/values-fa/strings.xml | 22 + .../dialer/widget/res/values-fi/strings.xml | 22 + .../dialer/widget/res/values-fr-rCA/strings.xml | 21 + .../dialer/widget/res/values-fr/strings.xml | 21 + .../dialer/widget/res/values-gl/strings.xml | 21 + .../dialer/widget/res/values-gu/strings.xml | 21 + .../dialer/widget/res/values-hi/strings.xml | 21 + .../dialer/widget/res/values-hr/strings.xml | 22 + .../dialer/widget/res/values-hu/strings.xml | 22 + .../dialer/widget/res/values-hy/strings.xml | 21 + .../dialer/widget/res/values-in/strings.xml | 22 + .../dialer/widget/res/values-is/strings.xml | 22 + .../dialer/widget/res/values-it/strings.xml | 22 + .../dialer/widget/res/values-iw/strings.xml | 21 + .../dialer/widget/res/values-ja/strings.xml | 22 + .../dialer/widget/res/values-ka/strings.xml | 22 + .../dialer/widget/res/values-kk/strings.xml | 22 + .../dialer/widget/res/values-km/strings.xml | 22 + .../dialer/widget/res/values-kn/strings.xml | 22 + .../dialer/widget/res/values-ko/strings.xml | 21 + .../dialer/widget/res/values-ky/strings.xml | 22 + .../dialer/widget/res/values-lo/strings.xml | 21 + .../dialer/widget/res/values-lt/strings.xml | 21 + .../dialer/widget/res/values-lv/strings.xml | 22 + .../dialer/widget/res/values-mk/strings.xml | 22 + .../dialer/widget/res/values-ml/strings.xml | 22 + .../dialer/widget/res/values-mn/strings.xml | 21 + .../dialer/widget/res/values-mr/strings.xml | 21 + .../dialer/widget/res/values-ms/strings.xml | 21 + .../dialer/widget/res/values-my/strings.xml | 21 + .../dialer/widget/res/values-nb/strings.xml | 22 + .../dialer/widget/res/values-ne/strings.xml | 21 + .../dialer/widget/res/values-nl/strings.xml | 22 + .../dialer/widget/res/values-no/strings.xml | 22 + .../dialer/widget/res/values-pa/strings.xml | 21 + .../dialer/widget/res/values-pl/strings.xml | 21 + .../dialer/widget/res/values-pt-rBR/strings.xml | 22 + .../dialer/widget/res/values-pt-rPT/strings.xml | 22 + .../dialer/widget/res/values-pt/strings.xml | 22 + .../dialer/widget/res/values-ro/strings.xml | 22 + .../dialer/widget/res/values-ru/strings.xml | 22 + .../dialer/widget/res/values-si/strings.xml | 22 + .../dialer/widget/res/values-sk/strings.xml | 22 + .../dialer/widget/res/values-sl/strings.xml | 22 + .../dialer/widget/res/values-sq/strings.xml | 22 + .../dialer/widget/res/values-sr/strings.xml | 21 + .../dialer/widget/res/values-sv/strings.xml | 21 + .../dialer/widget/res/values-sw/strings.xml | 22 + .../dialer/widget/res/values-ta/strings.xml | 21 + .../dialer/widget/res/values-te/strings.xml | 21 + .../dialer/widget/res/values-th/strings.xml | 21 + .../dialer/widget/res/values-tl/strings.xml | 22 + .../dialer/widget/res/values-tr/strings.xml | 22 + .../dialer/widget/res/values-uk/strings.xml | 21 + .../dialer/widget/res/values-ur/strings.xml | 21 + .../dialer/widget/res/values-uz/strings.xml | 22 + .../dialer/widget/res/values-vi/strings.xml | 22 + .../dialer/widget/res/values-zh-rCN/strings.xml | 21 + .../dialer/widget/res/values-zh-rHK/strings.xml | 21 + .../dialer/widget/res/values-zh-rTW/strings.xml | 22 + .../dialer/widget/res/values-zu/strings.xml | 22 + .../android/dialer/widget/res/values/colors.xml | 4 + .../android/dialer/widget/res/values/dimens.xml | 5 + .../android/dialer/widget/res/values/strings.xml | 30 + .../dialershared/bubble/AndroidManifest.xml | 22 + java/com/android/dialershared/bubble/Bubble.java | 767 +++++++++++++++++++++ .../android/dialershared/bubble/BubbleInfo.java | 123 ++++ .../dialershared/bubble/ChangeOnScreenBounds.java | 166 +++++ .../dialershared/bubble/CheckableImageButton.java | 101 +++ .../android/dialershared/bubble/MoveHandler.java | 264 +++++++ .../android/dialershared/bubble/WindowRoot.java | 55 ++ .../dialershared/bubble/g3doc/INTEGRATION.md | 69 ++ .../bubble/g3doc/images/bubble_collapsed.png | Bin 0 -> 60187 bytes .../bubble/g3doc/images/bubble_expanded.png | Bin 0 -> 79674 bytes .../bubble/g3doc/images/bubble_state.png | Bin 0 -> 83470 bytes .../bubble/g3doc/images/bubble_text.png | Bin 0 -> 65641 bytes .../bubble/res/color/bubble_checkable_mask.xml | 21 + .../bubble/res/color/bubble_icon_tint_states.xml | 21 + .../res/drawable/bubble_background_pill_ltr.xml | 23 + .../res/drawable/bubble_background_pill_rtl.xml | 23 + .../drawable/bubble_ripple_checkable_circle.xml | 30 + .../bubble/res/drawable/bubble_ripple_circle.xml | 26 + .../dialershared/bubble/res/layout/bubble_base.xml | 127 ++++ .../dialershared/bubble/res/values/colors.xml | 20 + .../dialershared/bubble/res/values/values.xml | 25 + java/com/android/incallui/AndroidManifest.xml | 110 +-- .../android/incallui/AnswerScreenPresenter.java | 59 +- .../incallui/AnswerScreenPresenterStub.java | 11 + .../incallui/AudioRouteSelectorActivity.java | 47 ++ java/com/android/incallui/CallButtonPresenter.java | 34 +- java/com/android/incallui/CallCardPresenter.java | 101 +-- java/com/android/incallui/CallerInfoUtils.java | 7 + java/com/android/incallui/ContactInfoCache.java | 30 +- .../com/android/incallui/ExternalCallNotifier.java | 52 +- java/com/android/incallui/InCallActivity.java | 31 +- java/com/android/incallui/InCallPresenter.java | 12 +- java/com/android/incallui/InCallServiceImpl.java | 9 + .../incallui/ReturnToCallActionReceiver.java | 132 ++++ .../android/incallui/ReturnToCallController.java | 212 ++++++ java/com/android/incallui/StatusBarNotifier.java | 118 ++-- java/com/android/incallui/VideoCallPresenter.java | 2 +- .../incallui/answer/impl/AnswerFragment.java | 16 +- .../android/incallui/answer/impl/PillDrawable.java | 43 -- .../res/layout/swipe_up_down_method.xml | 3 + .../classifier/HumanInteractionClassifier.java | 2 +- .../answer/impl/hint/AnswerHintFactory.java | 34 +- .../answer/impl/hint/PawImageLoaderImpl.java | 25 +- .../answer/impl/hint/PawSecretCodeListener.java | 49 +- .../incallui/answer/impl/res/values-af/strings.xml | 18 +- .../incallui/answer/impl/res/values-am/strings.xml | 18 +- .../incallui/answer/impl/res/values-ar/strings.xml | 18 +- .../incallui/answer/impl/res/values-az/strings.xml | 18 +- .../answer/impl/res/values-b+sr+Latn/strings.xml | 18 +- .../incallui/answer/impl/res/values-be/strings.xml | 18 +- .../incallui/answer/impl/res/values-bg/strings.xml | 18 +- .../incallui/answer/impl/res/values-bn/strings.xml | 18 +- .../incallui/answer/impl/res/values-bs/strings.xml | 18 +- .../incallui/answer/impl/res/values-ca/strings.xml | 18 +- .../incallui/answer/impl/res/values-cs/strings.xml | 18 +- .../incallui/answer/impl/res/values-da/strings.xml | 18 +- .../incallui/answer/impl/res/values-de/strings.xml | 18 +- .../incallui/answer/impl/res/values-el/strings.xml | 18 +- .../answer/impl/res/values-en-rAU/strings.xml | 18 +- .../answer/impl/res/values-en-rGB/strings.xml | 18 +- .../answer/impl/res/values-en-rIN/strings.xml | 18 +- .../answer/impl/res/values-es-rUS/strings.xml | 18 +- .../incallui/answer/impl/res/values-es/strings.xml | 18 +- .../incallui/answer/impl/res/values-et/strings.xml | 18 +- .../incallui/answer/impl/res/values-eu/strings.xml | 18 +- .../incallui/answer/impl/res/values-fa/strings.xml | 18 +- .../incallui/answer/impl/res/values-fi/strings.xml | 18 +- .../answer/impl/res/values-fr-rCA/strings.xml | 18 +- .../incallui/answer/impl/res/values-fr/strings.xml | 18 +- .../incallui/answer/impl/res/values-gl/strings.xml | 18 +- .../incallui/answer/impl/res/values-gu/strings.xml | 18 +- .../incallui/answer/impl/res/values-hi/strings.xml | 18 +- .../incallui/answer/impl/res/values-hr/strings.xml | 18 +- .../incallui/answer/impl/res/values-hu/strings.xml | 18 +- .../incallui/answer/impl/res/values-hy/strings.xml | 18 +- .../incallui/answer/impl/res/values-in/strings.xml | 18 +- .../incallui/answer/impl/res/values-is/strings.xml | 18 +- .../incallui/answer/impl/res/values-it/strings.xml | 18 +- .../incallui/answer/impl/res/values-iw/strings.xml | 18 +- .../incallui/answer/impl/res/values-ja/strings.xml | 18 +- .../incallui/answer/impl/res/values-ka/strings.xml | 18 +- .../incallui/answer/impl/res/values-kk/strings.xml | 18 +- .../incallui/answer/impl/res/values-km/strings.xml | 18 +- .../incallui/answer/impl/res/values-kn/strings.xml | 18 +- .../incallui/answer/impl/res/values-ko/strings.xml | 18 +- .../incallui/answer/impl/res/values-ky/strings.xml | 18 +- .../incallui/answer/impl/res/values-lo/strings.xml | 18 +- .../incallui/answer/impl/res/values-lt/strings.xml | 18 +- .../incallui/answer/impl/res/values-lv/strings.xml | 18 +- .../incallui/answer/impl/res/values-mk/strings.xml | 18 +- .../incallui/answer/impl/res/values-ml/strings.xml | 18 +- .../incallui/answer/impl/res/values-mn/strings.xml | 18 +- .../incallui/answer/impl/res/values-mr/strings.xml | 18 +- .../incallui/answer/impl/res/values-ms/strings.xml | 18 +- .../incallui/answer/impl/res/values-my/strings.xml | 18 +- .../incallui/answer/impl/res/values-nb/strings.xml | 18 +- .../incallui/answer/impl/res/values-ne/strings.xml | 18 +- .../incallui/answer/impl/res/values-nl/strings.xml | 18 +- .../incallui/answer/impl/res/values-no/strings.xml | 18 +- .../incallui/answer/impl/res/values-pa/strings.xml | 18 +- .../incallui/answer/impl/res/values-pl/strings.xml | 18 +- .../answer/impl/res/values-pt-rBR/strings.xml | 18 +- .../answer/impl/res/values-pt-rPT/strings.xml | 18 +- .../incallui/answer/impl/res/values-pt/strings.xml | 18 +- .../incallui/answer/impl/res/values-ro/strings.xml | 18 +- .../incallui/answer/impl/res/values-ru/strings.xml | 18 +- .../incallui/answer/impl/res/values-si/strings.xml | 18 +- .../incallui/answer/impl/res/values-sk/strings.xml | 18 +- .../incallui/answer/impl/res/values-sl/strings.xml | 18 +- .../incallui/answer/impl/res/values-sq/strings.xml | 18 +- .../incallui/answer/impl/res/values-sr/strings.xml | 18 +- .../incallui/answer/impl/res/values-sv/strings.xml | 18 +- .../incallui/answer/impl/res/values-sw/strings.xml | 18 +- .../incallui/answer/impl/res/values-ta/strings.xml | 18 +- .../incallui/answer/impl/res/values-te/strings.xml | 18 +- .../incallui/answer/impl/res/values-th/strings.xml | 18 +- .../incallui/answer/impl/res/values-tl/strings.xml | 18 +- .../incallui/answer/impl/res/values-tr/strings.xml | 18 +- .../incallui/answer/impl/res/values-uk/strings.xml | 18 +- .../incallui/answer/impl/res/values-ur/strings.xml | 18 +- .../incallui/answer/impl/res/values-uz/strings.xml | 18 +- .../incallui/answer/impl/res/values-vi/strings.xml | 18 +- .../answer/impl/res/values-zh-rCN/strings.xml | 18 +- .../answer/impl/res/values-zh-rHK/strings.xml | 18 +- .../answer/impl/res/values-zh-rTW/strings.xml | 18 +- .../incallui/answer/impl/res/values-zu/strings.xml | 18 +- .../incallui/answer/impl/res/values/strings.xml | 17 +- .../incallui/answer/protocol/AnswerScreen.java | 2 + .../answer/protocol/AnswerScreenDelegate.java | 7 + .../AnswerProximitySensor.java | 5 +- .../AudioRouteSelectorDialogFragment.java | 11 + .../incallui/bindings/InCallUiBindings.java | 9 - .../incallui/bindings/InCallUiBindingsStub.java | 38 - java/com/android/incallui/call/CallList.java | 18 +- java/com/android/incallui/call/DialerCall.java | 138 +++- .../android/incallui/call/DialerCallListener.java | 2 + java/com/android/incallui/call/TelecomAdapter.java | 8 +- .../calllocation/impl/DownloadMapImageTask.java | 1 + .../incallui/calllocation/impl/LocationHelper.java | 7 + .../calllocation/impl/ReverseGeocodeTask.java | 1 + .../calllocation/impl/TrafficStatsTags.java | 29 - .../incallui/commontheme/res/anim/blinking.xml | 10 - .../drawable-hdpi/ic_phone_audio_white_36dp.png | Bin 1010 -> 0 bytes .../drawable-mdpi/ic_phone_audio_white_36dp.png | Bin 682 -> 0 bytes .../drawable-xhdpi/ic_phone_audio_white_36dp.png | Bin 1362 -> 0 bytes .../drawable-xxhdpi/ic_phone_audio_white_36dp.png | Bin 2259 -> 0 bytes .../drawable-xxxhdpi/ic_phone_audio_white_36dp.png | Bin 3156 -> 0 bytes .../incallui/commontheme/res/values-af/strings.xml | 18 + .../incallui/commontheme/res/values-am/strings.xml | 18 + .../incallui/commontheme/res/values-ar/strings.xml | 18 + .../incallui/commontheme/res/values-az/strings.xml | 18 + .../commontheme/res/values-b+sr+Latn/strings.xml | 18 + .../incallui/commontheme/res/values-be/strings.xml | 18 + .../incallui/commontheme/res/values-bg/strings.xml | 18 + .../incallui/commontheme/res/values-bn/strings.xml | 18 + .../incallui/commontheme/res/values-bs/strings.xml | 18 + .../incallui/commontheme/res/values-ca/strings.xml | 18 + .../incallui/commontheme/res/values-cs/strings.xml | 18 + .../incallui/commontheme/res/values-da/strings.xml | 18 + .../incallui/commontheme/res/values-de/strings.xml | 18 + .../incallui/commontheme/res/values-el/strings.xml | 18 + .../commontheme/res/values-en-rAU/strings.xml | 18 + .../commontheme/res/values-en-rGB/strings.xml | 18 + .../commontheme/res/values-en-rIN/strings.xml | 18 + .../commontheme/res/values-es-rUS/strings.xml | 18 + .../incallui/commontheme/res/values-es/strings.xml | 18 + .../incallui/commontheme/res/values-et/strings.xml | 18 + .../incallui/commontheme/res/values-eu/strings.xml | 18 + .../incallui/commontheme/res/values-fa/strings.xml | 18 + .../incallui/commontheme/res/values-fi/strings.xml | 18 + .../commontheme/res/values-fr-rCA/strings.xml | 18 + .../incallui/commontheme/res/values-fr/strings.xml | 18 + .../incallui/commontheme/res/values-gl/strings.xml | 18 + .../incallui/commontheme/res/values-gu/strings.xml | 18 + .../incallui/commontheme/res/values-hi/strings.xml | 18 + .../incallui/commontheme/res/values-hr/strings.xml | 18 + .../incallui/commontheme/res/values-hu/strings.xml | 18 + .../incallui/commontheme/res/values-hy/strings.xml | 18 + .../incallui/commontheme/res/values-in/strings.xml | 18 + .../incallui/commontheme/res/values-is/strings.xml | 18 + .../incallui/commontheme/res/values-it/strings.xml | 18 + .../incallui/commontheme/res/values-iw/strings.xml | 18 + .../incallui/commontheme/res/values-ja/strings.xml | 18 + .../incallui/commontheme/res/values-ka/strings.xml | 18 + .../incallui/commontheme/res/values-kk/strings.xml | 18 + .../incallui/commontheme/res/values-km/strings.xml | 18 + .../incallui/commontheme/res/values-kn/strings.xml | 18 + .../incallui/commontheme/res/values-ko/strings.xml | 18 + .../incallui/commontheme/res/values-ky/strings.xml | 18 + .../incallui/commontheme/res/values-lo/strings.xml | 18 + .../incallui/commontheme/res/values-lt/strings.xml | 18 + .../incallui/commontheme/res/values-lv/strings.xml | 18 + .../incallui/commontheme/res/values-mk/strings.xml | 18 + .../incallui/commontheme/res/values-ml/strings.xml | 18 + .../incallui/commontheme/res/values-mn/strings.xml | 18 + .../incallui/commontheme/res/values-mr/strings.xml | 18 + .../incallui/commontheme/res/values-ms/strings.xml | 18 + .../incallui/commontheme/res/values-my/strings.xml | 18 + .../incallui/commontheme/res/values-nb/strings.xml | 18 + .../incallui/commontheme/res/values-ne/strings.xml | 18 + .../incallui/commontheme/res/values-nl/strings.xml | 18 + .../incallui/commontheme/res/values-no/strings.xml | 18 + .../incallui/commontheme/res/values-pa/strings.xml | 18 + .../incallui/commontheme/res/values-pl/strings.xml | 18 + .../commontheme/res/values-pt-rBR/strings.xml | 18 + .../commontheme/res/values-pt-rPT/strings.xml | 18 + .../incallui/commontheme/res/values-pt/strings.xml | 18 + .../incallui/commontheme/res/values-ro/strings.xml | 18 + .../incallui/commontheme/res/values-ru/strings.xml | 18 + .../incallui/commontheme/res/values-si/strings.xml | 18 + .../incallui/commontheme/res/values-sk/strings.xml | 18 + .../incallui/commontheme/res/values-sl/strings.xml | 18 + .../incallui/commontheme/res/values-sq/strings.xml | 18 + .../incallui/commontheme/res/values-sr/strings.xml | 18 + .../incallui/commontheme/res/values-sv/strings.xml | 18 + .../incallui/commontheme/res/values-sw/strings.xml | 18 + .../incallui/commontheme/res/values-ta/strings.xml | 18 + .../incallui/commontheme/res/values-te/strings.xml | 18 + .../incallui/commontheme/res/values-th/strings.xml | 18 + .../incallui/commontheme/res/values-tl/strings.xml | 18 + .../incallui/commontheme/res/values-tr/strings.xml | 18 + .../incallui/commontheme/res/values-uk/strings.xml | 18 + .../incallui/commontheme/res/values-ur/strings.xml | 18 + .../incallui/commontheme/res/values-uz/strings.xml | 18 + .../incallui/commontheme/res/values-vi/strings.xml | 18 + .../commontheme/res/values-zh-rCN/strings.xml | 18 + .../commontheme/res/values-zh-rHK/strings.xml | 18 + .../commontheme/res/values-zh-rTW/strings.xml | 18 + .../incallui/commontheme/res/values-zu/strings.xml | 18 + .../incallui/commontheme/res/values/strings.xml | 22 + .../android/incallui/contactgrid/BottomRow.java | 3 +- .../incallui/contactgrid/ContactGridManager.java | 50 +- java/com/android/incallui/contactgrid/TopRow.java | 52 +- .../incallui/contactgrid/res/values-af/strings.xml | 18 + .../incallui/contactgrid/res/values-am/strings.xml | 18 + .../incallui/contactgrid/res/values-ar/strings.xml | 18 + .../incallui/contactgrid/res/values-az/strings.xml | 18 + .../contactgrid/res/values-b+sr+Latn/strings.xml | 18 + .../incallui/contactgrid/res/values-be/strings.xml | 18 + .../incallui/contactgrid/res/values-bg/strings.xml | 18 + .../incallui/contactgrid/res/values-bn/strings.xml | 18 + .../incallui/contactgrid/res/values-bs/strings.xml | 18 + .../incallui/contactgrid/res/values-ca/strings.xml | 18 + .../incallui/contactgrid/res/values-cs/strings.xml | 18 + .../incallui/contactgrid/res/values-da/strings.xml | 18 + .../incallui/contactgrid/res/values-de/strings.xml | 18 + .../incallui/contactgrid/res/values-el/strings.xml | 18 + .../contactgrid/res/values-en-rAU/strings.xml | 18 + .../contactgrid/res/values-en-rGB/strings.xml | 18 + .../contactgrid/res/values-en-rIN/strings.xml | 18 + .../contactgrid/res/values-es-rUS/strings.xml | 18 + .../incallui/contactgrid/res/values-es/strings.xml | 18 + .../incallui/contactgrid/res/values-et/strings.xml | 18 + .../incallui/contactgrid/res/values-eu/strings.xml | 18 + .../incallui/contactgrid/res/values-fa/strings.xml | 18 + .../incallui/contactgrid/res/values-fi/strings.xml | 18 + .../contactgrid/res/values-fr-rCA/strings.xml | 18 + .../incallui/contactgrid/res/values-fr/strings.xml | 18 + .../incallui/contactgrid/res/values-gl/strings.xml | 18 + .../incallui/contactgrid/res/values-gu/strings.xml | 18 + .../incallui/contactgrid/res/values-hi/strings.xml | 18 + .../incallui/contactgrid/res/values-hr/strings.xml | 18 + .../incallui/contactgrid/res/values-hu/strings.xml | 18 + .../incallui/contactgrid/res/values-hy/strings.xml | 18 + .../incallui/contactgrid/res/values-in/strings.xml | 18 + .../incallui/contactgrid/res/values-is/strings.xml | 18 + .../incallui/contactgrid/res/values-it/strings.xml | 18 + .../incallui/contactgrid/res/values-iw/strings.xml | 18 + .../incallui/contactgrid/res/values-ja/strings.xml | 18 + .../incallui/contactgrid/res/values-ka/strings.xml | 18 + .../incallui/contactgrid/res/values-kk/strings.xml | 18 + .../incallui/contactgrid/res/values-km/strings.xml | 18 + .../incallui/contactgrid/res/values-kn/strings.xml | 18 + .../incallui/contactgrid/res/values-ko/strings.xml | 18 + .../incallui/contactgrid/res/values-ky/strings.xml | 18 + .../incallui/contactgrid/res/values-lo/strings.xml | 18 + .../incallui/contactgrid/res/values-lt/strings.xml | 18 + .../incallui/contactgrid/res/values-lv/strings.xml | 18 + .../incallui/contactgrid/res/values-mk/strings.xml | 18 + .../incallui/contactgrid/res/values-ml/strings.xml | 18 + .../incallui/contactgrid/res/values-mn/strings.xml | 18 + .../incallui/contactgrid/res/values-mr/strings.xml | 18 + .../incallui/contactgrid/res/values-ms/strings.xml | 18 + .../incallui/contactgrid/res/values-my/strings.xml | 18 + .../incallui/contactgrid/res/values-nb/strings.xml | 18 + .../incallui/contactgrid/res/values-ne/strings.xml | 18 + .../incallui/contactgrid/res/values-nl/strings.xml | 18 + .../incallui/contactgrid/res/values-no/strings.xml | 18 + .../incallui/contactgrid/res/values-pa/strings.xml | 18 + .../incallui/contactgrid/res/values-pl/strings.xml | 18 + .../contactgrid/res/values-pt-rBR/strings.xml | 18 + .../contactgrid/res/values-pt-rPT/strings.xml | 18 + .../incallui/contactgrid/res/values-pt/strings.xml | 18 + .../incallui/contactgrid/res/values-ro/strings.xml | 18 + .../incallui/contactgrid/res/values-ru/strings.xml | 18 + .../incallui/contactgrid/res/values-si/strings.xml | 18 + .../incallui/contactgrid/res/values-sk/strings.xml | 18 + .../incallui/contactgrid/res/values-sl/strings.xml | 18 + .../incallui/contactgrid/res/values-sq/strings.xml | 18 + .../incallui/contactgrid/res/values-sr/strings.xml | 18 + .../incallui/contactgrid/res/values-sv/strings.xml | 18 + .../incallui/contactgrid/res/values-sw/strings.xml | 18 + .../incallui/contactgrid/res/values-ta/strings.xml | 18 + .../incallui/contactgrid/res/values-te/strings.xml | 18 + .../incallui/contactgrid/res/values-th/strings.xml | 18 + .../incallui/contactgrid/res/values-tl/strings.xml | 18 + .../incallui/contactgrid/res/values-tr/strings.xml | 18 + .../incallui/contactgrid/res/values-uk/strings.xml | 18 + .../incallui/contactgrid/res/values-ur/strings.xml | 18 + .../incallui/contactgrid/res/values-uz/strings.xml | 18 + .../incallui/contactgrid/res/values-vi/strings.xml | 18 + .../contactgrid/res/values-zh-rCN/strings.xml | 18 + .../contactgrid/res/values-zh-rHK/strings.xml | 18 + .../contactgrid/res/values-zh-rTW/strings.xml | 18 + .../incallui/contactgrid/res/values-zu/strings.xml | 18 + .../incallui/contactgrid/res/values/strings.xml | 21 + .../incallui/incall/impl/ButtonChooserFactory.java | 15 +- .../incallui/incall/impl/ButtonController.java | 39 +- .../incallui/incall/impl/InCallFragment.java | 4 + .../incallui/incall/impl/InCallPagerAdapter.java | 4 +- .../incallui/incall/impl/LockableViewPager.java | 46 -- .../incall/impl/res/layout/frag_incall_voice.xml | 17 +- .../incallui/incall/impl/res/values-af/strings.xml | 19 +- .../incallui/incall/impl/res/values-am/strings.xml | 19 +- .../incallui/incall/impl/res/values-ar/strings.xml | 19 +- .../incallui/incall/impl/res/values-az/strings.xml | 19 +- .../incall/impl/res/values-b+sr+Latn/strings.xml | 19 +- .../incallui/incall/impl/res/values-be/strings.xml | 19 +- .../incallui/incall/impl/res/values-bg/strings.xml | 19 +- .../incallui/incall/impl/res/values-bn/strings.xml | 19 +- .../incallui/incall/impl/res/values-bs/strings.xml | 19 +- .../incallui/incall/impl/res/values-ca/strings.xml | 19 +- .../incallui/incall/impl/res/values-cs/strings.xml | 19 +- .../incallui/incall/impl/res/values-da/strings.xml | 19 +- .../incallui/incall/impl/res/values-de/strings.xml | 19 +- .../incallui/incall/impl/res/values-el/strings.xml | 19 +- .../incall/impl/res/values-en-rAU/strings.xml | 19 +- .../incall/impl/res/values-en-rGB/strings.xml | 19 +- .../incall/impl/res/values-en-rIN/strings.xml | 19 +- .../incall/impl/res/values-es-rUS/strings.xml | 19 +- .../incallui/incall/impl/res/values-es/strings.xml | 19 +- .../incallui/incall/impl/res/values-et/strings.xml | 19 +- .../incallui/incall/impl/res/values-eu/strings.xml | 19 +- .../incallui/incall/impl/res/values-fa/strings.xml | 19 +- .../incallui/incall/impl/res/values-fi/strings.xml | 19 +- .../incall/impl/res/values-fr-rCA/strings.xml | 19 +- .../incallui/incall/impl/res/values-fr/strings.xml | 19 +- .../incallui/incall/impl/res/values-gl/strings.xml | 19 +- .../incallui/incall/impl/res/values-gu/strings.xml | 19 +- .../incall/impl/res/values-h580dp/dimens.xml | 4 - .../incall/impl/res/values-h580dp/styles.xml | 24 - .../incall/impl/res/values-h600dp/dimens.xml | 20 + .../incall/impl/res/values-h650dp/styles.xml | 24 + .../incallui/incall/impl/res/values-hi/strings.xml | 19 +- .../incallui/incall/impl/res/values-hr/strings.xml | 19 +- .../incallui/incall/impl/res/values-hu/strings.xml | 19 +- .../incallui/incall/impl/res/values-hy/strings.xml | 19 +- .../incallui/incall/impl/res/values-in/strings.xml | 19 +- .../incallui/incall/impl/res/values-is/strings.xml | 19 +- .../incallui/incall/impl/res/values-it/strings.xml | 19 +- .../incallui/incall/impl/res/values-iw/strings.xml | 19 +- .../incallui/incall/impl/res/values-ja/strings.xml | 19 +- .../incallui/incall/impl/res/values-ka/strings.xml | 19 +- .../incallui/incall/impl/res/values-kk/strings.xml | 19 +- .../incallui/incall/impl/res/values-km/strings.xml | 19 +- .../incallui/incall/impl/res/values-kn/strings.xml | 19 +- .../incallui/incall/impl/res/values-ko/strings.xml | 19 +- .../incallui/incall/impl/res/values-ky/strings.xml | 19 +- .../incallui/incall/impl/res/values-lo/strings.xml | 19 +- .../incallui/incall/impl/res/values-lt/strings.xml | 19 +- .../incallui/incall/impl/res/values-lv/strings.xml | 19 +- .../incallui/incall/impl/res/values-mk/strings.xml | 19 +- .../incallui/incall/impl/res/values-ml/strings.xml | 19 +- .../incallui/incall/impl/res/values-mn/strings.xml | 19 +- .../incallui/incall/impl/res/values-mr/strings.xml | 19 +- .../incallui/incall/impl/res/values-ms/strings.xml | 19 +- .../incallui/incall/impl/res/values-my/strings.xml | 19 +- .../incallui/incall/impl/res/values-nb/strings.xml | 19 +- .../incallui/incall/impl/res/values-ne/strings.xml | 19 +- .../incallui/incall/impl/res/values-nl/strings.xml | 19 +- .../incallui/incall/impl/res/values-no/strings.xml | 19 +- .../incallui/incall/impl/res/values-pa/strings.xml | 19 +- .../incallui/incall/impl/res/values-pl/strings.xml | 19 +- .../incall/impl/res/values-pt-rBR/strings.xml | 19 +- .../incall/impl/res/values-pt-rPT/strings.xml | 19 +- .../incallui/incall/impl/res/values-pt/strings.xml | 19 +- .../incallui/incall/impl/res/values-ro/strings.xml | 19 +- .../incallui/incall/impl/res/values-ru/strings.xml | 19 +- .../incallui/incall/impl/res/values-si/strings.xml | 19 +- .../incallui/incall/impl/res/values-sk/strings.xml | 19 +- .../incallui/incall/impl/res/values-sl/strings.xml | 19 +- .../incallui/incall/impl/res/values-sq/strings.xml | 19 +- .../incallui/incall/impl/res/values-sr/strings.xml | 19 +- .../incallui/incall/impl/res/values-sv/strings.xml | 19 +- .../incallui/incall/impl/res/values-sw/strings.xml | 19 +- .../incallui/incall/impl/res/values-ta/strings.xml | 19 +- .../incallui/incall/impl/res/values-te/strings.xml | 19 +- .../incallui/incall/impl/res/values-th/strings.xml | 19 +- .../incallui/incall/impl/res/values-tl/strings.xml | 19 +- .../incallui/incall/impl/res/values-tr/strings.xml | 19 +- .../incallui/incall/impl/res/values-uk/strings.xml | 19 +- .../incallui/incall/impl/res/values-ur/strings.xml | 19 +- .../incallui/incall/impl/res/values-uz/strings.xml | 21 +- .../incallui/incall/impl/res/values-vi/strings.xml | 19 +- .../impl/res/values-w260dp-h520dp/dimens.xml | 7 - .../impl/res/values-w260dp-h580dp/dimens.xml | 23 + .../impl/res/values-w300dp-h540dp/dimens.xml | 5 - .../impl/res/values-w300dp-h620dp/dimens.xml | 21 + .../incall/impl/res/values-zh-rCN/strings.xml | 19 +- .../incall/impl/res/values-zh-rHK/strings.xml | 19 +- .../incall/impl/res/values-zh-rTW/strings.xml | 19 +- .../incallui/incall/impl/res/values-zu/strings.xml | 19 +- .../incallui/incall/impl/res/values/strings.xml | 28 +- .../incallui/incall/protocol/PrimaryCallState.java | 8 +- .../incallui/incall/protocol/PrimaryInfo.java | 5 +- .../android/incallui/res/anim/on_going_call.xml | 31 - .../incallui/res/drawable-hdpi/img_conference.png | Bin 7037 -> 0 bytes .../incallui/res/drawable-mdpi/img_conference.png | Bin 4629 -> 0 bytes .../incallui/res/drawable-xhdpi/img_conference.png | Bin 9517 -> 0 bytes .../res/drawable-xxhdpi/img_conference.png | Bin 16306 -> 0 bytes .../res/drawable-xxxhdpi/img_conference.png | Bin 19584 -> 0 bytes .../res/drawable/img_conference_automirrored.xml | 21 - .../incallui/res/drawable/on_going_call.xml | 47 ++ .../com/android/incallui/res/values-af/strings.xml | 16 +- .../com/android/incallui/res/values-am/strings.xml | 16 +- .../com/android/incallui/res/values-ar/strings.xml | 16 +- .../com/android/incallui/res/values-az/strings.xml | 16 +- .../incallui/res/values-b+sr+Latn/strings.xml | 16 +- .../com/android/incallui/res/values-be/strings.xml | 16 +- .../com/android/incallui/res/values-bg/strings.xml | 16 +- .../com/android/incallui/res/values-bn/strings.xml | 16 +- .../com/android/incallui/res/values-bs/strings.xml | 16 +- .../com/android/incallui/res/values-ca/strings.xml | 18 +- .../com/android/incallui/res/values-cs/strings.xml | 16 +- .../com/android/incallui/res/values-da/strings.xml | 16 +- .../com/android/incallui/res/values-de/strings.xml | 16 +- .../com/android/incallui/res/values-el/strings.xml | 16 +- .../android/incallui/res/values-en-rAU/strings.xml | 18 +- .../android/incallui/res/values-en-rGB/strings.xml | 18 +- .../android/incallui/res/values-en-rIN/strings.xml | 18 +- .../android/incallui/res/values-es-rUS/strings.xml | 16 +- .../com/android/incallui/res/values-es/strings.xml | 16 +- .../com/android/incallui/res/values-et/strings.xml | 16 +- .../com/android/incallui/res/values-eu/strings.xml | 16 +- .../com/android/incallui/res/values-fa/strings.xml | 16 +- .../com/android/incallui/res/values-fi/strings.xml | 16 +- .../android/incallui/res/values-fr-rCA/strings.xml | 16 +- .../com/android/incallui/res/values-fr/strings.xml | 16 +- .../com/android/incallui/res/values-gl/strings.xml | 16 +- .../com/android/incallui/res/values-gu/strings.xml | 16 +- .../com/android/incallui/res/values-hi/strings.xml | 16 +- .../com/android/incallui/res/values-hr/strings.xml | 16 +- .../com/android/incallui/res/values-hu/strings.xml | 16 +- .../com/android/incallui/res/values-hy/strings.xml | 16 +- .../com/android/incallui/res/values-in/strings.xml | 16 +- .../com/android/incallui/res/values-is/strings.xml | 16 +- .../com/android/incallui/res/values-it/strings.xml | 16 +- .../com/android/incallui/res/values-iw/strings.xml | 16 +- .../com/android/incallui/res/values-ja/strings.xml | 16 +- .../com/android/incallui/res/values-ka/strings.xml | 16 +- .../com/android/incallui/res/values-kk/strings.xml | 16 +- .../com/android/incallui/res/values-km/strings.xml | 16 +- .../com/android/incallui/res/values-kn/strings.xml | 16 +- .../com/android/incallui/res/values-ko/strings.xml | 16 +- .../com/android/incallui/res/values-ky/strings.xml | 16 +- .../com/android/incallui/res/values-lo/strings.xml | 16 +- .../com/android/incallui/res/values-lt/strings.xml | 18 +- .../com/android/incallui/res/values-lv/strings.xml | 16 +- .../com/android/incallui/res/values-mk/strings.xml | 16 +- .../com/android/incallui/res/values-ml/strings.xml | 16 +- .../com/android/incallui/res/values-mn/strings.xml | 16 +- .../com/android/incallui/res/values-mr/strings.xml | 16 +- .../com/android/incallui/res/values-ms/strings.xml | 18 +- .../com/android/incallui/res/values-my/strings.xml | 16 +- .../com/android/incallui/res/values-nb/strings.xml | 16 +- .../com/android/incallui/res/values-ne/strings.xml | 16 +- .../com/android/incallui/res/values-nl/strings.xml | 18 +- .../com/android/incallui/res/values-no/strings.xml | 16 +- .../com/android/incallui/res/values-pa/strings.xml | 16 +- .../com/android/incallui/res/values-pl/strings.xml | 16 +- .../android/incallui/res/values-pt-rBR/strings.xml | 16 +- .../android/incallui/res/values-pt-rPT/strings.xml | 16 +- .../com/android/incallui/res/values-pt/strings.xml | 16 +- .../com/android/incallui/res/values-ro/strings.xml | 16 +- .../com/android/incallui/res/values-ru/strings.xml | 16 +- .../com/android/incallui/res/values-si/strings.xml | 16 +- .../com/android/incallui/res/values-sk/strings.xml | 16 +- .../com/android/incallui/res/values-sl/strings.xml | 16 +- .../com/android/incallui/res/values-sq/strings.xml | 16 +- .../com/android/incallui/res/values-sr/strings.xml | 16 +- .../com/android/incallui/res/values-sv/strings.xml | 16 +- .../com/android/incallui/res/values-sw/strings.xml | 16 +- .../com/android/incallui/res/values-ta/strings.xml | 16 +- .../com/android/incallui/res/values-te/strings.xml | 16 +- .../com/android/incallui/res/values-th/strings.xml | 16 +- .../com/android/incallui/res/values-tl/strings.xml | 16 +- .../com/android/incallui/res/values-tr/strings.xml | 16 +- .../com/android/incallui/res/values-uk/strings.xml | 16 +- .../com/android/incallui/res/values-ur/strings.xml | 16 +- .../com/android/incallui/res/values-uz/strings.xml | 18 +- .../com/android/incallui/res/values-vi/strings.xml | 16 +- .../android/incallui/res/values-zh-rCN/strings.xml | 16 +- .../android/incallui/res/values-zh-rHK/strings.xml | 16 +- .../android/incallui/res/values-zh-rTW/strings.xml | 16 +- .../com/android/incallui/res/values-zu/strings.xml | 16 +- java/com/android/incallui/res/values/dimens.xml | 4 +- java/com/android/incallui/res/values/strings.xml | 16 +- java/com/android/incallui/res/values/styles.xml | 9 + .../incallui/sessiondata/MultimediaFragment.java | 17 +- .../res/layout/fragment_composer_image.xml | 6 +- .../incallui/spam/SpamCallListListener.java | 53 +- .../speakerbuttonlogic/AndroidManifest.xml | 18 + .../speakerbuttonlogic/SpeakerButtonInfo.java | 91 +++ .../video/impl/SpeakerButtonController.java | 2 +- .../video/impl/SurfaceViewVideoCallFragment.java | 11 +- .../incallui/video/impl/VideoCallFragment.java | 23 +- .../impl/res/layout/frag_videocall_surfaceview.xml | 33 +- .../video/impl/res/values-h580dp/dimens.xml | 2 +- .../incallui/video/impl/res/values-land/dimens.xml | 2 +- .../incallui/video/impl/res/values-land/styles.xml | 3 +- .../video/impl/res/values-w460dp/dimens.xml | 2 +- .../incallui/video/impl/res/values/dimens.xml | 2 +- .../incallui/video/impl/res/values/styles.xml | 3 +- java/com/android/incallui/videotech/VideoTech.java | 5 +- .../incallui/videotech/empty/EmptyVideoTech.java | 6 +- .../incallui/videotech/ims/ImsVideoTech.java | 10 +- .../videotech/lightbringer/LightbringerTech.java | 28 +- java/com/android/voicemail/AndroidManifest.xml | 36 + .../com/android/voicemail/impl/AndroidManifest.xml | 5 + java/com/android/voicemail/impl/OmtpReceiver.java | 105 --- .../voicemail/impl/TelephonyManagerStub.java | 40 -- .../voicemail/impl/TelephonyVvmConfigManager.java | 2 +- .../voicemail/impl/VoicemailClientImpl.java | 2 +- .../android/voicemail/impl/VoicemailModule.java | 3 +- .../voicemail/impl/VvmPackageInstallReceiver.java | 80 --- .../v1/VoicemailTranscriptionServiceGrpc.java | 254 +++++++ .../impl/fetch/VoicemailFetchedCallback.java | 18 +- .../android/voicemail/impl/imap/ImapHelper.java | 19 +- .../android/voicemail/impl/mail/MailTransport.java | 3 + java/com/android/voicemail/impl/mail/Message.java | 4 + .../voicemail/impl/mail/internet/MimeHeader.java | 1 + .../voicemail/impl/mail/internet/MimeMessage.java | 24 + .../impl/mail/store/imap/ImapConstants.java | 2 +- .../voicemail/impl/protocol/Vvm3Subscriber.java | 2 +- .../android/voicemail/impl/res/xml/vvm_config.xml | 69 -- .../impl/scheduling/TaskSchedulerService.java | 400 ----------- .../impl/settings/VoicemailSettingsFragment.java | 18 +- .../transcribe/TranscriptionConfigProvider.java | 62 ++ .../impl/transcribe/TranscriptionDbHelper.java | 105 +++ .../impl/transcribe/TranscriptionService.java | 203 ++++++ .../impl/transcribe/TranscriptionTask.java | 191 +++++ .../voicemail/impl/transcribe/VoicemailCompat.java | 59 ++ .../impl/transcribe/grpc/TranscriptionClient.java | 61 ++ .../grpc/TranscriptionClientFactory.java | 194 ++++++ .../transcribe/grpc/voicemail_transcription.proto | 44 ++ java/com/android/voicemail/permissions.xml | 21 - 1891 files changed, 34297 insertions(+), 10702 deletions(-) delete mode 100644 java/com/android/contacts/common/GeoUtil.java delete mode 100644 java/com/android/contacts/common/format/FormatUtils.java delete mode 100644 java/com/android/contacts/common/format/testing/SpannedTestUtils.java delete mode 100644 java/com/android/contacts/common/location/CountryDetector.java delete mode 100644 java/com/android/contacts/common/location/UpdateCountryService.java delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/ic_ab_search.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/ic_arrow_back_24dp.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/ic_business_white_120dp.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/ic_call_24dp.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/ic_close_dk.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/ic_create_24dp.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/ic_group_white_24dp.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/ic_history_white_drawable_24dp.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/ic_info_outline_24dp.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/ic_menu_back.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/ic_menu_group_dk.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/ic_menu_group_lt.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/ic_menu_overflow_lt.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/ic_menu_person_dk.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/ic_menu_person_lt.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/ic_menu_remove_field_holo_light.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/ic_menu_star_dk.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/ic_menu_star_holo_light.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/ic_menu_star_lt.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/ic_person_24dp.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/ic_rx_videocam.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/ic_tx_videocam.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/ic_videocam.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/ic_voicemail_avatar.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/list_activated_holo.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/list_background_holo.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/list_focused_holo.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/list_longpressed_holo_light.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/list_pressed_holo_light.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/list_section_divider_holo_custom.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-hdpi/list_title_holo.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-ldrtl-hdpi/list_focused_holo.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-ldrtl-hdpi/list_section_divider_holo_custom.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-ldrtl-hdpi/list_title_holo.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-ldrtl-mdpi/list_focused_holo.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-ldrtl-mdpi/list_section_divider_holo_custom.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-ldrtl-mdpi/list_title_holo.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-ldrtl-sw600dp-hdpi/list_activated_holo.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-ldrtl-sw600dp-mdpi/list_activated_holo.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-ldrtl-sw600dp-xhdpi/list_activated_holo.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-ldrtl-xhdpi/list_focused_holo.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-ldrtl-xhdpi/list_section_divider_holo_custom.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-ldrtl-xhdpi/list_title_holo.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-mdpi/list_activated_holo.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-mdpi/list_focused_holo.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-mdpi/list_longpressed_holo_light.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-mdpi/list_pressed_holo_light.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-mdpi/list_section_divider_holo_custom.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-sw600dp-hdpi/list_activated_holo.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-sw600dp-mdpi/list_activated_holo.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-sw600dp-xhdpi/list_activated_holo.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-xhdpi/list_activated_holo.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-xhdpi/list_focused_holo.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-xhdpi/list_longpressed_holo_light.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-xhdpi/list_pressed_holo_light.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-xhdpi/list_section_divider_holo_custom.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-xxhdpi/list_activated_holo.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-xxhdpi/list_focused_holo.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-xxhdpi/list_longpressed_holo_light.9.png delete mode 100644 java/com/android/contacts/common/res/drawable-xxhdpi/list_pressed_holo_light.9.png delete mode 100644 java/com/android/contacts/common/res/drawable/ic_back_arrow.xml delete mode 100644 java/com/android/contacts/common/res/drawable/ic_call_and_share.xml delete mode 100644 java/com/android/contacts/common/res/drawable/ic_person_add_tinted_24dp.xml delete mode 100644 java/com/android/contacts/common/res/drawable/ic_search_add_contact.xml delete mode 100644 java/com/android/contacts/common/res/drawable/ic_search_video_call.xml delete mode 100644 java/com/android/contacts/common/res/drawable/list_selector_background_transition_holo_light.xml delete mode 100644 java/com/android/contacts/common/util/NameConverter.java delete mode 100644 java/com/android/contacts/common/util/TrafficStatsTags.java delete mode 100644 java/com/android/dialer/app/bindings/DialerBindings.java delete mode 100644 java/com/android/dialer/app/bindings/DialerBindingsFactory.java delete mode 100644 java/com/android/dialer/app/bindings/DialerBindingsStub.java delete mode 100644 java/com/android/dialer/app/calllog/DefaultVoicemailNotifier.java create mode 100644 java/com/android/dialer/app/calllog/DialerQuickContactBadge.java create mode 100644 java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java delete mode 100644 java/com/android/dialer/app/calllog/PhoneAccountHandles.java create mode 100644 java/com/android/dialer/app/calllog/VisualVoicemailNotifier.java create mode 100644 java/com/android/dialer/app/calllog/VisualVoicemailUpdateTask.java delete mode 100644 java/com/android/dialer/app/calllog/calllogcache/CallLogCacheLollipop.java create mode 100644 java/com/android/dialer/app/list/DialerViewPager.java delete mode 100644 java/com/android/dialer/app/res/drawable-hdpi/empty_contacts.png create mode 100644 java/com/android/dialer/app/res/drawable-hdpi/ic_check_mark_48dp.png create mode 100644 java/com/android/dialer/app/res/drawable-hdpi/ic_check_mark_blue_24dp.png create mode 100644 java/com/android/dialer/app/res/drawable-hdpi/ic_empty_check_mark_white_24dp.png delete mode 100644 java/com/android/dialer/app/res/drawable-hdpi/ic_results_phone.png delete mode 100644 java/com/android/dialer/app/res/drawable-mdpi/empty_contacts.png create mode 100644 java/com/android/dialer/app/res/drawable-mdpi/ic_check_mark_48dp.png delete mode 100644 java/com/android/dialer/app/res/drawable-mdpi/ic_results_phone.png delete mode 100644 java/com/android/dialer/app/res/drawable-xhdpi/empty_contacts.png create mode 100644 java/com/android/dialer/app/res/drawable-xhdpi/ic_check_mark_48dp.png delete mode 100644 java/com/android/dialer/app/res/drawable-xhdpi/ic_results_phone.png delete mode 100644 java/com/android/dialer/app/res/drawable-xxhdpi/empty_contacts.png create mode 100644 java/com/android/dialer/app/res/drawable-xxhdpi/ic_check_mark_48dp.png delete mode 100644 java/com/android/dialer/app/res/drawable-xxhdpi/ic_results_phone.png delete mode 100644 java/com/android/dialer/app/res/drawable-xxxhdpi/empty_contacts.png create mode 100644 java/com/android/dialer/app/res/drawable-xxxhdpi/ic_check_mark_48dp.png delete mode 100644 java/com/android/dialer/app/res/drawable-xxxhdpi/ic_results_phone.png delete mode 100644 java/com/android/dialer/app/res/drawable/ic_search_phone.xml create mode 100644 java/com/android/dialer/app/res/drawable/ic_wifi_calling.xml create mode 100644 java/com/android/dialer/app/res/layout/action_mode_close_button.xml delete mode 100644 java/com/android/dialer/app/res/layout/empty_content_view.xml create mode 100644 java/com/android/dialer/app/voicemail/error/VoicemailTosMessageCreator.java delete mode 100644 java/com/android/dialer/app/widget/EmptyContentView.java create mode 100644 java/com/android/dialer/binary/aosp/testing/AndroidManifest.xml create mode 100644 java/com/android/dialer/binary/aosp/testing/TestActivity.java delete mode 100644 java/com/android/dialer/callcomposer/proto/call_composer_contact.proto create mode 100644 java/com/android/dialer/calldetails/ReportDialogFragment.java create mode 100644 java/com/android/dialer/calldetails/res/layout/caller_id_report_dialog.xml create mode 100644 java/com/android/dialer/callintent/speed_dial_contact_type.proto delete mode 100644 java/com/android/dialer/calllog/DataSources.java create mode 100644 java/com/android/dialer/calllog/database/AndroidManifest.xml delete mode 100644 java/com/android/dialer/calllog/database/AnnotatedCallLog.java create mode 100644 java/com/android/dialer/calllog/database/AnnotatedCallLogContentProvider.java create mode 100644 java/com/android/dialer/calllog/database/CallLogDatabaseComponent.java delete mode 100644 java/com/android/dialer/calllog/database/CallLogMutations.java create mode 100644 java/com/android/dialer/calllog/database/Coalescer.java create mode 100644 java/com/android/dialer/calllog/database/MutationApplier.java create mode 100644 java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java create mode 100644 java/com/android/dialer/calllog/datasources/CallLogMutations.java create mode 100644 java/com/android/dialer/calllog/datasources/DataSources.java create mode 100644 java/com/android/dialer/calllog/datasources/util/RowCombiner.java create mode 100644 java/com/android/dialer/calllog/testing/FakeCallLogApplication.java delete mode 100644 java/com/android/dialer/calllog/ui/AnnotatedCallLogCursorLoader.java create mode 100644 java/com/android/dialer/calllog/ui/NewCallLogAdapter.java create mode 100644 java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java delete mode 100644 java/com/android/dialer/common/ConfigProvider.java delete mode 100644 java/com/android/dialer/common/ConfigProviderBindings.java delete mode 100644 java/com/android/dialer/common/ConfigProviderFactory.java create mode 100644 java/com/android/dialer/common/concurrent/DialerExecutorComponent.java create mode 100644 java/com/android/dialer/common/concurrent/DialerExecutorModule.java create mode 100644 java/com/android/dialer/configprovider/AndroidManifest.xml create mode 100644 java/com/android/dialer/configprovider/ConfigProvider.java create mode 100644 java/com/android/dialer/configprovider/ConfigProviderBindings.java create mode 100644 java/com/android/dialer/configprovider/ConfigProviderComponent.java create mode 100644 java/com/android/dialer/configprovider/SharedPrefConfigProvider.java create mode 100644 java/com/android/dialer/configprovider/SharedPrefConfigProviderModule.java create mode 100644 java/com/android/dialer/constants/TrafficStatsTags.java create mode 100644 java/com/android/dialer/contactactions/AndroidManifest.xml create mode 100644 java/com/android/dialer/contactactions/ContactActionBottomSheet.java create mode 100644 java/com/android/dialer/contactactions/ContactActionModule.java create mode 100644 java/com/android/dialer/contactactions/DividerModule.java create mode 100644 java/com/android/dialer/contactactions/IntentModule.java create mode 100644 java/com/android/dialer/contactactions/res/layout/contact_layout.xml create mode 100644 java/com/android/dialer/contactactions/res/layout/divider_layout.xml create mode 100644 java/com/android/dialer/contactactions/res/layout/module_layout.xml create mode 100644 java/com/android/dialer/contactactions/res/layout/sheet_layout.xml create mode 100644 java/com/android/dialer/contactactions/res/values/dimens.xml create mode 100644 java/com/android/dialer/contactsfragment/AddContactViewHolder.java create mode 100644 java/com/android/dialer/contactsfragment/FastScroller.java create mode 100644 java/com/android/dialer/contactsfragment/res/drawable/fast_scroller_container_background.xml create mode 100644 java/com/android/dialer/contactsfragment/res/drawable/fast_scroller_scroll_bar.xml create mode 100644 java/com/android/dialer/contactsfragment/res/layout/add_contact_row.xml create mode 100644 java/com/android/dialer/dialercontact/dialer_contact.proto create mode 100644 java/com/android/dialer/inject/ApplicationContext.java create mode 100644 java/com/android/dialer/logging/ui_action.proto create mode 100644 java/com/android/dialer/main/Main.java create mode 100644 java/com/android/dialer/main/MainComponent.java create mode 100644 java/com/android/dialer/main/impl/AndroidManifest.xml create mode 100644 java/com/android/dialer/main/impl/MainActivity.java create mode 100644 java/com/android/dialer/main/impl/MainImpl.java create mode 100644 java/com/android/dialer/main/impl/MainModule.java create mode 100644 java/com/android/dialer/main/impl/MainPagerAdapter.java create mode 100644 java/com/android/dialer/main/impl/StubFragment.java create mode 100644 java/com/android/dialer/main/impl/res/drawable-xxxhdpi/nui_launcher_icon.png create mode 100644 java/com/android/dialer/main/impl/res/layout/main_activity.xml create mode 100644 java/com/android/dialer/main/impl/res/layout/stub_fragment.xml create mode 100644 java/com/android/dialer/main/impl/res/menu/main_menu.xml create mode 100644 java/com/android/dialer/main/impl/res/values-af/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-am/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-ar/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-az/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-b+sr+Latn/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-be/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-bg/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-bn/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-bs/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-ca/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-cs/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-da/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-de/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-el/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-en-rAU/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-en-rGB/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-en-rIN/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-es-rUS/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-es/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-et/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-eu/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-fa/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-fi/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-fr-rCA/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-fr/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-gl/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-gu/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-hi/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-hr/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-hu/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-hy/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-in/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-is/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-it/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-iw/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-ja/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-ka/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-kk/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-km/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-kn/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-ko/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-ky/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-lo/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-lt/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-lv/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-mk/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-ml/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-mn/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-mr/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-ms/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-my/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-nb/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-ne/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-nl/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-no/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-pa/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-pl/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-pt-rBR/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-pt-rPT/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-pt/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-ro/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-ru/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-si/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-sk/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-sl/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-sq/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-sr/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-sv/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-sw/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-ta/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-te/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-th/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-tl/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-tr/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-uk/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-ur/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-uz/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-vi/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-zh-rCN/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-zh-rHK/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-zh-rTW/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values-zu/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values/strings.xml create mode 100644 java/com/android/dialer/main/impl/res/values/styles.xml delete mode 100644 java/com/android/dialer/notification/GroupedNotificationUtil.java create mode 100644 java/com/android/dialer/notification/NotificationChannelId.java delete mode 100644 java/com/android/dialer/notification/PackageUpdatedReceiver.java create mode 100644 java/com/android/dialer/notification/VoicemailChannelUtils.java delete mode 100644 java/com/android/dialer/notification/res/values/ids.xml create mode 100644 java/com/android/dialer/performancereport/PerformanceReport.java create mode 100644 java/com/android/dialer/phonenumberproto/Converter.java create mode 100644 java/com/android/dialer/phonenumberproto/DialerPhoneNumberUtil.java create mode 100644 java/com/android/dialer/phonenumberproto/dialer_phone_number.proto create mode 100644 java/com/android/dialer/searchfragment/README.md create mode 100644 java/com/android/dialer/searchfragment/common/AndroidManifest.xml create mode 100644 java/com/android/dialer/searchfragment/common/Projections.java create mode 100644 java/com/android/dialer/searchfragment/common/QueryBoldingUtil.java create mode 100644 java/com/android/dialer/searchfragment/common/QueryFilteringUtil.java create mode 100644 java/com/android/dialer/searchfragment/common/res/layout/search_contact_row.xml create mode 100644 java/com/android/dialer/searchfragment/common/res/values/dimens.xml create mode 100644 java/com/android/dialer/searchfragment/cp2/SearchContactCursor.java create mode 100644 java/com/android/dialer/searchfragment/cp2/SearchContactViewHolder.java create mode 100644 java/com/android/dialer/searchfragment/cp2/SearchContactsCursorLoader.java create mode 100644 java/com/android/dialer/searchfragment/list/AndroidManifest.xml create mode 100644 java/com/android/dialer/searchfragment/list/HeaderViewHolder.java create mode 100644 java/com/android/dialer/searchfragment/list/NewSearchFragment.java create mode 100644 java/com/android/dialer/searchfragment/list/SearchAdapter.java create mode 100644 java/com/android/dialer/searchfragment/list/SearchCursorManager.java create mode 100644 java/com/android/dialer/searchfragment/list/res/layout/fragment_search.xml create mode 100644 java/com/android/dialer/searchfragment/list/res/layout/header_layout.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/AndroidManifest.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/NearbyPlaceViewHolder.java create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/NearbyPlacesCursorLoader.java create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-af/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-am/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-ar/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-az/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-b+sr+Latn/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-be/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-bg/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-bn/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-bs/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-ca/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-cs/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-da/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-de/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-el/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-en-rAU/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-en-rGB/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-en-rIN/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-es-rUS/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-es/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-et/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-eu/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-fa/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-fi/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-fr-rCA/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-fr/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-gl/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-gu/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-hi/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-hr/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-hu/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-hy/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-in/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-is/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-it/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-iw/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-ja/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-ka/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-kk/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-km/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-kn/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-ko/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-ky/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-lo/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-lt/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-lv/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-mk/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-ml/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-mn/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-mr/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-ms/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-my/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-nb/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-ne/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-nl/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-no/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-pa/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-pl/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-pt-rBR/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-pt-rPT/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-pt/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-ro/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-ru/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-si/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-sk/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-sl/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-sq/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-sr/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-sv/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-sw/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-ta/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-te/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-th/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-tl/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-tr/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-uk/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-ur/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-uz/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-vi/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-zh-rCN/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-zh-rHK/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-zh-rTW/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values-zu/strings.xml create mode 100644 java/com/android/dialer/searchfragment/nearbyplaces/res/values/strings.xml create mode 100644 java/com/android/dialer/widget/EmptyContentView.java create mode 100644 java/com/android/dialer/widget/LockableViewPager.java create mode 100644 java/com/android/dialer/widget/res/drawable-hdpi/empty_contacts.png create mode 100644 java/com/android/dialer/widget/res/drawable-mdpi/empty_contacts.png create mode 100644 java/com/android/dialer/widget/res/drawable-xhdpi/empty_contacts.png create mode 100644 java/com/android/dialer/widget/res/drawable-xxhdpi/empty_contacts.png create mode 100644 java/com/android/dialer/widget/res/drawable-xxxhdpi/empty_contacts.png create mode 100644 java/com/android/dialer/widget/res/layout-land/empty_content_view.xml create mode 100644 java/com/android/dialer/widget/res/layout/empty_content_view.xml create mode 100644 java/com/android/dialer/widget/res/values/colors.xml create mode 100644 java/com/android/dialershared/bubble/AndroidManifest.xml create mode 100644 java/com/android/dialershared/bubble/Bubble.java create mode 100644 java/com/android/dialershared/bubble/BubbleInfo.java create mode 100644 java/com/android/dialershared/bubble/ChangeOnScreenBounds.java create mode 100644 java/com/android/dialershared/bubble/CheckableImageButton.java create mode 100644 java/com/android/dialershared/bubble/MoveHandler.java create mode 100644 java/com/android/dialershared/bubble/WindowRoot.java create mode 100644 java/com/android/dialershared/bubble/g3doc/INTEGRATION.md create mode 100644 java/com/android/dialershared/bubble/g3doc/images/bubble_collapsed.png create mode 100644 java/com/android/dialershared/bubble/g3doc/images/bubble_expanded.png create mode 100644 java/com/android/dialershared/bubble/g3doc/images/bubble_state.png create mode 100644 java/com/android/dialershared/bubble/g3doc/images/bubble_text.png create mode 100644 java/com/android/dialershared/bubble/res/color/bubble_checkable_mask.xml create mode 100644 java/com/android/dialershared/bubble/res/color/bubble_icon_tint_states.xml create mode 100644 java/com/android/dialershared/bubble/res/drawable/bubble_background_pill_ltr.xml create mode 100644 java/com/android/dialershared/bubble/res/drawable/bubble_background_pill_rtl.xml create mode 100644 java/com/android/dialershared/bubble/res/drawable/bubble_ripple_checkable_circle.xml create mode 100644 java/com/android/dialershared/bubble/res/drawable/bubble_ripple_circle.xml create mode 100644 java/com/android/dialershared/bubble/res/layout/bubble_base.xml create mode 100644 java/com/android/dialershared/bubble/res/values/colors.xml create mode 100644 java/com/android/dialershared/bubble/res/values/values.xml create mode 100644 java/com/android/incallui/AudioRouteSelectorActivity.java create mode 100644 java/com/android/incallui/ReturnToCallActionReceiver.java create mode 100644 java/com/android/incallui/ReturnToCallController.java delete mode 100644 java/com/android/incallui/answer/impl/PillDrawable.java delete mode 100644 java/com/android/incallui/calllocation/impl/TrafficStatsTags.java delete mode 100644 java/com/android/incallui/commontheme/res/anim/blinking.xml delete mode 100644 java/com/android/incallui/commontheme/res/drawable-hdpi/ic_phone_audio_white_36dp.png delete mode 100644 java/com/android/incallui/commontheme/res/drawable-mdpi/ic_phone_audio_white_36dp.png delete mode 100644 java/com/android/incallui/commontheme/res/drawable-xhdpi/ic_phone_audio_white_36dp.png delete mode 100644 java/com/android/incallui/commontheme/res/drawable-xxhdpi/ic_phone_audio_white_36dp.png delete mode 100644 java/com/android/incallui/commontheme/res/drawable-xxxhdpi/ic_phone_audio_white_36dp.png delete mode 100644 java/com/android/incallui/incall/impl/LockableViewPager.java delete mode 100644 java/com/android/incallui/incall/impl/res/values-h580dp/dimens.xml delete mode 100644 java/com/android/incallui/incall/impl/res/values-h580dp/styles.xml create mode 100644 java/com/android/incallui/incall/impl/res/values-h600dp/dimens.xml create mode 100644 java/com/android/incallui/incall/impl/res/values-h650dp/styles.xml delete mode 100644 java/com/android/incallui/incall/impl/res/values-w260dp-h520dp/dimens.xml create mode 100644 java/com/android/incallui/incall/impl/res/values-w260dp-h580dp/dimens.xml delete mode 100644 java/com/android/incallui/incall/impl/res/values-w300dp-h540dp/dimens.xml create mode 100644 java/com/android/incallui/incall/impl/res/values-w300dp-h620dp/dimens.xml delete mode 100644 java/com/android/incallui/res/anim/on_going_call.xml delete mode 100644 java/com/android/incallui/res/drawable-hdpi/img_conference.png delete mode 100644 java/com/android/incallui/res/drawable-mdpi/img_conference.png delete mode 100644 java/com/android/incallui/res/drawable-xhdpi/img_conference.png delete mode 100644 java/com/android/incallui/res/drawable-xxhdpi/img_conference.png delete mode 100644 java/com/android/incallui/res/drawable-xxxhdpi/img_conference.png delete mode 100644 java/com/android/incallui/res/drawable/img_conference_automirrored.xml create mode 100644 java/com/android/incallui/res/drawable/on_going_call.xml create mode 100644 java/com/android/incallui/speakerbuttonlogic/AndroidManifest.xml create mode 100644 java/com/android/incallui/speakerbuttonlogic/SpeakerButtonInfo.java create mode 100644 java/com/android/voicemail/AndroidManifest.xml delete mode 100644 java/com/android/voicemail/impl/OmtpReceiver.java delete mode 100644 java/com/android/voicemail/impl/TelephonyManagerStub.java delete mode 100644 java/com/android/voicemail/impl/VvmPackageInstallReceiver.java create mode 100644 java/com/android/voicemail/impl/com/google/internal/communications/voicemailtranscription/v1/VoicemailTranscriptionServiceGrpc.java delete mode 100644 java/com/android/voicemail/impl/scheduling/TaskSchedulerService.java create mode 100644 java/com/android/voicemail/impl/transcribe/TranscriptionConfigProvider.java create mode 100644 java/com/android/voicemail/impl/transcribe/TranscriptionDbHelper.java create mode 100644 java/com/android/voicemail/impl/transcribe/TranscriptionService.java create mode 100644 java/com/android/voicemail/impl/transcribe/TranscriptionTask.java create mode 100644 java/com/android/voicemail/impl/transcribe/VoicemailCompat.java create mode 100644 java/com/android/voicemail/impl/transcribe/grpc/TranscriptionClient.java create mode 100644 java/com/android/voicemail/impl/transcribe/grpc/TranscriptionClientFactory.java create mode 100644 java/com/android/voicemail/impl/transcribe/grpc/voicemail_transcription.proto delete mode 100644 java/com/android/voicemail/permissions.xml (limited to 'java/com/android') diff --git a/java/com/android/contacts/common/ClipboardUtils.java b/java/com/android/contacts/common/ClipboardUtils.java index 9345b0f9c..3d7683941 100644 --- a/java/com/android/contacts/common/ClipboardUtils.java +++ b/java/com/android/contacts/common/ClipboardUtils.java @@ -24,8 +24,6 @@ import android.widget.Toast; public class ClipboardUtils { - private static final String TAG = "ClipboardUtils"; - private ClipboardUtils() {} /** diff --git a/java/com/android/contacts/common/ContactPhotoManager.java b/java/com/android/contacts/common/ContactPhotoManager.java index 169348b25..fbf51cc0e 100644 --- a/java/com/android/contacts/common/ContactPhotoManager.java +++ b/java/com/android/contacts/common/ContactPhotoManager.java @@ -36,14 +36,6 @@ import com.android.dialer.util.PermissionsUtil; /** Asynchronously loads contact photos and maintains a cache of photos. */ 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; - public static final int TYPE_GENERIC_AVATAR = LetterTileDrawable.TYPE_GENERIC_AVATAR; /** Scale and offset default constants used for default letter images */ public static final float SCALE_DEFAULT = 1.0f; @@ -88,7 +80,7 @@ public abstract class ContactPhotoManager implements ComponentCallbacks2 { if (!TextUtils.isEmpty(request.identifier)) { builder.appendQueryParameter(IDENTIFIER_PARAM_KEY, request.identifier); } - if (request.contactType != TYPE_DEFAULT) { + if (request.contactType != LetterTileDrawable.TYPE_DEFAULT) { builder.appendQueryParameter(CONTACT_TYPE_PARAM_KEY, String.valueOf(request.contactType)); } if (request.scale != SCALE_DEFAULT) { @@ -114,7 +106,7 @@ public abstract class ContactPhotoManager implements ComponentCallbacks2 { public static String appendBusinessContactType(String photoUrl) { Uri uri = Uri.parse(photoUrl); Builder builder = uri.buildUpon(); - builder.encodedFragment(String.valueOf(TYPE_BUSINESS)); + builder.encodedFragment(String.valueOf(LetterTileDrawable.TYPE_BUSINESS)); return builder.build().toString(); } @@ -147,7 +139,7 @@ public abstract class ContactPhotoManager implements ComponentCallbacks2 { String encodedFragment = photoUri.getEncodedFragment(); return !TextUtils.isEmpty(encodedFragment) - && encodedFragment.equals(String.valueOf(TYPE_BUSINESS)); + && encodedFragment.equals(String.valueOf(LetterTileDrawable.TYPE_BUSINESS)); } protected static DefaultImageRequest getDefaultImageRequestFromUri(Uri uri) { @@ -246,6 +238,9 @@ public abstract class ContactPhotoManager implements ComponentCallbacks2 { badge.assignContactUri(contactUri); badge.setOverlay(null); + badge.setContentDescription( + badge.getContext().getString(R.string.description_quick_contact_for, displayName)); + String lookupKey = contactUri == null ? null : UriUtils.getLookupKeyFromUri(contactUri); ContactPhotoManager.DefaultImageRequest request = new ContactPhotoManager.DefaultImageRequest( @@ -378,7 +373,7 @@ public abstract class ContactPhotoManager implements ComponentCallbacks2 { * be returned. */ public static final DefaultImageRequest EMPTY_DEFAULT_BUSINESS_IMAGE_REQUEST = - new DefaultImageRequest(null, null, TYPE_BUSINESS, false); + new DefaultImageRequest(null, null, LetterTileDrawable.TYPE_BUSINESS, false); /** * Used to indicate that a circular drawable that represents a contact without any contact * details should be returned. @@ -390,7 +385,7 @@ public abstract class ContactPhotoManager implements ComponentCallbacks2 { * should be returned. */ public static final DefaultImageRequest EMPTY_CIRCULAR_BUSINESS_IMAGE_REQUEST = - new DefaultImageRequest(null, null, TYPE_BUSINESS, true); + new DefaultImageRequest(null, null, LetterTileDrawable.TYPE_BUSINESS, true); /** The contact's display name. The display name is used to */ public String displayName; /** @@ -403,10 +398,9 @@ public abstract class ContactPhotoManager implements ComponentCallbacks2 { /** * The type of this contact. This contact type may be used to decide the kind of image to use in * the case where a unique letter cannot be generated from the contact's display name and - * identifier. See: {@link #TYPE_PERSON} {@link #TYPE_BUSINESS} {@link #TYPE_PERSON} {@link - * #TYPE_DEFAULT} + * identifier. */ - public int contactType = TYPE_DEFAULT; + public @LetterTileDrawable.ContactType int contactType = LetterTileDrawable.TYPE_DEFAULT; /** * The amount to scale the letter or bitmap to, as a ratio of its default size (from a range of * 0.0f to 2.0f). The default value is 1.0f. @@ -429,7 +423,13 @@ public abstract class ContactPhotoManager implements ComponentCallbacks2 { public DefaultImageRequest() {} public DefaultImageRequest(String displayName, String identifier, boolean isCircular) { - this(displayName, identifier, TYPE_DEFAULT, SCALE_DEFAULT, OFFSET_DEFAULT, isCircular); + this( + displayName, + identifier, + LetterTileDrawable.TYPE_DEFAULT, + SCALE_DEFAULT, + OFFSET_DEFAULT, + isCircular); } public DefaultImageRequest( diff --git a/java/com/android/contacts/common/ContactPhotoManagerImpl.java b/java/com/android/contacts/common/ContactPhotoManagerImpl.java index 2e6ff9fdc..28ecf3421 100644 --- a/java/com/android/contacts/common/ContactPhotoManagerImpl.java +++ b/java/com/android/contacts/common/ContactPhotoManagerImpl.java @@ -53,9 +53,9 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import com.android.contacts.common.util.BitmapUtil; -import com.android.contacts.common.util.TrafficStatsTags; import com.android.contacts.common.util.UriUtils; import com.android.dialer.common.LogUtil; +import com.android.dialer.constants.TrafficStatsTags; import com.android.dialer.util.PermissionsUtil; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -634,8 +634,9 @@ class ContactPhotoManagerImpl extends ContactPhotoManager implements Callback { } return true; } + default: + return false; } - return false; } public void ensureLoaderThread() { diff --git a/java/com/android/contacts/common/ContactPresenceIconUtil.java b/java/com/android/contacts/common/ContactPresenceIconUtil.java index eeaf652a8..bce4b21f4 100644 --- a/java/com/android/contacts/common/ContactPresenceIconUtil.java +++ b/java/com/android/contacts/common/ContactPresenceIconUtil.java @@ -19,6 +19,7 @@ package com.android.contacts.common; import android.content.Context; import android.graphics.drawable.Drawable; import android.provider.ContactsContract.StatusUpdates; +import android.support.v4.content.ContextCompat; /** Define the contact present show policy in Contacts */ public class ContactPresenceIconUtil { @@ -36,7 +37,7 @@ public class ContactPresenceIconUtil { case StatusUpdates.AWAY: case StatusUpdates.DO_NOT_DISTURB: case StatusUpdates.INVISIBLE: - return context.getResources().getDrawable(StatusUpdates.getPresenceIconResourceId(status)); + return ContextCompat.getDrawable(context, StatusUpdates.getPresenceIconResourceId(status)); case StatusUpdates.OFFLINE: // The undefined status is treated as OFFLINE in getPresenceIconResourceId(); default: diff --git a/java/com/android/contacts/common/ContactStatusUtil.java b/java/com/android/contacts/common/ContactStatusUtil.java index 97d84c876..c5347e778 100644 --- a/java/com/android/contacts/common/ContactStatusUtil.java +++ b/java/com/android/contacts/common/ContactStatusUtil.java @@ -23,8 +23,6 @@ import android.provider.ContactsContract.StatusUpdates; /** Provides static function to get default contact status message. */ public class ContactStatusUtil { - private static final String TAG = "ContactStatusUtil"; - public static String getStatusString(Context context, int presence) { Resources resources = context.getResources(); switch (presence) { diff --git a/java/com/android/contacts/common/ContactsUtils.java b/java/com/android/contacts/common/ContactsUtils.java index 60af44b9a..66ccc90e7 100644 --- a/java/com/android/contacts/common/ContactsUtils.java +++ b/java/com/android/contacts/common/ContactsUtils.java @@ -16,184 +16,17 @@ package com.android.contacts.common; -import android.content.Context; -import android.content.Intent; -import android.database.Cursor; -import android.net.Uri; -import android.provider.ContactsContract.CommonDataKinds.Im; -import android.provider.ContactsContract.DisplayPhoto; +import android.provider.ContactsContract.Contacts; import android.support.annotation.IntDef; -import android.text.TextUtils; -import android.util.Pair; -import com.android.contacts.common.compat.ContactsCompat; import com.android.contacts.common.compat.DirectoryCompat; -import com.android.contacts.common.model.AccountTypeManager; -import com.android.contacts.common.model.account.AccountWithDataSet; -import com.android.contacts.common.model.dataitem.ImDataItem; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -import java.util.List; public class ContactsUtils { // Telecomm related schemes are in CallUtil - public static final String SCHEME_IMTO = "imto"; - public static final String SCHEME_MAILTO = "mailto"; - public static final String SCHEME_SMSTO = "smsto"; public static final long USER_TYPE_CURRENT = 0; public static final long USER_TYPE_WORK = 1; - private static final String TAG = "ContactsUtils"; - private static final int DEFAULT_THUMBNAIL_SIZE = 96; - private static int sThumbnailSize = -1; - - /** - * This looks up the provider name defined in ProviderNames from the predefined IM protocol id. - * This is used for interacting with the IM application. - * - * @param protocol the protocol ID - * @return the provider name the IM app uses for the given protocol, or null if no provider is - * defined for the given protocol - * @hide - */ - public static String lookupProviderNameFromId(int protocol) { - switch (protocol) { - case Im.PROTOCOL_GOOGLE_TALK: - return ProviderNames.GTALK; - case Im.PROTOCOL_AIM: - return ProviderNames.AIM; - case Im.PROTOCOL_MSN: - return ProviderNames.MSN; - case Im.PROTOCOL_YAHOO: - return ProviderNames.YAHOO; - case Im.PROTOCOL_ICQ: - return ProviderNames.ICQ; - case Im.PROTOCOL_JABBER: - return ProviderNames.JABBER; - case Im.PROTOCOL_SKYPE: - return ProviderNames.SKYPE; - case Im.PROTOCOL_QQ: - return ProviderNames.QQ; - } - return null; - } - - /** - * Test if the given {@link CharSequence} contains any graphic characters, first checking {@link - * TextUtils#isEmpty(CharSequence)} to handle null. - */ - public static boolean isGraphic(CharSequence str) { - return !TextUtils.isEmpty(str) && TextUtils.isGraphic(str); - } - - /** Returns true if two objects are considered equal. Two null references are equal here. */ - public static boolean areObjectsEqual(Object a, Object b) { - return a == b || (a != null && a.equals(b)); - } - - /** Returns true if two {@link Intent}s are both null, or have the same action. */ - public static final boolean areIntentActionEqual(Intent a, Intent b) { - if (a == b) { - return true; - } - if (a == null || b == null) { - return false; - } - return TextUtils.equals(a.getAction(), b.getAction()); - } - - public static boolean areGroupWritableAccountsAvailable(Context context) { - final List accounts = - AccountTypeManager.getInstance(context).getGroupWritableAccounts(); - return !accounts.isEmpty(); - } - - /** - * Returns the size (width and height) of thumbnail pictures as configured in the provider. This - * can safely be called from the UI thread, as the provider can serve this without performing a - * database access - */ - public static int getThumbnailSize(Context context) { - if (sThumbnailSize == -1) { - final Cursor c = - context - .getContentResolver() - .query( - DisplayPhoto.CONTENT_MAX_DIMENSIONS_URI, - new String[] {DisplayPhoto.THUMBNAIL_MAX_DIM}, - null, - null, - null); - if (c != null) { - try { - if (c.moveToFirst()) { - sThumbnailSize = c.getInt(0); - } - } finally { - c.close(); - } - } - } - return sThumbnailSize != -1 ? sThumbnailSize : DEFAULT_THUMBNAIL_SIZE; - } - - private static Intent getCustomImIntent(ImDataItem im, int protocol) { - String host = im.getCustomProtocol(); - final String data = im.getData(); - if (TextUtils.isEmpty(data)) { - return null; - } - if (protocol != Im.PROTOCOL_CUSTOM) { - // Try bringing in a well-known host for specific protocols - host = ContactsUtils.lookupProviderNameFromId(protocol); - } - if (TextUtils.isEmpty(host)) { - return null; - } - final String authority = host.toLowerCase(); - final Uri imUri = - new Uri.Builder().scheme(SCHEME_IMTO).authority(authority).appendPath(data).build(); - final Intent intent = new Intent(Intent.ACTION_SENDTO, imUri); - return intent; - } - - /** - * Returns the proper Intent for an ImDatItem. If available, a secondary intent is stored in the - * second Pair slot - */ - public static Pair buildImIntent(Context context, ImDataItem im) { - Intent intent = null; - Intent secondaryIntent = null; - final boolean isEmail = im.isCreatedFromEmail(); - - if (!isEmail && !im.isProtocolValid()) { - return new Pair<>(null, null); - } - - final String data = im.getData(); - if (TextUtils.isEmpty(data)) { - return new Pair<>(null, null); - } - - final int protocol = isEmail ? Im.PROTOCOL_GOOGLE_TALK : im.getProtocol(); - - if (protocol == Im.PROTOCOL_GOOGLE_TALK) { - final int chatCapability = im.getChatCapability(); - if ((chatCapability & Im.CAPABILITY_HAS_CAMERA) != 0) { - intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("xmpp:" + data + "?message")); - secondaryIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("xmpp:" + data + "?call")); - } else if ((chatCapability & Im.CAPABILITY_HAS_VOICE) != 0) { - // Allow Talking and Texting - intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("xmpp:" + data + "?message")); - secondaryIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("xmpp:" + data + "?call")); - } else { - intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("xmpp:" + data + "?message")); - } - } else { - // Build an IM Intent - intent = getCustomImIntent(im, protocol); - } - return new Pair<>(intent, secondaryIntent); - } /** * Determine UserType from directory id and contact id. @@ -232,27 +65,13 @@ public class ContactsUtils { : USER_TYPE_CURRENT; } // Only check contact id if directory id is null - if (contactId != null && contactId != 0L && ContactsCompat.isEnterpriseContactId(contactId)) { + if (contactId != null && contactId != 0L && Contacts.isEnterpriseContactId(contactId)) { return USER_TYPE_WORK; } else { return USER_TYPE_CURRENT; } } - // TODO find a proper place for the canonical version of these - public interface ProviderNames { - - String YAHOO = "Yahoo"; - String GTALK = "GTalk"; - String MSN = "MSN"; - String ICQ = "ICQ"; - String AIM = "AIM"; - String XMPP = "XMPP"; - String JABBER = "JABBER"; - String SKYPE = "SKYPE"; - String QQ = "QQ"; - } - /** * UserType indicates the user type of the contact. If the contact is from Work User (Work Profile * in Android Multi-User System), it's {@link #USER_TYPE_WORK}, otherwise, {@link diff --git a/java/com/android/contacts/common/GeoUtil.java b/java/com/android/contacts/common/GeoUtil.java deleted file mode 100644 index 50b0cd9e3..000000000 --- a/java/com/android/contacts/common/GeoUtil.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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 - */ - -package com.android.contacts.common; - -import android.app.Application; -import android.content.Context; -import com.android.contacts.common.location.CountryDetector; -import com.google.i18n.phonenumbers.NumberParseException; -import com.google.i18n.phonenumbers.PhoneNumberUtil; -import com.google.i18n.phonenumbers.Phonenumber; -import com.google.i18n.phonenumbers.geocoding.PhoneNumberOfflineGeocoder; -import java.util.Locale; - -/** Static methods related to Geo. */ -public class GeoUtil { - - /** - * Returns the country code of the country the user is currently in. Before calling this method, - * make sure that {@link CountryDetector#initialize(Context)} has already been called in {@link - * Application#onCreate()}. - * - * @return The ISO 3166-1 two letters country code of the country the user is in. - */ - public static String getCurrentCountryIso(Context context) { - // The {@link CountryDetector} should never return null so this is safe to return as-is. - return CountryDetector.getInstance(context).getCurrentCountryIso(); - } - - public static String getGeocodedLocationFor(Context context, String phoneNumber) { - final PhoneNumberOfflineGeocoder geocoder = PhoneNumberOfflineGeocoder.getInstance(); - final PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance(); - try { - final Phonenumber.PhoneNumber structuredPhoneNumber = - phoneNumberUtil.parse(phoneNumber, getCurrentCountryIso(context)); - final Locale locale = context.getResources().getConfiguration().locale; - return geocoder.getDescriptionForNumber(structuredPhoneNumber, locale); - } catch (NumberParseException e) { - return null; - } - } -} diff --git a/java/com/android/contacts/common/MoreContactUtils.java b/java/com/android/contacts/common/MoreContactUtils.java index 028f89971..26241b34f 100644 --- a/java/com/android/contacts/common/MoreContactUtils.java +++ b/java/com/android/contacts/common/MoreContactUtils.java @@ -16,7 +16,6 @@ package com.android.contacts.common; -import android.content.Context; import android.content.Intent; import android.graphics.Rect; import android.net.Uri; @@ -24,7 +23,6 @@ import android.provider.ContactsContract; import android.telephony.PhoneNumberUtils; import android.text.TextUtils; import android.view.View; -import android.widget.TextView; import com.android.contacts.common.model.account.AccountType; import com.google.i18n.phonenumbers.NumberParseException; import com.google.i18n.phonenumbers.PhoneNumberUtil; @@ -193,40 +191,6 @@ public class MoreContactUtils { return rect; } - /** - * Returns a header view based on the R.layout.list_separator, where the containing {@link - * android.widget.TextView} is set using the given textResourceId. - */ - public static TextView createHeaderView(Context context, int textResourceId) { - final TextView textView = (TextView) View.inflate(context, R.layout.list_separator, null); - textView.setText(context.getString(textResourceId)); - return textView; - } - - /** - * Set the top padding on the header view dynamically, based on whether the header is in the first - * row or not. - */ - public static void setHeaderViewBottomPadding( - Context context, TextView textView, boolean isFirstRow) { - final int topPadding; - if (isFirstRow) { - topPadding = - (int) - context - .getResources() - .getDimension(R.dimen.frequently_contacted_title_top_margin_when_first_row); - } else { - topPadding = - (int) context.getResources().getDimension(R.dimen.frequently_contacted_title_top_margin); - } - textView.setPaddingRelative( - textView.getPaddingStart(), - topPadding, - textView.getPaddingEnd(), - textView.getPaddingBottom()); - } - /** * Returns the intent to launch for the given invitable account type and contact lookup URI. This * will return null if the account type is not invitable (i.e. there is no {@link diff --git a/java/com/android/contacts/common/compat/ContactsCompat.java b/java/com/android/contacts/common/compat/ContactsCompat.java index 39d0b55d3..e0c9b7e53 100644 --- a/java/com/android/contacts/common/compat/ContactsCompat.java +++ b/java/com/android/contacts/common/compat/ContactsCompat.java @@ -21,7 +21,6 @@ import android.os.Build.VERSION; import android.os.Build.VERSION_CODES; import android.provider.ContactsContract; import android.provider.ContactsContract.Contacts; -import com.android.dialer.compat.CompatUtils; /** Compatibility class for {@link ContactsContract.Contacts} */ public class ContactsCompat { @@ -29,8 +28,6 @@ public class ContactsCompat { // TODO: Use N APIs private static final Uri ENTERPRISE_CONTENT_FILTER_URI = Uri.withAppendedPath(Contacts.CONTENT_URI, "filter_enterprise"); - // Copied from ContactsContract.Contacts#ENTERPRISE_CONTACT_ID_BASE, which is hidden. - private static final long ENTERPRISE_CONTACT_ID_BASE = 1000000000; /** Not instantiable. */ private ContactsCompat() {} @@ -41,17 +38,4 @@ public class ContactsCompat { } return Contacts.CONTENT_FILTER_URI; } - - /** - * Return {@code true} if a contact ID is from the contacts provider on the enterprise profile. - */ - public static boolean isEnterpriseContactId(long contactId) { - if (CompatUtils.isLollipopCompatible()) { - return Contacts.isEnterpriseContactId(contactId); - } else { - // copied from ContactsContract.Contacts.isEnterpriseContactId - return (contactId >= ENTERPRISE_CONTACT_ID_BASE) - && (contactId < ContactsContract.Profile.MIN_ID); - } - } } diff --git a/java/com/android/contacts/common/compat/PhoneAccountCompat.java b/java/com/android/contacts/common/compat/PhoneAccountCompat.java index 6a24ec033..aa22c6861 100644 --- a/java/com/android/contacts/common/compat/PhoneAccountCompat.java +++ b/java/com/android/contacts/common/compat/PhoneAccountCompat.java @@ -20,33 +20,10 @@ import android.graphics.drawable.Drawable; import android.graphics.drawable.Icon; import android.support.annotation.Nullable; import android.telecom.PhoneAccount; -import android.util.Log; -import com.android.dialer.compat.CompatUtils; /** Compatiblity class for {@link android.telecom.PhoneAccount} */ public class PhoneAccountCompat { - private static final String TAG = PhoneAccountCompat.class.getSimpleName(); - - /** - * Gets the {@link Icon} associated with the given {@link PhoneAccount} - * - * @param phoneAccount the PhoneAccount from which to retrieve the Icon - * @return the Icon, or null - */ - @Nullable - public static Icon getIcon(@Nullable PhoneAccount phoneAccount) { - if (phoneAccount == null) { - return null; - } - - if (CompatUtils.isMarshmallowCompatible()) { - return phoneAccount.getIcon(); - } - - return null; - } - /** * Builds and returns an icon {@code Drawable} to represent this {@code PhoneAccount} in a user * interface. @@ -61,44 +38,16 @@ public class PhoneAccountCompat { if (phoneAccount == null || context == null) { return null; } - - if (CompatUtils.isMarshmallowCompatible()) { - return createIconDrawableMarshmallow(phoneAccount, context); - } - - if (CompatUtils.isLollipopMr1Compatible()) { - return createIconDrawableLollipopMr1(phoneAccount, context); - } - return null; + return createIconDrawableMarshmallow(phoneAccount, context); } @Nullable private static Drawable createIconDrawableMarshmallow( PhoneAccount phoneAccount, Context context) { - Icon accountIcon = getIcon(phoneAccount); + Icon accountIcon = phoneAccount.getIcon(); if (accountIcon == null) { return null; } return accountIcon.loadDrawable(context); } - - @Nullable - private static Drawable createIconDrawableLollipopMr1( - PhoneAccount phoneAccount, Context context) { - try { - return (Drawable) - PhoneAccount.class - .getMethod("createIconDrawable", Context.class) - .invoke(phoneAccount, context); - } catch (ReflectiveOperationException e) { - return null; - } catch (Throwable t) { - Log.e( - TAG, - "Unexpected exception when attempting to call " - + "android.telecom.PhoneAccount#createIconDrawable", - t); - return null; - } - } } diff --git a/java/com/android/contacts/common/compat/PhoneNumberUtilsCompat.java b/java/com/android/contacts/common/compat/PhoneNumberUtilsCompat.java index 960b340d8..a6cfe07cd 100644 --- a/java/com/android/contacts/common/compat/PhoneNumberUtilsCompat.java +++ b/java/com/android/contacts/common/compat/PhoneNumberUtilsCompat.java @@ -17,13 +17,7 @@ package com.android.contacts.common.compat; import android.telephony.PhoneNumberUtils; -import android.text.Spannable; -import android.text.TextUtils; import android.text.style.TtsSpan; -import com.android.dialer.compat.CompatUtils; -import com.google.i18n.phonenumbers.NumberParseException; -import com.google.i18n.phonenumbers.PhoneNumberUtil; -import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber; /** * This class contains static utility methods extracted from PhoneNumberUtils, and the methods were @@ -37,138 +31,16 @@ public class PhoneNumberUtilsCompat { /** Not instantiable. */ private PhoneNumberUtilsCompat() {} - public static String normalizeNumber(String phoneNumber) { - if (CompatUtils.isLollipopCompatible()) { - return PhoneNumberUtils.normalizeNumber(phoneNumber); - } else { - return normalizeNumberInternal(phoneNumber); - } - } - - /** Implementation copied from {@link PhoneNumberUtils#normalizeNumber} */ - private static String normalizeNumberInternal(String phoneNumber) { - if (TextUtils.isEmpty(phoneNumber)) { - return ""; - } - StringBuilder sb = new StringBuilder(); - int len = phoneNumber.length(); - for (int i = 0; i < len; i++) { - char c = phoneNumber.charAt(i); - // Character.digit() supports ASCII and Unicode digits (fullwidth, Arabic-Indic, etc.) - int digit = Character.digit(c, 10); - if (digit != -1) { - sb.append(digit); - } else if (sb.length() == 0 && c == '+') { - sb.append(c); - } else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) { - return normalizeNumber(PhoneNumberUtils.convertKeypadLettersToDigits(phoneNumber)); - } - } - return sb.toString(); - } - public static String formatNumber( String phoneNumber, String phoneNumberE164, String defaultCountryIso) { - if (CompatUtils.isLollipopCompatible()) { return PhoneNumberUtils.formatNumber(phoneNumber, phoneNumberE164, defaultCountryIso); - } else { - // This method was deprecated in API level 21, so it's only used on pre-L SDKs. - return PhoneNumberUtils.formatNumber(phoneNumber); - } } public static CharSequence createTtsSpannable(CharSequence phoneNumber) { - if (CompatUtils.isMarshmallowCompatible()) { - return PhoneNumberUtils.createTtsSpannable(phoneNumber); - } else { - return createTtsSpannableInternal(phoneNumber); - } + return PhoneNumberUtils.createTtsSpannable(phoneNumber); } public static TtsSpan createTtsSpan(String phoneNumber) { - if (CompatUtils.isMarshmallowCompatible()) { - return PhoneNumberUtils.createTtsSpan(phoneNumber); - } else if (CompatUtils.isLollipopCompatible()) { - return createTtsSpanLollipop(phoneNumber); - } else { - return null; - } - } - - /** Copied from {@link PhoneNumberUtils#createTtsSpannable} */ - private static CharSequence createTtsSpannableInternal(CharSequence phoneNumber) { - if (phoneNumber == null) { - return null; - } - Spannable spannable = Spannable.Factory.getInstance().newSpannable(phoneNumber); - addTtsSpanInternal(spannable, 0, spannable.length()); - return spannable; - } - - /** Compat method for addTtsSpan, see {@link PhoneNumberUtils#addTtsSpan} */ - public static void addTtsSpan(Spannable s, int start, int endExclusive) { - if (CompatUtils.isMarshmallowCompatible()) { - PhoneNumberUtils.addTtsSpan(s, start, endExclusive); - } else { - addTtsSpanInternal(s, start, endExclusive); - } - } - - /** Copied from {@link PhoneNumberUtils#addTtsSpan} */ - private static void addTtsSpanInternal(Spannable s, int start, int endExclusive) { - s.setSpan( - createTtsSpan(s.subSequence(start, endExclusive).toString()), - start, - endExclusive, - Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - } - - /** Copied from {@link PhoneNumberUtils#createTtsSpan} */ - private static TtsSpan createTtsSpanLollipop(String phoneNumberString) { - if (phoneNumberString == null) { - return null; - } - - // Parse the phone number - final PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance(); - PhoneNumber phoneNumber = null; - try { - // Don't supply a defaultRegion so this fails for non-international numbers because - // we don't want to TalkBalk to read a country code (e.g. +1) if it is not already - // present - phoneNumber = phoneNumberUtil.parse(phoneNumberString, /* defaultRegion */ null); - } catch (NumberParseException ignored) { - } - - // Build a telephone tts span - final TtsSpan.TelephoneBuilder builder = new TtsSpan.TelephoneBuilder(); - if (phoneNumber == null) { - // Strip separators otherwise TalkBack will be silent - // (this behavior was observed with TalkBalk 4.0.2 from their alpha channel) - builder.setNumberParts(splitAtNonNumerics(phoneNumberString)); - } else { - if (phoneNumber.hasCountryCode()) { - builder.setCountryCode(Integer.toString(phoneNumber.getCountryCode())); - } - builder.setNumberParts(Long.toString(phoneNumber.getNationalNumber())); - } - return builder.build(); - } - - /** - * Split a phone number using spaces, ignoring anything that is not a digit - * - * @param number A {@code CharSequence} before splitting, e.g., "+20(123)-456#" - * @return A {@code String} after splitting, e.g., "20 123 456". - */ - private static String splitAtNonNumerics(CharSequence number) { - StringBuilder sb = new StringBuilder(number.length()); - for (int i = 0; i < number.length(); i++) { - sb.append(PhoneNumberUtils.isISODigit(number.charAt(i)) ? number.charAt(i) : " "); - } - // It is very important to remove extra spaces. At time of writing, any leading or trailing - // spaces, or any sequence of more than one space, will confuse TalkBack and cause the TTS - // span to be non-functional! - return sb.toString().replaceAll(" +", " ").trim(); + return PhoneNumberUtils.createTtsSpan(phoneNumber); } } diff --git a/java/com/android/contacts/common/compat/TelephonyManagerCompat.java b/java/com/android/contacts/common/compat/TelephonyManagerCompat.java index 7e4803ca5..02113ca55 100644 --- a/java/com/android/contacts/common/compat/TelephonyManagerCompat.java +++ b/java/com/android/contacts/common/compat/TelephonyManagerCompat.java @@ -27,7 +27,7 @@ import android.telecom.PhoneAccountHandle; import android.telephony.TelephonyManager; import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; -import com.android.dialer.compat.CompatUtils; +import com.android.dialer.telecom.TelecomUtil; import java.lang.reflect.InvocationTargetException; public class TelephonyManagerCompat { @@ -40,6 +40,8 @@ public class TelephonyManagerCompat { public static final String EVENT_CALL_REMOTELY_HELD = "android.telecom.event.CALL_REMOTELY_HELD"; public static final String EVENT_CALL_REMOTELY_UNHELD = "android.telecom.event.CALL_REMOTELY_UNHELD"; + public static final String EVENT_MERGE_START = "android.telecom.event.MERGE_START"; + public static final String EVENT_MERGE_COMPLETE = "android.telecom.event.MERGE_COMPLETE"; public static final String EVENT_NOTIFY_INTERNATIONAL_CALL_ON_WFC = "android.telephony.event.EVENT_NOTIFY_INTERNATIONAL_CALL_ON_WFC"; @@ -48,31 +50,6 @@ public class TelephonyManagerCompat { private static final String SECRET_CODE_ACTION = "android.provider.Telephony.SECRET_CODE"; - /** - * @param telephonyManager The telephony manager instance to use for method calls. - * @return true if the current device is "voice capable". - *

"Voice capable" means that this device supports circuit-switched (i.e. voice) phone - * calls over the telephony network, and is allowed to display the in-call UI while a cellular - * voice call is active. This will be false on "data only" devices which can't make voice - * calls and don't support any in-call UI. - *

Note: the meaning of this flag is subtly different from the - * PackageManager.FEATURE_TELEPHONY system feature, which is available on any device with a - * telephony radio, even if the device is data-only. - */ - public static boolean isVoiceCapable(@Nullable TelephonyManager telephonyManager) { - if (telephonyManager == null) { - return false; - } - if (CompatUtils.isLollipopMr1Compatible() - || CompatUtils.isMethodAvailable(TELEPHONY_MANAGER_CLASS, "isVoiceCapable")) { - // isVoiceCapable was unhidden in L-MR1 - return telephonyManager.isVoiceCapable(); - } - final int phoneType = telephonyManager.getPhoneType(); - return phoneType == TelephonyManager.PHONE_TYPE_CDMA - || phoneType == TelephonyManager.PHONE_TYPE_GSM; - } - /** * Returns the number of phones available. Returns 1 for Single standby mode (Single SIM * functionality) Returns 2 for Dual standby mode.(Dual SIM functionality) @@ -85,31 +62,7 @@ public class TelephonyManagerCompat { if (telephonyManager == null) { return 1; } - if (CompatUtils.isMarshmallowCompatible() - || CompatUtils.isMethodAvailable(TELEPHONY_MANAGER_CLASS, "getPhoneCount")) { - return telephonyManager.getPhoneCount(); - } - return 1; - } - - /** - * Returns the unique device ID of a subscription, for example, the IMEI for GSM and the MEID for - * CDMA phones. Return null if device ID is not available. - * - *

Requires Permission: {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} - * - * @param telephonyManager The telephony manager instance to use for method calls. - * @param slotId of which deviceID is returned - */ - public static String getDeviceId(@Nullable TelephonyManager telephonyManager, int slotId) { - if (telephonyManager == null) { - return null; - } - if (CompatUtils.isMarshmallowCompatible() - || CompatUtils.isMethodAvailable(TELEPHONY_MANAGER_CLASS, "getDeviceId", Integer.class)) { - return telephonyManager.getDeviceId(slotId); - } - return null; + return telephonyManager.getPhoneCount(); } /** @@ -119,14 +72,7 @@ public class TelephonyManagerCompat { * @return {@code true} if the device supports TTY mode, and {@code false} otherwise. */ public static boolean isTtyModeSupported(@Nullable TelephonyManager telephonyManager) { - if (telephonyManager == null) { - return false; - } - if (CompatUtils.isMarshmallowCompatible() - || CompatUtils.isMethodAvailable(TELEPHONY_MANAGER_CLASS, "isTtyModeSupported")) { - return telephonyManager.isTtyModeSupported(); - } - return false; + return telephonyManager != null && telephonyManager.isTtyModeSupported(); } /** @@ -138,15 +84,7 @@ public class TelephonyManagerCompat { */ public static boolean isHearingAidCompatibilitySupported( @Nullable TelephonyManager telephonyManager) { - if (telephonyManager == null) { - return false; - } - if (CompatUtils.isMarshmallowCompatible() - || CompatUtils.isMethodAvailable( - TELEPHONY_MANAGER_CLASS, "isHearingAidCompatibilitySupported")) { - return telephonyManager.isHearingAidCompatibilitySupported(); - } - return false; + return telephonyManager != null && telephonyManager.isHearingAidCompatibilitySupported(); } /** @@ -228,6 +166,12 @@ public class TelephonyManagerCompat { public static void handleSecretCode(Context context, String secretCode) { // Must use system service on O+ to avoid using broadcasts, which are not allowed on O+. if (BuildCompat.isAtLeastO()) { + if (!TelecomUtil.isDefaultDialer(context)) { + LogUtil.e( + "TelephonyManagerCompat.handleSecretCode", + "not default dialer, cannot send special code"); + return; + } context.getSystemService(TelephonyManager.class).sendDialerSpecialCode(secretCode); } else { // System service call is not supported pre-O, so must use a broadcast for N-. diff --git a/java/com/android/contacts/common/compat/telecom/TelecomManagerCompat.java b/java/com/android/contacts/common/compat/telecom/TelecomManagerCompat.java index 5687f6fbf..8393b2601 100644 --- a/java/com/android/contacts/common/compat/telecom/TelecomManagerCompat.java +++ b/java/com/android/contacts/common/compat/telecom/TelecomManagerCompat.java @@ -15,273 +15,25 @@ */ package com.android.contacts.common.compat.telecom; -import android.app.Activity; -import android.content.Intent; -import android.net.Uri; import android.support.annotation.Nullable; -import android.telecom.PhoneAccount; import android.telecom.PhoneAccountHandle; import android.telecom.TelecomManager; -import android.telephony.PhoneNumberUtils; -import android.telephony.TelephonyManager; -import android.text.TextUtils; -import com.android.dialer.compat.CompatUtils; -import java.util.ArrayList; -import java.util.List; +import java.lang.reflect.Field; /** Compatibility class for {@link android.telecom.TelecomManager}. */ public class TelecomManagerCompat { - public static final String TELECOM_MANAGER_CLASS = "android.telecom.TelecomManager"; - // TODO: remove once this is available in android.telecom.Call // b/33779976 public static final String EXTRA_LAST_EMERGENCY_CALLBACK_TIME_MILLIS = "android.telecom.extra.LAST_EMERGENCY_CALLBACK_TIME_MILLIS"; - /** - * Places a new outgoing call to the provided address using the system telecom service with the - * specified intent. - * - * @param activity {@link Activity} used to start another activity for the given intent - * @param telecomManager the {@link TelecomManager} used to place a call, if possible - * @param intent the intent for the call - */ - public static void placeCall( - @Nullable Activity activity, - @Nullable TelecomManager telecomManager, - @Nullable Intent intent) { - if (activity == null || telecomManager == null || intent == null) { - return; - } - if (CompatUtils.isMarshmallowCompatible()) { - telecomManager.placeCall(intent.getData(), intent.getExtras()); - return; - } - activity.startActivityForResult(intent, 0); - } - - /** - * Get the URI for running an adn query. - * - * @param telecomManager the {@link TelecomManager} used for method calls, if possible. - * @param accountHandle The handle for the account to derive an adn query URI for or {@code null} - * to return a URI which will use the default account. - * @return The URI (with the content:// scheme) specific to the specified {@link PhoneAccount} for - * the the content retrieve. - */ - public static Uri getAdnUriForPhoneAccount( - @Nullable TelecomManager telecomManager, PhoneAccountHandle accountHandle) { - if (telecomManager != null - && (CompatUtils.isMarshmallowCompatible() - || CompatUtils.isMethodAvailable( - TELECOM_MANAGER_CLASS, "getAdnUriForPhoneAccount", PhoneAccountHandle.class))) { - return telecomManager.getAdnUriForPhoneAccount(accountHandle); - } - return Uri.parse("content://icc/adn"); - } - - /** - * Returns a list of {@link PhoneAccountHandle}s which can be used to make and receive phone - * calls. The returned list includes only those accounts which have been explicitly enabled by the - * user. - * - * @param telecomManager the {@link TelecomManager} used for method calls, if possible. - * @return A list of PhoneAccountHandle objects. - */ - public static List getCallCapablePhoneAccounts( - @Nullable TelecomManager telecomManager) { - if (telecomManager != null - && (CompatUtils.isMarshmallowCompatible() - || CompatUtils.isMethodAvailable( - TELECOM_MANAGER_CLASS, "getCallCapablePhoneAccounts"))) { - return telecomManager.getCallCapablePhoneAccounts(); - } - return new ArrayList<>(); - } - - /** - * Used to determine the currently selected default dialer package. - * - * @param telecomManager the {@link TelecomManager} used for method calls, if possible. - * @return package name for the default dialer package or null if no package has been selected as - * the default dialer. - */ - @Nullable - public static String getDefaultDialerPackage(@Nullable TelecomManager telecomManager) { - if (telecomManager != null && CompatUtils.isDefaultDialerCompatible()) { - return telecomManager.getDefaultDialerPackage(); - } - return null; - } - - /** - * Return the {@link PhoneAccount} which will be used to place outgoing calls to addresses with - * the specified {@code uriScheme}. This PhoneAccount will always be a member of the list which is - * returned from invoking {@link TelecomManager#getCallCapablePhoneAccounts()}. The specific - * account returned depends on the following priorities: - * - *

1. If the user-selected default PhoneAccount supports the specified scheme, it will be - * returned. 2. If there exists only one PhoneAccount that supports the specified scheme, it will - * be returned. - * - *

If no PhoneAccount fits the criteria above, this method will return {@code null}. - * - * @param telecomManager the {@link TelecomManager} used for method calls, if possible. - * @param uriScheme The URI scheme. - * @return The {@link PhoneAccountHandle} corresponding to the account to be used. - */ - @Nullable - public static PhoneAccountHandle getDefaultOutgoingPhoneAccount( - @Nullable TelecomManager telecomManager, @Nullable String uriScheme) { - if (telecomManager != null - && (CompatUtils.isMarshmallowCompatible() - || CompatUtils.isMethodAvailable( - TELECOM_MANAGER_CLASS, "getDefaultOutgoingPhoneAccount", String.class))) { - return telecomManager.getDefaultOutgoingPhoneAccount(uriScheme); - } - return null; - } - - /** - * Return the line 1 phone number for given phone account. - * - * @param telecomManager the {@link TelecomManager} to use in the event that {@link - * TelecomManager#getLine1Number(PhoneAccountHandle)} is available - * @param telephonyManager the {@link TelephonyManager} to use if TelecomManager#getLine1Number is - * unavailable - * @param phoneAccountHandle the phoneAccountHandle upon which to check the line one number - * @return the line one number - */ - @Nullable - public static String getLine1Number( - @Nullable TelecomManager telecomManager, - @Nullable TelephonyManager telephonyManager, - @Nullable PhoneAccountHandle phoneAccountHandle) { - if (telecomManager != null && CompatUtils.isMarshmallowCompatible()) { - return telecomManager.getLine1Number(phoneAccountHandle); - } - if (telephonyManager != null) { - return telephonyManager.getLine1Number(); - } - return null; - } - - /** - * Return whether a given phone number is the configured voicemail number for a particular phone - * account. - * - * @param telecomManager the {@link TelecomManager} to use for checking the number. - * @param accountHandle The handle for the account to check the voicemail number against - * @param number The number to look up. - */ - public static boolean isVoiceMailNumber( - @Nullable TelecomManager telecomManager, - @Nullable PhoneAccountHandle accountHandle, - @Nullable String number) { - if (telecomManager != null - && (CompatUtils.isMarshmallowCompatible() - || CompatUtils.isMethodAvailable( - TELECOM_MANAGER_CLASS, - "isVoiceMailNumber", - PhoneAccountHandle.class, - String.class))) { - return telecomManager.isVoiceMailNumber(accountHandle, number); - } - return PhoneNumberUtils.isVoiceMailNumber(number); - } - - /** - * Return the {@link PhoneAccount} for a specified {@link PhoneAccountHandle}. Object includes - * resources which can be used in a user interface. - * - * @param telecomManager the {@link TelecomManager} used for method calls, if possible. - * @param account The {@link PhoneAccountHandle}. - * @return The {@link PhoneAccount} object or null if it doesn't exist. - */ - @Nullable - public static PhoneAccount getPhoneAccount( - @Nullable TelecomManager telecomManager, @Nullable PhoneAccountHandle accountHandle) { - if (telecomManager != null - && (CompatUtils.isMethodAvailable( - TELECOM_MANAGER_CLASS, "getPhoneAccount", PhoneAccountHandle.class))) { - return telecomManager.getPhoneAccount(accountHandle); - } - return null; - } - - /** - * Return the voicemail number for a given phone account. - * - * @param telecomManager The {@link TelecomManager} object to use for retrieving the voicemail - * number if accountHandle is specified. - * @param telephonyManager The {@link TelephonyManager} object to use for retrieving the voicemail - * number if accountHandle is null. - * @param accountHandle The handle for the phone account. - * @return The voicemail number for the phone account, and {@code null} if one has not been - * configured. - */ - @Nullable - public static String getVoiceMailNumber( - @Nullable TelecomManager telecomManager, - @Nullable TelephonyManager telephonyManager, - @Nullable PhoneAccountHandle accountHandle) { - if (telecomManager != null - && (CompatUtils.isMethodAvailable( - TELECOM_MANAGER_CLASS, "getVoiceMailNumber", PhoneAccountHandle.class))) { - return telecomManager.getVoiceMailNumber(accountHandle); - } else if (telephonyManager != null) { - return telephonyManager.getVoiceMailNumber(); - } - return null; - } - - /** - * Processes the specified dial string as an MMI code. MMI codes are any sequence of characters - * entered into the dialpad that contain a "*" or "#". Some of these sequences launch special - * behavior through handled by Telephony. - * - * @param telecomManager The {@link TelecomManager} object to use for handling MMI. - * @param dialString The digits to dial. - * @return {@code true} if the digits were processed as an MMI code, {@code false} otherwise. - */ - public static boolean handleMmi( - @Nullable TelecomManager telecomManager, - @Nullable String dialString, - @Nullable PhoneAccountHandle accountHandle) { - if (telecomManager == null || TextUtils.isEmpty(dialString)) { - return false; - } - if (CompatUtils.isMarshmallowCompatible()) { - return telecomManager.handleMmi(dialString, accountHandle); - } - - Object handleMmiResult = - CompatUtils.invokeMethod( - telecomManager, - "handleMmi", - new Class[] {PhoneAccountHandle.class, String.class}, - new Object[] {accountHandle, dialString}); - if (handleMmiResult != null) { - return (boolean) handleMmiResult; - } - - return telecomManager.handleMmi(dialString); - } - - /** - * Silences the ringer if a ringing call exists. Noop if {@link TelecomManager#silenceRinger()} is - * unavailable. - * - * @param telecomManager the TelecomManager to use to silence the ringer. - */ - public static void silenceRinger(@Nullable TelecomManager telecomManager) { - if (telecomManager != null - && (CompatUtils.isMarshmallowCompatible() - || CompatUtils.isMethodAvailable(TELECOM_MANAGER_CLASS, "silenceRinger"))) { - telecomManager.silenceRinger(); - } - } + // Constants from http://cs/android/frameworks/base/telecomm/java/android/telecom/Call.java. + public static final String EVENT_REQUEST_HANDOVER = "android.telecom.event.REQUEST_HANDOVER"; + public static final String EXTRA_HANDOVER_PHONE_ACCOUNT_HANDLE = + "android.telecom.extra.HANDOVER_PHONE_ACCOUNT_HANDLE"; + public static final String EXTRA_HANDOVER_VIDEO_STATE = + "android.telecom.extra.HANDOVER_VIDEO_STATE"; /** * Returns the current SIM call manager. Apps must be prepared for this method to return null, @@ -292,11 +44,25 @@ public class TelecomManagerCompat { */ @Nullable public static PhoneAccountHandle getSimCallManager(TelecomManager telecomManager) { - if (telecomManager != null - && (CompatUtils.isMarshmallowCompatible() - || CompatUtils.isMethodAvailable(TELECOM_MANAGER_CLASS, "getSimCallManager"))) { + if (telecomManager != null) { return telecomManager.getSimCallManager(); } return null; } + + /** + * Handovers are supported from Android O-DR onward. Since there is no API bump from O to O-DR, we + * need to use reflection to check the existence of TelecomManager.EXTRA_IS_HANDOVER in + * http://cs/android/frameworks/base/telecomm/java/android/telecom/TelecomManager.java. + */ + public static boolean supportsHandover() { + // + try { + Field field = TelecomManager.class.getDeclaredField("EXTRA_IS_HANDOVER"); + return "android.telecom.extra.IS_HANDOVER".equals(field.get(null /* obj (static field) */)); + } catch (Exception e) { + // Do nothing + } + return false; + } } diff --git a/java/com/android/contacts/common/dialog/CallSubjectDialog.java b/java/com/android/contacts/common/dialog/CallSubjectDialog.java index 0e7937102..88fac0256 100644 --- a/java/com/android/contacts/common/dialog/CallSubjectDialog.java +++ b/java/com/android/contacts/common/dialog/CallSubjectDialog.java @@ -45,7 +45,7 @@ import android.widget.QuickContactBadge; import android.widget.TextView; import com.android.contacts.common.ContactPhotoManager; import com.android.contacts.common.R; -import com.android.contacts.common.compat.telecom.TelecomManagerCompat; +import com.android.contacts.common.lettertiles.LetterTileDrawable; import com.android.dialer.animation.AnimUtils; import com.android.dialer.callintent.CallInitiationType; import com.android.dialer.callintent.CallIntentBuilder; @@ -154,11 +154,7 @@ public class CallSubjectDialog extends Activity { .setCallSubject(subject) .build(); - TelecomManagerCompat.placeCall( - CallSubjectDialog.this, - (TelecomManager) getSystemService(Context.TELECOM_SERVICE), - intent); - + getSystemService(TelecomManager.class).placeCall(intent.getData(), intent.getExtras()); mSubjectHistory.add(subject); saveSubjectHistory(mSubjectHistory); finish(); @@ -202,7 +198,7 @@ public class CallSubjectDialog extends Activity { number /* number */, null /* displayNumber */, null /* numberLabel */, - ContactPhotoManager.TYPE_DEFAULT, + LetterTileDrawable.TYPE_DEFAULT, null /* phoneAccountHandle */); } @@ -356,7 +352,7 @@ public class CallSubjectDialog extends Activity { mNumber = arguments.getString(ARG_NUMBER); mDisplayNumber = arguments.getString(ARG_DISPLAY_NUMBER); mNumberLabel = arguments.getString(ARG_NUMBER_LABEL); - mContactType = arguments.getInt(ARG_CONTACT_TYPE, ContactPhotoManager.TYPE_DEFAULT); + mContactType = arguments.getInt(ARG_CONTACT_TYPE, LetterTileDrawable.TYPE_DEFAULT); mPhoneAccountHandle = arguments.getParcelable(ARG_PHONE_ACCOUNT_HANDLE); } diff --git a/java/com/android/contacts/common/extensions/PhoneDirectoryExtender.java b/java/com/android/contacts/common/extensions/PhoneDirectoryExtender.java index 2607ad19a..6c932daf5 100644 --- a/java/com/android/contacts/common/extensions/PhoneDirectoryExtender.java +++ b/java/com/android/contacts/common/extensions/PhoneDirectoryExtender.java @@ -15,14 +15,24 @@ package com.android.contacts.common.extensions; import android.content.Context; +import android.net.Uri; +import android.support.annotation.Nullable; import com.android.contacts.common.list.DirectoryPartition; import java.util.List; /** An interface for adding extended phone directories. */ public interface PhoneDirectoryExtender { + /** * Return a list of extended directories to add. May return null if no directories are to be * added. */ List getExtendedDirectories(Context context); + + /** returns true if the nearby places directory is enabled. */ + boolean isEnabled(Context context); + + /** Returns the content uri for nearby places. */ + @Nullable + Uri getContentUri(); } diff --git a/java/com/android/contacts/common/extensions/PhoneDirectoryExtenderAccessor.java b/java/com/android/contacts/common/extensions/PhoneDirectoryExtenderAccessor.java index 84649f1ed..7978831b0 100644 --- a/java/com/android/contacts/common/extensions/PhoneDirectoryExtenderAccessor.java +++ b/java/com/android/contacts/common/extensions/PhoneDirectoryExtenderAccessor.java @@ -16,6 +16,7 @@ package com.android.contacts.common.extensions; import android.content.Context; import android.support.annotation.NonNull; +import android.support.annotation.VisibleForTesting; import com.android.dialer.common.Assert; /** Accessor for the phone directory extender singleton. */ @@ -25,6 +26,11 @@ public final class PhoneDirectoryExtenderAccessor { private PhoneDirectoryExtenderAccessor() {} + @VisibleForTesting + public static void setForTesting(PhoneDirectoryExtender extender) { + instance = extender; + } + @NonNull public static PhoneDirectoryExtender get(@NonNull Context context) { Assert.isNotNull(context); diff --git a/java/com/android/contacts/common/extensions/PhoneDirectoryExtenderStub.java b/java/com/android/contacts/common/extensions/PhoneDirectoryExtenderStub.java index 95f971533..4c3d3d14d 100644 --- a/java/com/android/contacts/common/extensions/PhoneDirectoryExtenderStub.java +++ b/java/com/android/contacts/common/extensions/PhoneDirectoryExtenderStub.java @@ -15,6 +15,8 @@ package com.android.contacts.common.extensions; import android.content.Context; +import android.net.Uri; +import android.support.annotation.Nullable; import com.android.contacts.common.list.DirectoryPartition; import java.util.Collections; import java.util.List; @@ -26,4 +28,15 @@ class PhoneDirectoryExtenderStub implements PhoneDirectoryExtender { public List getExtendedDirectories(Context context) { return Collections.emptyList(); } + + @Override + public boolean isEnabled(Context context) { + return false; + } + + @Nullable + @Override + public Uri getContentUri() { + return null; + } } diff --git a/java/com/android/contacts/common/format/FormatUtils.java b/java/com/android/contacts/common/format/FormatUtils.java deleted file mode 100644 index 727c15b83..000000000 --- a/java/com/android/contacts/common/format/FormatUtils.java +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright (C) 2011 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.contacts.common.format; - -import android.database.CharArrayBuffer; -import android.graphics.Typeface; -import android.support.annotation.VisibleForTesting; -import android.text.SpannableString; -import android.text.style.StyleSpan; -import java.util.Arrays; - -/** Assorted utility methods related to text formatting in Contacts. */ -public class FormatUtils { - - /** - * Finds the earliest point in buffer1 at which the first part of buffer2 matches. For example, - * overlapPoint("abcd", "cdef") == 2. - */ - public static int overlapPoint(CharArrayBuffer buffer1, CharArrayBuffer buffer2) { - if (buffer1 == null || buffer2 == null) { - return -1; - } - return overlapPoint( - Arrays.copyOfRange(buffer1.data, 0, buffer1.sizeCopied), - Arrays.copyOfRange(buffer2.data, 0, buffer2.sizeCopied)); - } - - /** - * Finds the earliest point in string1 at which the first part of string2 matches. For example, - * overlapPoint("abcd", "cdef") == 2. - */ - @VisibleForTesting - public static int overlapPoint(String string1, String string2) { - if (string1 == null || string2 == null) { - return -1; - } - return overlapPoint(string1.toCharArray(), string2.toCharArray()); - } - - /** - * Finds the earliest point in array1 at which the first part of array2 matches. For example, - * overlapPoint("abcd", "cdef") == 2. - */ - public static int overlapPoint(char[] array1, char[] array2) { - if (array1 == null || array2 == null) { - return -1; - } - int count1 = array1.length; - int count2 = array2.length; - - // Ignore matching tails of the two arrays. - while (count1 > 0 && count2 > 0 && array1[count1 - 1] == array2[count2 - 1]) { - count1--; - count2--; - } - - int size = count2; - for (int i = 0; i < count1; i++) { - if (i + size > count1) { - size = count1 - i; - } - int j; - for (j = 0; j < size; j++) { - if (array1[i + j] != array2[j]) { - break; - } - } - if (j == size) { - return i; - } - } - - return -1; - } - - /** - * Applies the given style to a range of the input CharSequence. - * - * @param style The style to apply (see the style constants in {@link Typeface}). - * @param input The CharSequence to style. - * @param start Starting index of the range to style (will be clamped to be a minimum of 0). - * @param end Ending index of the range to style (will be clamped to a maximum of the input - * length). - * @param flags Bitmask for configuring behavior of the span. See {@link android.text.Spanned}. - * @return The styled CharSequence. - */ - public static CharSequence applyStyleToSpan( - int style, CharSequence input, int start, int end, int flags) { - // Enforce bounds of the char sequence. - start = Math.max(0, start); - end = Math.min(input.length(), end); - SpannableString text = new SpannableString(input); - text.setSpan(new StyleSpan(style), start, end, flags); - return text; - } - - @VisibleForTesting - public static void copyToCharArrayBuffer(String text, CharArrayBuffer buffer) { - if (text != null) { - char[] data = buffer.data; - if (data == null || data.length < text.length()) { - buffer.data = text.toCharArray(); - } else { - text.getChars(0, text.length(), data, 0); - } - buffer.sizeCopied = text.length(); - } else { - buffer.sizeCopied = 0; - } - } - - /** Returns a String that represents the content of the given {@link CharArrayBuffer}. */ - @VisibleForTesting - public static String charArrayBufferToString(CharArrayBuffer buffer) { - return new String(buffer.data, 0, buffer.sizeCopied); - } - - /** - * Finds the index of the first word that starts with the given prefix. - * - *

If not found, returns -1. - * - * @param text the text in which to search for the prefix - * @param prefix the text to find, in upper case letters - */ - public static int indexOfWordPrefix(CharSequence text, String prefix) { - if (prefix == null || text == null) { - return -1; - } - - int textLength = text.length(); - int prefixLength = prefix.length(); - - if (prefixLength == 0 || textLength < prefixLength) { - return -1; - } - - int i = 0; - while (i < textLength) { - // Skip non-word characters - while (i < textLength && !Character.isLetterOrDigit(text.charAt(i))) { - i++; - } - - if (i + prefixLength > textLength) { - return -1; - } - - // Compare the prefixes - int j; - for (j = 0; j < prefixLength; j++) { - if (Character.toUpperCase(text.charAt(i + j)) != prefix.charAt(j)) { - break; - } - } - if (j == prefixLength) { - return i; - } - - // Skip this word - while (i < textLength && Character.isLetterOrDigit(text.charAt(i))) { - i++; - } - } - - return -1; - } -} diff --git a/java/com/android/contacts/common/format/TextHighlighter.java b/java/com/android/contacts/common/format/TextHighlighter.java index 30c03fdf3..f397f0429 100644 --- a/java/com/android/contacts/common/format/TextHighlighter.java +++ b/java/com/android/contacts/common/format/TextHighlighter.java @@ -24,8 +24,6 @@ import android.widget.TextView; /** Highlights the text in a text field. */ public class TextHighlighter { - private static final boolean DEBUG = false; - private final String TAG = TextHighlighter.class.getSimpleName(); private int mTextStyle; private CharacterStyle mTextStyleSpan; @@ -81,7 +79,7 @@ public class TextHighlighter { } final String trimmedPrefix = prefix.substring(prefixStart); - int index = FormatUtils.indexOfWordPrefix(text, trimmedPrefix); + int index = indexOfWordPrefix(text, trimmedPrefix); if (index != -1) { final SpannableString result = new SpannableString(text); result.setSpan(mTextStyleSpan, index, index + trimmedPrefix.length(), 0 /* flags */); @@ -90,4 +88,55 @@ public class TextHighlighter { return text; } } + + /** + * Finds the index of the first word that starts with the given prefix. + * + *

If not found, returns -1. + * + * @param text the text in which to search for the prefix + * @param prefix the text to find, in upper case letters + */ + public static int indexOfWordPrefix(CharSequence text, String prefix) { + if (prefix == null || text == null) { + return -1; + } + + int textLength = text.length(); + int prefixLength = prefix.length(); + + if (prefixLength == 0 || textLength < prefixLength) { + return -1; + } + + int i = 0; + while (i < textLength) { + // Skip non-word characters + while (i < textLength && !Character.isLetterOrDigit(text.charAt(i))) { + i++; + } + + if (i + prefixLength > textLength) { + return -1; + } + + // Compare the prefixes + int j; + for (j = 0; j < prefixLength; j++) { + if (Character.toUpperCase(text.charAt(i + j)) != prefix.charAt(j)) { + break; + } + } + if (j == prefixLength) { + return i; + } + + // Skip this word + while (i < textLength && Character.isLetterOrDigit(text.charAt(i))) { + i++; + } + } + + return -1; + } } diff --git a/java/com/android/contacts/common/format/testing/SpannedTestUtils.java b/java/com/android/contacts/common/format/testing/SpannedTestUtils.java deleted file mode 100644 index 293d9d5ad..000000000 --- a/java/com/android/contacts/common/format/testing/SpannedTestUtils.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (C) 2011 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.contacts.common.format.testing; - -import android.test.suitebuilder.annotation.SmallTest; -import android.text.Html; -import android.text.SpannableString; -import android.text.Spanned; -import android.text.TextUtils; -import android.text.style.StyleSpan; -import android.widget.TextView; -import junit.framework.Assert; - -/** Utility class to check the value of spanned text in text views. */ -@SmallTest -public class SpannedTestUtils { - - /** - * Checks that the text contained in the text view matches the given HTML text. - * - * @param expectedHtmlText the expected text to be in the text view - * @param textView the text view from which to get the text - */ - public static void checkHtmlText(String expectedHtmlText, TextView textView) { - String actualHtmlText = Html.toHtml((Spanned) textView.getText()); - if (TextUtils.isEmpty(expectedHtmlText)) { - // If the text is empty, it does not add the

bits to it. - Assert.assertEquals("", actualHtmlText); - } else { - Assert.assertEquals("

" + expectedHtmlText + "

\n", actualHtmlText); - } - } - - /** - * Assert span exists in the correct location. - * - * @param seq The spannable string to check. - * @param start The starting index. - * @param end The ending index. - */ - public static void assertPrefixSpan(CharSequence seq, int start, int end) { - Assert.assertTrue(seq instanceof Spanned); - Spanned spannable = (Spanned) seq; - - if (start > 0) { - Assert.assertEquals(0, getNumForegroundColorSpansBetween(spannable, 0, start - 1)); - } - Assert.assertEquals(1, getNumForegroundColorSpansBetween(spannable, start, end)); - Assert.assertEquals( - 0, getNumForegroundColorSpansBetween(spannable, end + 1, spannable.length() - 1)); - } - - private static int getNumForegroundColorSpansBetween(Spanned value, int start, int end) { - return value.getSpans(start, end, StyleSpan.class).length; - } - - /** - * Asserts that the given character sequence is not a Spanned object and text is correct. - * - * @param seq The sequence to check. - * @param expected The expected text. - */ - public static void assertNotSpanned(CharSequence seq, String expected) { - Assert.assertFalse(seq instanceof Spanned); - Assert.assertEquals(expected, seq); - } - - public static int getNextTransition(SpannableString seq, int start) { - return seq.nextSpanTransition(start, seq.length(), StyleSpan.class); - } -} diff --git a/java/com/android/contacts/common/lettertiles/LetterTileDrawable.java b/java/com/android/contacts/common/lettertiles/LetterTileDrawable.java index 88522c44b..5c401fe38 100644 --- a/java/com/android/contacts/common/lettertiles/LetterTileDrawable.java +++ b/java/com/android/contacts/common/lettertiles/LetterTileDrawable.java @@ -29,9 +29,12 @@ import android.graphics.Rect; import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.support.annotation.IntDef; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.telecom.TelecomManager; import android.text.TextUtils; import com.android.contacts.common.R; +import com.android.contacts.common.lettertiles.LetterTileDrawable.ContactType; import com.android.dialer.common.Assert; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -122,10 +125,16 @@ public class LetterTileDrawable extends Drawable { sLetterToTileRatio = res.getFraction(R.dimen.letter_to_tile_ratio, 1, 1); sDefaultPersonAvatar = res.getDrawable(R.drawable.product_logo_avatar_anonymous_white_color_120, null); + Assert.isNotNull(sDefaultPersonAvatar, "sDefaultPersonAvatar is null"); sDefaultBusinessAvatar = res.getDrawable(R.drawable.quantum_ic_business_vd_theme_24, null); + Assert.isNotNull(sDefaultBusinessAvatar, "sDefaultBusinessAvatar is null"); sDefaultVoicemailAvatar = res.getDrawable(R.drawable.quantum_ic_voicemail_vd_theme_24, null); + Assert.isNotNull(sDefaultVoicemailAvatar, "sDefaultVoicemailAvatar is null"); sDefaultSpamAvatar = res.getDrawable(R.drawable.quantum_ic_report_vd_theme_24, null); + Assert.isNotNull(sDefaultSpamAvatar, "sDefaultSpamAvatar is null"); sDefaultConferenceAvatar = res.getDrawable(R.drawable.quantum_ic_group_vd_theme_24, null); + Assert.isNotNull(sDefaultConferenceAvatar, "sDefaultConferenceAvatar is null"); + sPaint.setTypeface( Typeface.create(res.getString(R.string.letter_tile_letter_font_family), Typeface.NORMAL)); sPaint.setTextAlign(Align.CENTER); @@ -178,7 +187,7 @@ public class LetterTileDrawable extends Drawable { } @Override - public void draw(final Canvas canvas) { + public void draw(@NonNull final Canvas canvas) { final Rect bounds = getBounds(); if (!isVisible() || bounds.isEmpty()) { return; @@ -233,6 +242,11 @@ public class LetterTileDrawable extends Drawable { } else { // Draw the default image if there is no letter/digit to be drawn Drawable drawable = getDrawableForContactType(mContactType); + if (drawable == null) { + throw Assert.createIllegalStateFailException( + "Unable to find drawable for contact type " + mContactType); + } + drawable.setBounds(getScaledBounds(mScale, mOffset)); drawable.setAlpha(drawable == sDefaultSpamAvatar ? SPAM_ALPHA : ALPHA); drawable.draw(canvas); @@ -406,4 +420,30 @@ public class LetterTileDrawable extends Drawable { } return this; } + + /** + * Returns the appropriate LetterTileDrawable.TYPE_ based on the given primitive conditions. + * + *

If no special state is detected, yields TYPE_DEFAULT + */ + public static @ContactType int getContactTypeFromPrimitives( + boolean isVoicemailNumber, + boolean isSpam, + boolean isBusiness, + int numberPresentation, + boolean isConference) { + if (isVoicemailNumber) { + return LetterTileDrawable.TYPE_VOICEMAIL; + } else if (isSpam) { + return LetterTileDrawable.TYPE_SPAM; + } else if (isBusiness) { + return LetterTileDrawable.TYPE_BUSINESS; + } else if (numberPresentation == TelecomManager.PRESENTATION_RESTRICTED) { + return LetterTileDrawable.TYPE_GENERIC_AVATAR; + } else if (isConference) { + return LetterTileDrawable.TYPE_CONFERENCE; + } else { + return LetterTileDrawable.TYPE_DEFAULT; + } + } } diff --git a/java/com/android/contacts/common/list/ContactEntryListAdapter.java b/java/com/android/contacts/common/list/ContactEntryListAdapter.java index 18bbae382..7335297e0 100644 --- a/java/com/android/contacts/common/list/ContactEntryListAdapter.java +++ b/java/com/android/contacts/common/list/ContactEntryListAdapter.java @@ -26,7 +26,6 @@ import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.Contacts; import android.provider.ContactsContract.Directory; import android.text.TextUtils; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -39,7 +38,11 @@ import com.android.contacts.common.ContactsUtils; import com.android.contacts.common.R; import com.android.contacts.common.compat.DirectoryCompat; import com.android.contacts.common.util.SearchUtil; +import com.android.dialer.common.LogUtil; import com.android.dialer.compat.CompatUtils; +import com.android.dialer.configprovider.ConfigProviderBindings; +import com.android.dialer.logging.InteractionEvent; +import com.android.dialer.logging.Logger; import java.util.HashSet; /** @@ -53,7 +56,6 @@ public abstract class ContactEntryListAdapter extends IndexerListAdapter { */ public static final boolean LOCAL_INVISIBLE_DIRECTORY_ENABLED = false; - private static final String TAG = "ContactEntryListAdapter"; private int mDisplayOrder; private int mSortOrder; @@ -80,6 +82,8 @@ public abstract class ContactEntryListAdapter extends IndexerListAdapter { private ContactListFilter mFilter; private boolean mDarkTheme = false; + public static final int SUGGESTIONS_LOADER_ID = 0; + /** Resource used to provide header-text for default filter. */ private CharSequence mDefaultFilterHeaderText; @@ -128,9 +132,22 @@ public abstract class ContactEntryListAdapter extends IndexerListAdapter { } protected void addPartitions() { + if (ConfigProviderBindings.get(getContext()).getBoolean("p13n_ranker_should_enable", false)) { + addPartition(createSuggestionsDirectoryPartition()); + } addPartition(createDefaultDirectoryPartition()); } + protected DirectoryPartition createSuggestionsDirectoryPartition() { + DirectoryPartition partition = new DirectoryPartition(true, true); + partition.setDirectoryId(SUGGESTIONS_LOADER_ID); + partition.setDirectoryType(getContext().getString(R.string.contact_suggestions)); + partition.setPriorityDirectory(true); + partition.setPhotoSupported(true); + partition.setLabel(getContext().getString(R.string.local_suggestions_search_label)); + return partition; + } + protected DirectoryPartition createDefaultDirectoryPartition() { DirectoryPartition partition = new DirectoryPartition(true, true); partition.setDirectoryId(Directory.DEFAULT); @@ -243,6 +260,11 @@ public abstract class ContactEntryListAdapter extends IndexerListAdapter { } else { mUpperCaseQueryString = SearchUtil.cleanStartAndEndOfSearchQuery(queryString.toUpperCase()); } + + // Enable default partition header if in search mode (including zero-suggest). + if (mQueryString != null) { + setDefaultPartitionHeader(true); + } } public String getUpperCaseQueryString() { @@ -354,9 +376,9 @@ public abstract class ContactEntryListAdapter extends IndexerListAdapter { if (cursor.getCount() == 0) { // Directory table must have at least local directory, without which this adapter will // enter very weird state. - Log.e( - TAG, - "Directory search loader returned an empty cursor, which implies we have " + LogUtil.i( + "ContactEntryListAdapter.changeDirectories", + "directory search loader returned an empty cursor, which implies we have " + "no directory entries.", new RuntimeException()); return; @@ -529,22 +551,27 @@ public abstract class ContactEntryListAdapter extends IndexerListAdapter { return false; } - /** Changes visibility parameters for the default directory partition. */ - public void configureDefaultPartition(boolean showIfEmpty, boolean hasHeader) { + /** Configures visibility parameters for the directory partitions. */ + public void configurePartitionsVisibility(boolean isInSearchMode) { + for (int i = 0; i < getPartitionCount(); i++) { + setShowIfEmpty(i, false); + setHasHeader(i, isInSearchMode); + } + } + + // Sets header for the default partition. + private void setDefaultPartitionHeader(boolean setHeader) { + // Iterate in reverse here to ensure the first DEFAULT directory has header. + // Both "Suggestions" and "All Contacts" directories have DEFAULT id. int defaultPartitionIndex = -1; - int count = getPartitionCount(); - for (int i = 0; i < count; i++) { + for (int i = getPartitionCount() - 1; i >= 0; i--) { Partition partition = getPartition(i); if (partition instanceof DirectoryPartition && ((DirectoryPartition) partition).getDirectoryId() == Directory.DEFAULT) { defaultPartitionIndex = i; - break; } } - if (defaultPartitionIndex != -1) { - setShowIfEmpty(defaultPartitionIndex, showIfEmpty); - setHasHeader(defaultPartitionIndex, hasHeader); - } + setHasHeader(defaultPartitionIndex, setHeader); } @Override @@ -678,6 +705,9 @@ public abstract class ContactEntryListAdapter extends IndexerListAdapter { // mimetype here is reasonable. quickContact.setPrioritizedMimeType(Phone.CONTENT_ITEM_TYPE); } + Logger.get(mContext) + .logQuickContactOnTouch( + quickContact, InteractionEvent.Type.OPEN_QUICK_CONTACT_FROM_SEARCH, true); if (photoId != 0 || photoUriColumn == -1) { getPhotoLoader().loadThumbnail(quickContact, photoId, mDarkTheme, mCircularPhotos, null); diff --git a/java/com/android/contacts/common/list/ContactEntryListFragment.java b/java/com/android/contacts/common/list/ContactEntryListFragment.java index 278175c0b..04658be89 100644 --- a/java/com/android/contacts/common/list/ContactEntryListFragment.java +++ b/java/com/android/contacts/common/list/ContactEntryListFragment.java @@ -47,6 +47,7 @@ import com.android.contacts.common.ContactPhotoManager; import com.android.contacts.common.preference.ContactsPreferences; import com.android.contacts.common.util.ContactListViewUtils; import com.android.dialer.common.LogUtil; +import com.android.dialer.performancereport.PerformanceReport; import java.lang.ref.WeakReference; import java.util.Locale; @@ -440,6 +441,11 @@ public abstract class ContactEntryListFragment 0) { + return; + } + mAdapter.changeCursor(partitionIndex, data); setProfileHeader(); @@ -555,7 +561,6 @@ public abstract class ContactEntryListFragment(); - mNumberHighlightSequence = new ArrayList<>(); - } - - public ContactListItemView( - Context context, - AttributeSet attrs, - boolean supportVideoCallIcon, - boolean supportCallAndShare) { + public ContactListItemView(Context context, AttributeSet attrs, boolean supportVideoCallIcon) { this(context, attrs); mSupportVideoCall = supportVideoCallIcon; - mSupportCallAndShare = supportCallAndShare; } public ContactListItemView(Context context, AttributeSet attrs) { @@ -284,19 +273,20 @@ public class ContactListItemView extends ViewGroup implements SelectionBoundsAdj mNameHighlightSequence = new ArrayList<>(); mNumberHighlightSequence = new ArrayList<>(); + mCallToActionView = new ImageView(getContext()); + mCallToActionView.setId(R.id.call_to_action); + mCallToActionView.setLayoutParams(new LayoutParams(mCallToActionSize, mCallToActionSize)); + mCallToActionView.setScaleType(ScaleType.CENTER); + mCallToActionView.setImageTintList( + ContextCompat.getColorStateList(getContext(), R.color.search_video_call_icon_tint)); + addView(mCallToActionView); + setLayoutDirection(View.LAYOUT_DIRECTION_LOCALE); } - public static PhotoPosition getDefaultPhotoPosition(boolean opposite) { - final Locale locale = Locale.getDefault(); - final int layoutDirection = TextUtils.getLayoutDirectionFromLocale(locale); - switch (layoutDirection) { - case View.LAYOUT_DIRECTION_RTL: - return (opposite ? PhotoPosition.LEFT : PhotoPosition.RIGHT); - case View.LAYOUT_DIRECTION_LTR: - default: - return (opposite ? PhotoPosition.RIGHT : PhotoPosition.LEFT); - } + public static PhotoPosition getDefaultPhotoPosition() { + int layoutDirection = TextUtils.getLayoutDirectionFromLocale(Locale.getDefault()); + return layoutDirection == View.LAYOUT_DIRECTION_RTL ? PhotoPosition.RIGHT : PhotoPosition.LEFT; } /** @@ -333,35 +323,47 @@ public class ContactListItemView extends ViewGroup implements SelectionBoundsAdj * @param position The position in the adapter of the call to action. */ public void setCallToAction(@CallToAction int action, Listener listener, int position) { - int drawable; + mCallToAction = action; + mPosition = position; + + Drawable drawable; int description; OnClickListener onClickListener; - if (action == CALL_AND_SHARE && mSupportCallAndShare) { - drawable = R.drawable.ic_call_and_share; - description = R.string.description_search_video_call; + if (action == CALL_AND_SHARE) { + drawable = ContextCompat.getDrawable(getContext(), R.drawable.ic_phone_attach); + drawable.setAutoMirrored(true); + description = R.string.description_search_call_and_share; onClickListener = v -> listener.onCallAndShareIconClicked(position); } else if (action == VIDEO && mSupportVideoCall) { - drawable = R.drawable.ic_search_video_call; - description = R.string.description_search_call_and_share; + drawable = + ContextCompat.getDrawable(getContext(), R.drawable.quantum_ic_videocam_vd_theme_24); + drawable.setAutoMirrored(true); + description = R.string.description_search_video_call; onClickListener = v -> listener.onVideoCallIconClicked(position); + } else if (action == LIGHTBRINGER) { + drawable = + ContextCompat.getDrawable(getContext(), R.drawable.quantum_ic_videocam_vd_theme_24); + drawable.setAutoMirrored(true); + description = R.string.description_search_video_call; + onClickListener = v -> listener.onLightbringerIconClicked(position); } else { - if (mCallToAction != null) { - mCallToAction.setVisibility(View.GONE); - mCallToAction.setOnClickListener(null); - } + mCallToActionView.setVisibility(View.GONE); + mCallToActionView.setOnClickListener(null); return; } - if (mCallToAction == null) { - mCallToAction = new ImageView(getContext()); - mCallToAction.setLayoutParams(new LayoutParams(mCallToActionSize, mCallToActionSize)); - mCallToAction.setScaleType(ScaleType.CENTER); - addView(mCallToAction); - } - mCallToAction.setContentDescription(getContext().getString(description)); - mCallToAction.setOnClickListener(onClickListener); - mCallToAction.setImageResource(drawable); - mCallToAction.setVisibility(View.VISIBLE); + mCallToActionView.setContentDescription(getContext().getString(description)); + mCallToActionView.setOnClickListener(onClickListener); + mCallToActionView.setImageDrawable(drawable); + mCallToActionView.setVisibility(View.VISIBLE); + } + + public @CallToAction int getCallToAction() { + return mCallToAction; + } + + public int getPosition() { + return mPosition; } /** @@ -376,18 +378,6 @@ public class ContactListItemView extends ViewGroup implements SelectionBoundsAdj mSupportVideoCall = supportVideoCall; } - /** - * Sets whether the view supports a call and share icon. This is independent of whether the view - * is actually showing an icon. Support for the icon ensures that the layout leaves space for it, - * should it be shown. - * - * @param supportCallAndShare {@code true} if the call and share icon is supported, {@code false} - * otherwise. - */ - public void setSupportCallAndShareIcon(boolean supportCallAndShare) { - mSupportCallAndShare = supportCallAndShare; - } - @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // We will match parent's width and wrap content vertically, but make sure @@ -423,9 +413,7 @@ public class ContactListItemView extends ViewGroup implements SelectionBoundsAdj effectiveWidth -= mHeaderWidth + mGapBetweenImageAndText; } - if (mSupportVideoCall || mSupportCallAndShare) { - effectiveWidth -= (mCallToActionSize + mCallToActionMargin); - } + effectiveWidth -= (mCallToActionSize + mCallToActionMargin); // Go over all visible text views and measure actual width of each of them. // Also calculate their heights to get the total height for this entire view. @@ -496,11 +484,9 @@ public class ContactListItemView extends ViewGroup implements SelectionBoundsAdj mStatusTextViewHeight = mPresenceIcon.getMeasuredHeight(); } - if ((mSupportVideoCall || mSupportCallAndShare) && isVisible(mCallToAction)) { - mCallToAction.measure( - MeasureSpec.makeMeasureSpec(mCallToActionSize, MeasureSpec.EXACTLY), - MeasureSpec.makeMeasureSpec(mCallToActionSize, MeasureSpec.EXACTLY)); - } + mCallToActionView.measure( + MeasureSpec.makeMeasureSpec(mCallToActionSize, MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(mCallToActionSize, MeasureSpec.EXACTLY)); if (isVisible(mWorkProfileIcon)) { mWorkProfileIcon.measure( @@ -629,34 +615,30 @@ public class ContactListItemView extends ViewGroup implements SelectionBoundsAdj leftBound += mTextIndent; } - if (mSupportVideoCall || mSupportCallAndShare) { - // Place the call to action at the end of the list (e.g. take into account RTL mode). - if (isVisible(mCallToAction)) { - // Center the icon vertically - final int callToActionTop = topBound + (height - topBound - mCallToActionSize) / 2; + // Place the call to action at the end of the list (e.g. take into account RTL mode). + // Center the icon vertically + final int callToActionTop = topBound + (height - topBound - mCallToActionSize) / 2; - if (!isLayoutRtl) { - // When photo is on left, icon is placed on the right edge. - mCallToAction.layout( - rightBound - mCallToActionSize, - callToActionTop, - rightBound, - callToActionTop + mCallToActionSize); - } else { - // When photo is on right, icon is placed on the left edge. - mCallToAction.layout( - leftBound, - callToActionTop, - leftBound + mCallToActionSize, - callToActionTop + mCallToActionSize); - } - } + if (!isLayoutRtl) { + // When photo is on left, icon is placed on the right edge. + mCallToActionView.layout( + rightBound - mCallToActionSize, + callToActionTop, + rightBound, + callToActionTop + mCallToActionSize); + } else { + // When photo is on right, icon is placed on the left edge. + mCallToActionView.layout( + leftBound, + callToActionTop, + leftBound + mCallToActionSize, + callToActionTop + mCallToActionSize); + } - if (mPhotoPosition == PhotoPosition.LEFT) { - rightBound -= (mCallToActionSize + mCallToActionMargin); - } else { - leftBound += mCallToActionSize + mCallToActionMargin; - } + if (mPhotoPosition == PhotoPosition.LEFT) { + rightBound -= (mCallToActionSize + mCallToActionMargin); + } else { + leftBound += mCallToActionSize + mCallToActionMargin; } // Center text vertically, then apply the top offset. @@ -901,9 +883,7 @@ public class ContactListItemView extends ViewGroup implements SelectionBoundsAdj } if (mQuickContact == null) { mQuickContact = new QuickContactBadge(getContext()); - if (CompatUtils.isLollipopCompatible()) { - mQuickContact.setOverlay(null); - } + mQuickContact.setOverlay(null); mQuickContact.setLayoutParams(getDefaultPhotoLayoutParams()); if (mNameTextView != null) { mQuickContact.setContentDescription( @@ -1008,9 +988,7 @@ public class ContactListItemView extends ViewGroup implements SelectionBoundsAdj mNameTextView.setGravity(Gravity.CENTER_VERTICAL); mNameTextView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START); mNameTextView.setId(R.id.cliv_name_textview); - if (CompatUtils.isLollipopCompatible()) { - mNameTextView.setElegantTextHeight(false); - } + mNameTextView.setElegantTextHeight(false); addView(mNameTextView); } return mNameTextView; @@ -1056,6 +1034,7 @@ public class ContactListItemView extends ViewGroup implements SelectionBoundsAdj * exists. */ public void setPhoneNumber(String text) { + mPhoneNumber = text; if (text == null) { if (mDataView != null) { mDataView.setVisibility(View.GONE); @@ -1086,6 +1065,10 @@ public class ContactListItemView extends ViewGroup implements SelectionBoundsAdj } } + public String getPhoneNumber() { + return mPhoneNumber; + } + private void setMarqueeText(TextView textView, CharSequence text) { if (getTextEllipsis() == TruncateAt.MARQUEE) { // To show MARQUEE correctly (with END effect during non-active state), we need @@ -1109,9 +1092,7 @@ public class ContactListItemView extends ViewGroup implements SelectionBoundsAdj mDataView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START); mDataView.setActivated(isActivated()); mDataView.setId(R.id.cliv_data_view); - if (CompatUtils.isLollipopCompatible()) { - mDataView.setElegantTextHeight(false); - } + mDataView.setElegantTextHeight(false); addView(mDataView); } return mDataView; @@ -1469,28 +1450,17 @@ public class ContactListItemView extends ViewGroup implements SelectionBoundsAdj forceLayout(); } - public void setPhotoPosition(PhotoPosition photoPosition) { - mPhotoPosition = photoPosition; - } - /** * Set drawable resources directly for the drawable resource of the photo view. * - * @param drawableId Id of drawable resource. + * @param drawable A drawable resource. */ - public void setDrawableResource(int drawableId) { + public void setDrawable(Drawable drawable) { ImageView photo = getPhotoView(); photo.setScaleType(ImageView.ScaleType.CENTER); - final Drawable drawable = ContextCompat.getDrawable(getContext(), drawableId); - final int iconColor = ContextCompat.getColor(getContext(), R.color.search_shortcut_icon_color); - if (CompatUtils.isLollipopCompatible()) { - photo.setImageDrawable(drawable); - photo.setImageTintList(ColorStateList.valueOf(iconColor)); - } else { - final Drawable drawableWrapper = DrawableCompat.wrap(drawable).mutate(); - DrawableCompat.setTint(drawableWrapper, iconColor); - photo.setImageDrawable(drawableWrapper); - } + int iconColor = ContextCompat.getColor(getContext(), R.color.search_shortcut_icon_color); + photo.setImageDrawable(drawable); + photo.setImageTintList(ColorStateList.valueOf(iconColor)); } @Override diff --git a/java/com/android/contacts/common/list/ContactTileView.java b/java/com/android/contacts/common/list/ContactTileView.java index 9273b0583..15582d684 100644 --- a/java/com/android/contacts/common/list/ContactTileView.java +++ b/java/com/android/contacts/common/list/ContactTileView.java @@ -19,7 +19,6 @@ import android.content.Context; import android.graphics.Rect; import android.net.Uri; import android.util.AttributeSet; -import android.util.Log; import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; @@ -28,6 +27,9 @@ import com.android.contacts.common.ContactPhotoManager; import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest; import com.android.contacts.common.MoreContactUtils; import com.android.contacts.common.R; +import com.android.dialer.callintent.CallInitiationType; +import com.android.dialer.callintent.CallSpecificAppData; +import com.android.dialer.common.LogUtil; /** A ContactTile displays a contact's picture and name */ public abstract class ContactTileView extends FrameLayout { @@ -60,8 +62,14 @@ public abstract class ContactTileView extends FrameLayout { if (mListener == null) { return; } + CallSpecificAppData callSpecificAppData = + CallSpecificAppData.newBuilder() + .setCallInitiationType(CallInitiationType.Type.SPEED_DIAL) + .build(); mListener.onContactSelected( - getLookupUri(), MoreContactUtils.getTargetRectFromView(ContactTileView.this)); + getLookupUri(), + MoreContactUtils.getTargetRectFromView(ContactTileView.this), + callSpecificAppData); } }; } @@ -97,7 +105,7 @@ public abstract class ContactTileView extends FrameLayout { } } else { - Log.w(TAG, "contactPhotoManager not set"); + LogUtil.w(TAG, "contactPhotoManager not set"); } } else { setVisibility(View.INVISIBLE); @@ -163,9 +171,10 @@ public abstract class ContactTileView extends FrameLayout { public interface Listener { /** Notification that the contact was selected; no specific action is dictated. */ - void onContactSelected(Uri contactLookupUri, Rect viewRect); + void onContactSelected( + Uri contactLookupUri, Rect viewRect, CallSpecificAppData callSpecificAppData); /** Notification that the specified number is to be called. */ - void onCallNumberDirectly(String phoneNumber); + void onCallNumberDirectly(String phoneNumber, CallSpecificAppData callSpecificAppData); } } diff --git a/java/com/android/contacts/common/list/PhoneNumberListAdapter.java b/java/com/android/contacts/common/list/PhoneNumberListAdapter.java index 9a490d78a..d1118c3c7 100644 --- a/java/com/android/contacts/common/list/PhoneNumberListAdapter.java +++ b/java/com/android/contacts/common/list/PhoneNumberListAdapter.java @@ -30,7 +30,6 @@ import android.provider.ContactsContract.Directory; import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; -import com.android.contacts.common.ContactPhotoManager; import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest; import com.android.contacts.common.ContactsUtils; import com.android.contacts.common.R; @@ -38,15 +37,17 @@ import com.android.contacts.common.compat.CallableCompat; import com.android.contacts.common.compat.DirectoryCompat; import com.android.contacts.common.compat.PhoneCompat; import com.android.contacts.common.extensions.PhoneDirectoryExtenderAccessor; +import com.android.contacts.common.lettertiles.LetterTileDrawable; import com.android.contacts.common.list.ContactListItemView.CallToAction; import com.android.contacts.common.preference.ContactsPreferences; import com.android.contacts.common.util.Constants; -import com.android.dialer.callcomposer.CallComposerContact; import com.android.dialer.common.LogUtil; import com.android.dialer.compat.CompatUtils; +import com.android.dialer.dialercontact.DialerContact; import com.android.dialer.enrichedcall.EnrichedCallCapabilities; import com.android.dialer.enrichedcall.EnrichedCallComponent; import com.android.dialer.enrichedcall.EnrichedCallManager; +import com.android.dialer.lightbringer.LightbringerComponent; import com.android.dialer.location.GeoUtil; import com.android.dialer.util.CallUtil; import java.util.ArrayList; @@ -68,16 +69,14 @@ public class PhoneNumberListAdapter extends ContactEntryListAdapter { // A list of extended directories to add to the directories from the database private final List mExtendedDirectories; private final CharSequence mUnknownNameText; - private final boolean mCallAndShareEnabled; + protected final boolean mIsImsVideoEnabled; + // Extended directories will have ID's that are higher than any of the id's from the database, // so that we can identify them and set them up properly. If no extended directories // exist, this will be Long.MAX_VALUE private long mFirstExtendedDirectoryId = Long.MAX_VALUE; - private ContactListItemView.PhotoPosition mPhotoPosition; private boolean mUseCallableUri; private Listener mListener; - private boolean mIsVideoEnabled; - private boolean mIsPresenceEnabled; public PhoneNumberListAdapter(Context context) { super(context); @@ -88,11 +87,9 @@ public class PhoneNumberListAdapter extends ContactEntryListAdapter { PhoneDirectoryExtenderAccessor.get(mContext).getExtendedDirectories(mContext); int videoCapabilities = CallUtil.getVideoCallingAvailability(context); - mIsVideoEnabled = (videoCapabilities & CallUtil.VIDEO_CALLING_ENABLED) != 0; - mIsPresenceEnabled = (videoCapabilities & CallUtil.VIDEO_CALLING_PRESENCE) != 0; - - // TODO - mCallAndShareEnabled = true; + mIsImsVideoEnabled = + CallUtil.isVideoEnabled(context) + && (videoCapabilities & CallUtil.VIDEO_CALLING_PRESENCE) != 0; } @Override @@ -249,10 +246,10 @@ public class PhoneNumberListAdapter extends ContactEntryListAdapter { return item != null ? item.getString(PhoneQuery.LOOKUP_KEY) : null; } - public CallComposerContact getCallComposerContact(int position) { + public DialerContact getDialerContact(int position) { Cursor cursor = (Cursor) getItem(position); if (cursor == null) { - LogUtil.e("PhoneNumberListAdapter.getCallComposerContact", "cursor was null."); + LogUtil.e("PhoneNumberListAdapter.getDialerContact", "cursor was null."); return null; } @@ -263,11 +260,11 @@ public class PhoneNumberListAdapter extends ContactEntryListAdapter { Contacts.getLookupUri( cursor.getLong(PhoneQuery.CONTACT_ID), cursor.getString(PhoneQuery.LOOKUP_KEY)); - CallComposerContact.Builder contact = CallComposerContact.newBuilder(); + DialerContact.Builder contact = DialerContact.newBuilder(); contact .setNumber(number) .setPhotoId(cursor.getLong(PhoneQuery.PHOTO_ID)) - .setContactType(ContactPhotoManager.TYPE_DEFAULT) + .setContactType(LetterTileDrawable.TYPE_DEFAULT) .setNameOrNumber(displayName) .setNumberLabel( Phone.getTypeLabel( @@ -297,7 +294,6 @@ public class PhoneNumberListAdapter extends ContactEntryListAdapter { ContactListItemView view = super.newView(context, partition, cursor, position, parent); view.setUnknownNameText(mUnknownNameText); view.setQuickContactEnabled(isQuickContactEnabled()); - view.setPhotoPosition(mPhotoPosition); return view; } @@ -355,14 +351,8 @@ public class PhoneNumberListAdapter extends ContactEntryListAdapter { } final DirectoryPartition directory = (DirectoryPartition) getPartition(partition); - - // If the first partition does not have a header, then all subsequent partitions' - // getPositionForPartition returns an index off by 1. - int partitionOffset = 0; - if (partition > 0 && !getPartition(0).getHasHeader()) { - partitionOffset = 1; - } - position += getPositionForPartition(partition) + partitionOffset; + // All sections have headers, so scroll position is off by 1. + position += getPositionForPartition(partition) + 1; bindPhoneNumber(view, cursor, directory.isDisplayNumber(), position); } @@ -401,13 +391,17 @@ public class PhoneNumberListAdapter extends ContactEntryListAdapter { int carrierPresence = cursor.getInt(PhoneQuery.CARRIER_PRESENCE); boolean isPresent = (carrierPresence & Phone.CARRIER_PRESENCE_VT_CAPABLE) != 0; - boolean isVideoIconShown = mIsVideoEnabled && (!mIsPresenceEnabled || isPresent); - if (isVideoIconShown) { + boolean showViewIcon = mIsImsVideoEnabled && isPresent; + if (showViewIcon) { action = ContactListItemView.VIDEO; } } - if (isCallAndShareEnabled() && action == ContactListItemView.NONE && number != null) { + if (LightbringerComponent.get(mContext).getLightbringer().isReachable(mContext, number)) { + action = ContactListItemView.LIGHTBRINGER; + } + + if (action == ContactListItemView.NONE) { EnrichedCallManager manager = EnrichedCallComponent.get(mContext).getEnrichedCallManager(); EnrichedCallCapabilities capabilities = manager.getCapabilities(number); if (capabilities != null && capabilities.supportsCallComposer()) { @@ -481,14 +475,6 @@ public class PhoneNumberListAdapter extends ContactEntryListAdapter { } } - public ContactListItemView.PhotoPosition getPhotoPosition() { - return mPhotoPosition; - } - - public void setPhotoPosition(ContactListItemView.PhotoPosition photoPosition) { - mPhotoPosition = photoPosition; - } - public void setUseCallableUri(boolean useCallableUri) { mUseCallableUri = useCallableUri; } @@ -570,14 +556,12 @@ public class PhoneNumberListAdapter extends ContactEntryListAdapter { mListener = listener; } - public boolean isCallAndShareEnabled() { - return mCallAndShareEnabled; - } - public interface Listener { void onVideoCallIconClicked(int position); + void onLightbringerIconClicked(int position); + void onCallAndShareIconClicked(int position); } @@ -642,18 +626,14 @@ public class PhoneNumberListAdapter extends ContactEntryListAdapter { static { final List projectionList = new ArrayList<>(Arrays.asList(PROJECTION_PRIMARY_INTERNAL)); - if (CompatUtils.isMarshmallowCompatible()) { - projectionList.add(Phone.CARRIER_PRESENCE); // 9 - } + projectionList.add(Phone.CARRIER_PRESENCE); // 9 PROJECTION_PRIMARY = projectionList.toArray(new String[projectionList.size()]); } static { final List projectionList = new ArrayList<>(Arrays.asList(PROJECTION_ALTERNATIVE_INTERNAL)); - if (CompatUtils.isMarshmallowCompatible()) { - projectionList.add(Phone.CARRIER_PRESENCE); // 9 - } + projectionList.add(Phone.CARRIER_PRESENCE); // 9 PROJECTION_ALTERNATIVE = projectionList.toArray(new String[projectionList.size()]); } } diff --git a/java/com/android/contacts/common/list/PhoneNumberPickerFragment.java b/java/com/android/contacts/common/list/PhoneNumberPickerFragment.java index 8f25f82a5..de7903e83 100644 --- a/java/com/android/contacts/common/list/PhoneNumberPickerFragment.java +++ b/java/com/android/contacts/common/list/PhoneNumberPickerFragment.java @@ -29,16 +29,20 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import com.android.contacts.common.R; +import com.android.contacts.common.list.PhoneNumberListAdapter.Listener; import com.android.contacts.common.util.AccountFilterUtil; -import com.android.dialer.callcomposer.CallComposerContact; 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.dialercontact.DialerContact; import com.android.dialer.enrichedcall.EnrichedCallComponent; import com.android.dialer.enrichedcall.EnrichedCallManager; +import com.android.dialer.lightbringer.LightbringerComponent; +import com.android.dialer.logging.DialerImpression; import com.android.dialer.logging.Logger; +import com.android.dialer.performancereport.PerformanceReport; import com.android.dialer.protos.ProtoParsers; import java.util.Set; import org.json.JSONException; @@ -61,9 +65,6 @@ public class PhoneNumberPickerFragment extends ContactEntryListFragment mLoadFinishedListeners = new ArraySet<>(); private CursorReranker mCursorReranker; @@ -71,7 +72,7 @@ public class PhoneNumberPickerFragment extends ContactEntryListFragment 0 - && loader.getId() != -1) { // skip invalid directory ID of -1 + && loader.getId() == 0) { // only re-rank if a suggestions loader with id of 0. data = mCursorReranker.rerankCursor(data); } super.onLoadFinished(loader, data); @@ -320,7 +337,27 @@ public class PhoneNumberPickerFragment extends ContactEntryListFragment in the future private static final int[] ATTRS = @@ -54,20 +59,6 @@ public class ViewPagerTabs extends HorizontalScrollView implements ViewPager.OnP android.R.attr.textAllCaps }; - static { - if (CompatUtils.isLollipopCompatible()) { - VIEW_BOUNDS_OUTLINE_PROVIDER = - new ViewOutlineProvider() { - @Override - public void getOutline(View view, Outline outline) { - outline.setRect(0, 0, view.getWidth(), view.getHeight()); - } - }; - } else { - VIEW_BOUNDS_OUTLINE_PROVIDER = null; - } - } - /** * Linearlayout that will contain the TextViews serving as tabs. This is the only child of the * parent HorizontalScrollView. @@ -111,10 +102,8 @@ public class ViewPagerTabs extends HorizontalScrollView implements ViewPager.OnP new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT)); a.recycle(); - if (CompatUtils.isLollipopCompatible()) { - // enable shadow casting from view bounds - setOutlineProvider(VIEW_BOUNDS_OUTLINE_PROVIDER); - } + // enable shadow casting from view bounds + setOutlineProvider(VIEW_BOUNDS_OUTLINE_PROVIDER); } public void setViewPager(ViewPager viewPager) { diff --git a/java/com/android/contacts/common/location/CountryDetector.java b/java/com/android/contacts/common/location/CountryDetector.java deleted file mode 100644 index 7d9e42b38..000000000 --- a/java/com/android/contacts/common/location/CountryDetector.java +++ /dev/null @@ -1,221 +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.contacts.common.location; - -import android.app.PendingIntent; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.SharedPreferences; -import android.location.Geocoder; -import android.location.Location; -import android.location.LocationManager; -import android.preference.PreferenceManager; -import android.telephony.TelephonyManager; -import android.text.TextUtils; -import android.util.Log; -import com.android.dialer.util.PermissionsUtil; -import java.util.Locale; - -/** - * This class is used to detect the country where the user is. It is a simplified version of the - * country detector service in the framework. The sources of country location are queried in the - * following order of reliability: - * - *

    - *
  • Mobile network - *
  • Location manager - *
  • SIM's country - *
  • User's default locale - *
- * - * As far as possible this class tries to replicate the behavior of the system's country detector - * service: 1) Order in priority of sources of country location 2) Mobile network information - * provided by CDMA phones is ignored 3) Location information is updated every 12 hours (instead of - * 24 hours in the system) 4) Location updates only uses the {@link - * LocationManager#PASSIVE_PROVIDER} to avoid active use of the GPS 5) If a location is successfully - * obtained and geocoded, we never fall back to use of the SIM's country (for the system, the - * fallback never happens without a reboot) 6) Location is not used if the device does not implement - * a {@link android.location.Geocoder} - */ -public class CountryDetector { - - public static final String KEY_PREFERENCE_TIME_UPDATED = "preference_time_updated"; - public static final String KEY_PREFERENCE_CURRENT_COUNTRY = "preference_current_country"; - private static final String TAG = "CountryDetector"; - // Wait 12 hours between updates - private static final long TIME_BETWEEN_UPDATES_MS = 1000L * 60 * 60 * 12; - // Minimum distance before an update is triggered, in meters. We don't need this to be too - // exact because all we care about is what country the user is in. - private static final long DISTANCE_BETWEEN_UPDATES_METERS = 5000; - private static CountryDetector sInstance; - private final TelephonyManager mTelephonyManager; - private final LocationManager mLocationManager; - private final LocaleProvider mLocaleProvider; - // Used as a default country code when all the sources of country data have failed in the - // exceedingly rare event that the device does not have a default locale set for some reason. - private static final String DEFAULT_COUNTRY_ISO = "US"; - private final Context mContext; - - private CountryDetector(Context context) { - this( - context, - (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE), - (LocationManager) context.getSystemService(Context.LOCATION_SERVICE), - new LocaleProvider()); - } - - private CountryDetector( - Context context, - TelephonyManager telephonyManager, - LocationManager locationManager, - LocaleProvider localeProvider) { - mTelephonyManager = telephonyManager; - mLocationManager = locationManager; - mLocaleProvider = localeProvider; - mContext = context; - - registerForLocationUpdates(context, mLocationManager); - } - - public static void registerForLocationUpdates(Context context, LocationManager locationManager) { - if (!PermissionsUtil.hasLocationPermissions(context)) { - Log.w(TAG, "No location permissions, not registering for location updates."); - return; - } - - if (!Geocoder.isPresent()) { - // Certain devices do not have an implementation of a geocoder - in that case there is - // no point trying to get location updates because we cannot retrieve the country based - // on the location anyway. - return; - } - final Intent activeIntent = new Intent(context, LocationChangedReceiver.class); - final PendingIntent pendingIntent = - PendingIntent.getBroadcast(context, 0, activeIntent, PendingIntent.FLAG_UPDATE_CURRENT); - - locationManager.requestLocationUpdates( - LocationManager.PASSIVE_PROVIDER, - TIME_BETWEEN_UPDATES_MS, - DISTANCE_BETWEEN_UPDATES_METERS, - pendingIntent); - } - - /** - * Returns the instance of the country detector. {@link #initialize(Context)} must have been - * called previously. - * - * @return the initialized country detector. - */ - public static synchronized CountryDetector getInstance(Context context) { - if (sInstance == null) { - sInstance = new CountryDetector(context.getApplicationContext()); - } - return sInstance; - } - - /** Factory method for {@link CountryDetector} that allows the caller to provide mock objects. */ - public CountryDetector getInstanceForTest( - Context context, - TelephonyManager telephonyManager, - LocationManager locationManager, - LocaleProvider localeProvider, - Geocoder geocoder) { - return new CountryDetector(context, telephonyManager, locationManager, localeProvider); - } - - public String getCurrentCountryIso() { - String result = null; - if (isNetworkCountryCodeAvailable()) { - result = getNetworkBasedCountryIso(); - } - if (TextUtils.isEmpty(result)) { - result = getLocationBasedCountryIso(); - } - if (TextUtils.isEmpty(result)) { - result = getSimBasedCountryIso(); - } - if (TextUtils.isEmpty(result)) { - result = getLocaleBasedCountryIso(); - } - if (TextUtils.isEmpty(result)) { - result = DEFAULT_COUNTRY_ISO; - } - return result.toUpperCase(Locale.US); - } - - /** @return the country code of the current telephony network the user is connected to. */ - private String getNetworkBasedCountryIso() { - return mTelephonyManager.getNetworkCountryIso(); - } - - /** @return the geocoded country code detected by the {@link LocationManager}. */ - private String getLocationBasedCountryIso() { - if (!Geocoder.isPresent() || !PermissionsUtil.hasLocationPermissions(mContext)) { - return null; - } - final SharedPreferences sharedPreferences = - PreferenceManager.getDefaultSharedPreferences(mContext); - return sharedPreferences.getString(KEY_PREFERENCE_CURRENT_COUNTRY, null); - } - - /** @return the country code of the SIM card currently inserted in the device. */ - private String getSimBasedCountryIso() { - return mTelephonyManager.getSimCountryIso(); - } - - /** @return the country code of the user's currently selected locale. */ - private String getLocaleBasedCountryIso() { - Locale defaultLocale = mLocaleProvider.getDefaultLocale(); - if (defaultLocale != null) { - return defaultLocale.getCountry(); - } - return null; - } - - private boolean isNetworkCountryCodeAvailable() { - // On CDMA TelephonyManager.getNetworkCountryIso() just returns the SIM's country code. - // In this case, we want to ignore the value returned and fallback to location instead. - return mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM; - } - - /** - * Class that can be used to return the user's default locale. This is in its own class so that it - * can be mocked out. - */ - public static class LocaleProvider { - - public Locale getDefaultLocale() { - return Locale.getDefault(); - } - } - - public static class LocationChangedReceiver extends BroadcastReceiver { - - @Override - public void onReceive(final Context context, Intent intent) { - if (!intent.hasExtra(LocationManager.KEY_LOCATION_CHANGED)) { - return; - } - - final Location location = - (Location) intent.getExtras().get(LocationManager.KEY_LOCATION_CHANGED); - - UpdateCountryService.updateCountry(context, location); - } - } -} diff --git a/java/com/android/contacts/common/location/UpdateCountryService.java b/java/com/android/contacts/common/location/UpdateCountryService.java deleted file mode 100644 index f23e09e20..000000000 --- a/java/com/android/contacts/common/location/UpdateCountryService.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. - */ - -package com.android.contacts.common.location; - -import android.app.IntentService; -import android.content.Context; -import android.content.Intent; -import android.content.SharedPreferences; -import android.content.SharedPreferences.Editor; -import android.location.Address; -import android.location.Geocoder; -import android.location.Location; -import android.preference.PreferenceManager; -import android.util.Log; -import java.io.IOException; -import java.util.List; - -/** - * Service used to perform asynchronous geocoding from within a broadcast receiver. Given a {@link - * Location}, convert it into a country code, and save it in shared preferences. - */ -public class UpdateCountryService extends IntentService { - - private static final String TAG = UpdateCountryService.class.getSimpleName(); - - private static final String ACTION_UPDATE_COUNTRY = "saveCountry"; - - private static final String KEY_INTENT_LOCATION = "location"; - - public UpdateCountryService() { - super(TAG); - } - - public static void updateCountry(Context context, Location location) { - final Intent serviceIntent = new Intent(context, UpdateCountryService.class); - serviceIntent.setAction(ACTION_UPDATE_COUNTRY); - serviceIntent.putExtra(UpdateCountryService.KEY_INTENT_LOCATION, location); - context.startService(serviceIntent); - } - - @Override - protected void onHandleIntent(Intent intent) { - if (intent == null) { - Log.d(TAG, "onHandleIntent: could not handle null intent"); - return; - } - if (ACTION_UPDATE_COUNTRY.equals(intent.getAction())) { - final Location location = intent.getParcelableExtra(KEY_INTENT_LOCATION); - final String country = getCountryFromLocation(getApplicationContext(), location); - - if (country == null) { - return; - } - - final SharedPreferences prefs = - PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); - - final Editor editor = prefs.edit(); - editor.putLong(CountryDetector.KEY_PREFERENCE_TIME_UPDATED, System.currentTimeMillis()); - editor.putString(CountryDetector.KEY_PREFERENCE_CURRENT_COUNTRY, country); - editor.commit(); - } - } - - /** - * Given a {@link Location}, return a country code. - * - * @return the ISO 3166-1 two letter country code - */ - private String getCountryFromLocation(Context context, Location location) { - final Geocoder geocoder = new Geocoder(context); - String country = null; - try { - double latitude = location.getLatitude(); - // Latitude has to be between 90 and -90 (latitude of north and south poles wrt equator) - if (latitude <= 90 && latitude >= -90) { - final List
addresses = - geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1); - if (addresses != null && addresses.size() > 0) { - country = addresses.get(0).getCountryCode(); - } - } else { - Log.w(TAG, "Invalid latitude"); - } - } catch (IOException e) { - Log.w(TAG, "Exception occurred when getting geocoded country from location"); - } - return country; - } -} diff --git a/java/com/android/contacts/common/model/ContactLoader.java b/java/com/android/contacts/common/model/ContactLoader.java index 55464b161..7ef3b73a0 100644 --- a/java/com/android/contacts/common/model/ContactLoader.java +++ b/java/com/android/contacts/common/model/ContactLoader.java @@ -522,6 +522,7 @@ public class ContactLoader extends AsyncTaskLoader { cursorColumnToContentValues(cursor, cv, ContactQuery.TIMES_USED); cursorColumnToContentValues(cursor, cv, ContactQuery.LAST_TIME_USED); cursorColumnToContentValues(cursor, cv, ContactQuery.CARRIER_PRESENCE); + return cv; } diff --git a/java/com/android/contacts/common/model/account/AccountType.java b/java/com/android/contacts/common/model/account/AccountType.java index 1ae485a5f..ed0d421a9 100644 --- a/java/com/android/contacts/common/model/account/AccountType.java +++ b/java/com/android/contacts/common/model/account/AccountType.java @@ -25,6 +25,7 @@ import android.provider.ContactsContract.CommonDataKinds.StructuredPostal; import android.provider.ContactsContract.Contacts; import android.provider.ContactsContract.RawContacts; import android.support.annotation.VisibleForTesting; +import android.support.v4.content.ContextCompat; import android.util.ArrayMap; import android.view.inputmethod.EditorInfo; import android.widget.EditText; @@ -113,7 +114,7 @@ public abstract class AccountType { final PackageManager pm = context.getPackageManager(); return pm.getDrawable(syncAdapterPackageName, iconRes, null); } else if (titleRes != -1) { - return context.getResources().getDrawable(iconRes); + return ContextCompat.getDrawable(context, iconRes); } else { return null; } diff --git a/java/com/android/contacts/common/model/account/BaseAccountType.java b/java/com/android/contacts/common/model/account/BaseAccountType.java index 8e9ba738c..ccdad3641 100644 --- a/java/com/android/contacts/common/model/account/BaseAccountType.java +++ b/java/com/android/contacts/common/model/account/BaseAccountType.java @@ -307,7 +307,7 @@ public abstract class BaseAccountType extends AccountType { DataKind kind = addKind( new DataKind(Phone.CONTENT_ITEM_TYPE, R.string.phoneLabelsGroup, Weight.PHONE, true)); - kind.iconAltRes = R.drawable.quantum_ic_message_white_24; + kind.iconAltRes = R.drawable.quantum_ic_message_vd_theme_24; kind.iconAltDescriptionRes = R.string.sms; kind.actionHeader = new PhoneActionInflater(); kind.actionAltHeader = new PhoneActionAltInflater(); @@ -1228,7 +1228,7 @@ public abstract class BaseAccountType extends AccountType { new PhoneActionInflater(), new SimpleInflater(Phone.NUMBER)); - kind.iconAltRes = R.drawable.quantum_ic_message_white_24; + kind.iconAltRes = R.drawable.quantum_ic_message_vd_theme_24; kind.iconAltDescriptionRes = R.string.sms; kind.actionAltHeader = new PhoneActionAltInflater(); 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 deleted file mode 100644 index d86b2195a..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/ic_ab_search.png and /dev/null 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 deleted file mode 100644 index ddbb2c459..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/ic_arrow_back_24dp.png and /dev/null 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 deleted file mode 100644 index d5942dcad..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/ic_business_white_120dp.png and /dev/null 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 deleted file mode 100644 index 4dc506515..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/ic_call_24dp.png and /dev/null 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 deleted file mode 100644 index 969552935..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/ic_close_dk.png and /dev/null 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 deleted file mode 100644 index 540ab4dee..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/ic_create_24dp.png and /dev/null 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 deleted file mode 100644 index 017e4bbf7..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/ic_group_white_24dp.png and /dev/null 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 deleted file mode 100644 index 703d30b92..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/ic_history_white_drawable_24dp.png and /dev/null 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 deleted file mode 100644 index c7b1113cf..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/ic_info_outline_24dp.png and /dev/null 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 deleted file mode 100644 index deb3a6dc1..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_back.png and /dev/null 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 deleted file mode 100644 index 06bd18fbb..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_group_dk.png and /dev/null 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 deleted file mode 100644 index d829d11e2..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_group_lt.png and /dev/null 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 deleted file mode 100644 index 1ba12950c..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_overflow_lt.png and /dev/null 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 deleted file mode 100644 index 5ff3ac574..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_person_dk.png and /dev/null 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 deleted file mode 100644 index b4ebfc7b2..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_person_lt.png and /dev/null 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 deleted file mode 100644 index 03fd2fb10..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_remove_field_holo_light.png and /dev/null 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 deleted file mode 100644 index e8cb0f5fe..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_star_dk.png and /dev/null 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 deleted file mode 100644 index 45137967c..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_star_holo_light.png and /dev/null 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 deleted file mode 100644 index 1c9bb81fa..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/ic_menu_star_lt.png and /dev/null 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 deleted file mode 100644 index 56708b0ba..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/ic_person_24dp.png and /dev/null 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 deleted file mode 100644 index ccdda6701..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/ic_rx_videocam.png and /dev/null 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 deleted file mode 100644 index 603ddc895..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/ic_tx_videocam.png and /dev/null 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 deleted file mode 100644 index 97905c9f5..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/ic_videocam.png and /dev/null 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 deleted file mode 100644 index 2121878ae..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/ic_voicemail_avatar.png and /dev/null 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 deleted file mode 100644 index 4ea7afa00..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/list_activated_holo.9.png and /dev/null 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 deleted file mode 100644 index cddf9be75..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/list_background_holo.9.png and /dev/null 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 deleted file mode 100644 index 86578be45..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/list_focused_holo.9.png and /dev/null 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 deleted file mode 100644 index e9afcc924..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/list_longpressed_holo_light.9.png and /dev/null 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 deleted file mode 100644 index 2054530ed..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/list_pressed_holo_light.9.png and /dev/null 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 deleted file mode 100644 index a0f17568e..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/list_section_divider_holo_custom.9.png and /dev/null 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 deleted file mode 100644 index ae937176e..000000000 Binary files a/java/com/android/contacts/common/res/drawable-hdpi/list_title_holo.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-ldrtl-hdpi/list_focused_holo.9.png b/java/com/android/contacts/common/res/drawable-ldrtl-hdpi/list_focused_holo.9.png deleted file mode 100644 index 4139942d6..000000000 Binary files a/java/com/android/contacts/common/res/drawable-ldrtl-hdpi/list_focused_holo.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-ldrtl-hdpi/list_section_divider_holo_custom.9.png b/java/com/android/contacts/common/res/drawable-ldrtl-hdpi/list_section_divider_holo_custom.9.png deleted file mode 100644 index 569d28f54..000000000 Binary files a/java/com/android/contacts/common/res/drawable-ldrtl-hdpi/list_section_divider_holo_custom.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-ldrtl-hdpi/list_title_holo.9.png b/java/com/android/contacts/common/res/drawable-ldrtl-hdpi/list_title_holo.9.png deleted file mode 100644 index 5ec4c96a7..000000000 Binary files a/java/com/android/contacts/common/res/drawable-ldrtl-hdpi/list_title_holo.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-ldrtl-mdpi/list_focused_holo.9.png b/java/com/android/contacts/common/res/drawable-ldrtl-mdpi/list_focused_holo.9.png deleted file mode 100644 index 4139942d6..000000000 Binary files a/java/com/android/contacts/common/res/drawable-ldrtl-mdpi/list_focused_holo.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-ldrtl-mdpi/list_section_divider_holo_custom.9.png b/java/com/android/contacts/common/res/drawable-ldrtl-mdpi/list_section_divider_holo_custom.9.png deleted file mode 100644 index 065ff62ce..000000000 Binary files a/java/com/android/contacts/common/res/drawable-ldrtl-mdpi/list_section_divider_holo_custom.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-ldrtl-mdpi/list_title_holo.9.png b/java/com/android/contacts/common/res/drawable-ldrtl-mdpi/list_title_holo.9.png deleted file mode 100644 index 013d5e711..000000000 Binary files a/java/com/android/contacts/common/res/drawable-ldrtl-mdpi/list_title_holo.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-ldrtl-sw600dp-hdpi/list_activated_holo.9.png b/java/com/android/contacts/common/res/drawable-ldrtl-sw600dp-hdpi/list_activated_holo.9.png deleted file mode 100644 index 947f03cec..000000000 Binary files a/java/com/android/contacts/common/res/drawable-ldrtl-sw600dp-hdpi/list_activated_holo.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-ldrtl-sw600dp-mdpi/list_activated_holo.9.png b/java/com/android/contacts/common/res/drawable-ldrtl-sw600dp-mdpi/list_activated_holo.9.png deleted file mode 100644 index 6d09d7278..000000000 Binary files a/java/com/android/contacts/common/res/drawable-ldrtl-sw600dp-mdpi/list_activated_holo.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-ldrtl-sw600dp-xhdpi/list_activated_holo.9.png b/java/com/android/contacts/common/res/drawable-ldrtl-sw600dp-xhdpi/list_activated_holo.9.png deleted file mode 100644 index 63c7456f0..000000000 Binary files a/java/com/android/contacts/common/res/drawable-ldrtl-sw600dp-xhdpi/list_activated_holo.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-ldrtl-xhdpi/list_focused_holo.9.png b/java/com/android/contacts/common/res/drawable-ldrtl-xhdpi/list_focused_holo.9.png deleted file mode 100644 index 4139942d6..000000000 Binary files a/java/com/android/contacts/common/res/drawable-ldrtl-xhdpi/list_focused_holo.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-ldrtl-xhdpi/list_section_divider_holo_custom.9.png b/java/com/android/contacts/common/res/drawable-ldrtl-xhdpi/list_section_divider_holo_custom.9.png deleted file mode 100644 index af5855420..000000000 Binary files a/java/com/android/contacts/common/res/drawable-ldrtl-xhdpi/list_section_divider_holo_custom.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-ldrtl-xhdpi/list_title_holo.9.png b/java/com/android/contacts/common/res/drawable-ldrtl-xhdpi/list_title_holo.9.png deleted file mode 100644 index cb801ac1b..000000000 Binary files a/java/com/android/contacts/common/res/drawable-ldrtl-xhdpi/list_title_holo.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-mdpi/list_activated_holo.9.png b/java/com/android/contacts/common/res/drawable-mdpi/list_activated_holo.9.png deleted file mode 100644 index 3bf8e0362..000000000 Binary files a/java/com/android/contacts/common/res/drawable-mdpi/list_activated_holo.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-mdpi/list_focused_holo.9.png b/java/com/android/contacts/common/res/drawable-mdpi/list_focused_holo.9.png deleted file mode 100644 index 86578be45..000000000 Binary files a/java/com/android/contacts/common/res/drawable-mdpi/list_focused_holo.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-mdpi/list_longpressed_holo_light.9.png b/java/com/android/contacts/common/res/drawable-mdpi/list_longpressed_holo_light.9.png deleted file mode 100644 index 3226ab760..000000000 Binary files a/java/com/android/contacts/common/res/drawable-mdpi/list_longpressed_holo_light.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-mdpi/list_pressed_holo_light.9.png b/java/com/android/contacts/common/res/drawable-mdpi/list_pressed_holo_light.9.png deleted file mode 100644 index 061904c42..000000000 Binary files a/java/com/android/contacts/common/res/drawable-mdpi/list_pressed_holo_light.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-mdpi/list_section_divider_holo_custom.9.png b/java/com/android/contacts/common/res/drawable-mdpi/list_section_divider_holo_custom.9.png deleted file mode 100644 index 1d9371de0..000000000 Binary files a/java/com/android/contacts/common/res/drawable-mdpi/list_section_divider_holo_custom.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-sw600dp-hdpi/list_activated_holo.9.png b/java/com/android/contacts/common/res/drawable-sw600dp-hdpi/list_activated_holo.9.png deleted file mode 100644 index 046b24a96..000000000 Binary files a/java/com/android/contacts/common/res/drawable-sw600dp-hdpi/list_activated_holo.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-sw600dp-mdpi/list_activated_holo.9.png b/java/com/android/contacts/common/res/drawable-sw600dp-mdpi/list_activated_holo.9.png deleted file mode 100644 index 1ff337370..000000000 Binary files a/java/com/android/contacts/common/res/drawable-sw600dp-mdpi/list_activated_holo.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-sw600dp-xhdpi/list_activated_holo.9.png b/java/com/android/contacts/common/res/drawable-sw600dp-xhdpi/list_activated_holo.9.png deleted file mode 100644 index 2eb7c7ebc..000000000 Binary files a/java/com/android/contacts/common/res/drawable-sw600dp-xhdpi/list_activated_holo.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-xhdpi/list_activated_holo.9.png b/java/com/android/contacts/common/res/drawable-xhdpi/list_activated_holo.9.png deleted file mode 100644 index eda10e612..000000000 Binary files a/java/com/android/contacts/common/res/drawable-xhdpi/list_activated_holo.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-xhdpi/list_focused_holo.9.png b/java/com/android/contacts/common/res/drawable-xhdpi/list_focused_holo.9.png deleted file mode 100644 index 86578be45..000000000 Binary files a/java/com/android/contacts/common/res/drawable-xhdpi/list_focused_holo.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-xhdpi/list_longpressed_holo_light.9.png b/java/com/android/contacts/common/res/drawable-xhdpi/list_longpressed_holo_light.9.png deleted file mode 100644 index 5532e88c2..000000000 Binary files a/java/com/android/contacts/common/res/drawable-xhdpi/list_longpressed_holo_light.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-xhdpi/list_pressed_holo_light.9.png b/java/com/android/contacts/common/res/drawable-xhdpi/list_pressed_holo_light.9.png deleted file mode 100644 index f4af92657..000000000 Binary files a/java/com/android/contacts/common/res/drawable-xhdpi/list_pressed_holo_light.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-xhdpi/list_section_divider_holo_custom.9.png b/java/com/android/contacts/common/res/drawable-xhdpi/list_section_divider_holo_custom.9.png deleted file mode 100644 index 8fb0636cf..000000000 Binary files a/java/com/android/contacts/common/res/drawable-xhdpi/list_section_divider_holo_custom.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-xxhdpi/list_activated_holo.9.png b/java/com/android/contacts/common/res/drawable-xxhdpi/list_activated_holo.9.png deleted file mode 100644 index 52c00ddcd..000000000 Binary files a/java/com/android/contacts/common/res/drawable-xxhdpi/list_activated_holo.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-xxhdpi/list_focused_holo.9.png b/java/com/android/contacts/common/res/drawable-xxhdpi/list_focused_holo.9.png deleted file mode 100644 index 3e4ca684e..000000000 Binary files a/java/com/android/contacts/common/res/drawable-xxhdpi/list_focused_holo.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-xxhdpi/list_longpressed_holo_light.9.png b/java/com/android/contacts/common/res/drawable-xxhdpi/list_longpressed_holo_light.9.png deleted file mode 100644 index 230d649bf..000000000 Binary files a/java/com/android/contacts/common/res/drawable-xxhdpi/list_longpressed_holo_light.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable-xxhdpi/list_pressed_holo_light.9.png b/java/com/android/contacts/common/res/drawable-xxhdpi/list_pressed_holo_light.9.png deleted file mode 100644 index 1352a1702..000000000 Binary files a/java/com/android/contacts/common/res/drawable-xxhdpi/list_pressed_holo_light.9.png and /dev/null differ diff --git a/java/com/android/contacts/common/res/drawable/ic_back_arrow.xml b/java/com/android/contacts/common/res/drawable/ic_back_arrow.xml deleted file mode 100644 index ecf704e8e..000000000 --- a/java/com/android/contacts/common/res/drawable/ic_back_arrow.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - \ No newline at end of file diff --git a/java/com/android/contacts/common/res/drawable/ic_call_and_share.xml b/java/com/android/contacts/common/res/drawable/ic_call_and_share.xml deleted file mode 100644 index be0cdd358..000000000 --- a/java/com/android/contacts/common/res/drawable/ic_call_and_share.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - \ No newline at end of file diff --git a/java/com/android/contacts/common/res/drawable/ic_person_add_tinted_24dp.xml b/java/com/android/contacts/common/res/drawable/ic_person_add_tinted_24dp.xml deleted file mode 100644 index c2538cfd1..000000000 --- a/java/com/android/contacts/common/res/drawable/ic_person_add_tinted_24dp.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/java/com/android/contacts/common/res/drawable/ic_search_add_contact.xml b/java/com/android/contacts/common/res/drawable/ic_search_add_contact.xml deleted file mode 100644 index 476212d24..000000000 --- a/java/com/android/contacts/common/res/drawable/ic_search_add_contact.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - diff --git a/java/com/android/contacts/common/res/drawable/ic_search_video_call.xml b/java/com/android/contacts/common/res/drawable/ic_search_video_call.xml deleted file mode 100644 index 0fe0367e1..000000000 --- a/java/com/android/contacts/common/res/drawable/ic_search_video_call.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - diff --git a/java/com/android/contacts/common/res/drawable/list_selector_background_transition_holo_light.xml b/java/com/android/contacts/common/res/drawable/list_selector_background_transition_holo_light.xml deleted file mode 100644 index 35fff99c2..000000000 --- a/java/com/android/contacts/common/res/drawable/list_selector_background_transition_holo_light.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - diff --git a/java/com/android/contacts/common/res/layout/dialog_call_subject.xml b/java/com/android/contacts/common/res/layout/dialog_call_subject.xml index a33b2ac85..df8e8d299 100644 --- a/java/com/android/contacts/common/res/layout/dialog_call_subject.xml +++ b/java/com/android/contacts/common/res/layout/dialog_call_subject.xml @@ -129,7 +129,7 @@ android:layout_height="25dp" android:layout_alignParentStart="true" android:layout_centerVertical="true" - android:src="@drawable/quantum_ic_history_white_24" + android:src="@drawable/quantum_ic_history_vd_theme_24" android:tint="@color/call_subject_history_icon"/> diff --git a/java/com/android/contacts/common/res/values-af/strings.xml b/java/com/android/contacts/common/res/values-af/strings.xml index 52e612da9..4ca39cf96 100644 --- a/java/com/android/contacts/common/res/values-af/strings.xml +++ b/java/com/android/contacts/common/res/values-af/strings.xml @@ -70,10 +70,12 @@ "Weg" "Besig" "Kontakte" + "Topvoorgestel" "Ander" "Gids" "Werkgids" "Alle kontakte" + "Voorstelle" "Ek" "Soek tans…" "Meer as %d gevind." @@ -248,7 +250,7 @@ "Tik \'n nota om saam met oproep te stuur …" "STUUR EN BEL" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s-oortjie" %1$s-oortjie %2$d ongelese items. diff --git a/java/com/android/contacts/common/res/values-am/strings.xml b/java/com/android/contacts/common/res/values-am/strings.xml index 0283fbb0a..d216b0be6 100644 --- a/java/com/android/contacts/common/res/values-am/strings.xml +++ b/java/com/android/contacts/common/res/values-am/strings.xml @@ -70,10 +70,12 @@ "ወጣ ብሏል" "ተይዟል" "እውቅያዎች" + "በብዛት የተጠቆሙ" "ሌላ" "ማውጫ" "የሥራ ስልክ ማውጫ" "ሁሉም እውቅያዎች" + "ጥቆማዎች" "እኔ" "በመፈለግ ላይ…" "ከ%d በላይ ተገኝተዋል።" @@ -248,7 +250,7 @@ "ከጥሪ ጋር ለመላክ የማስታወሻ ጽሑፍ ይተይቡ ..." "ላክ እና ደውል" "%1$s / %2$s" - "%1$s%2$s" + "%1$s%2$s" "የ%1$s ትር።" %1$s ትር። %2$d ያልተነበቡ ንጥሎች። diff --git a/java/com/android/contacts/common/res/values-ar/strings.xml b/java/com/android/contacts/common/res/values-ar/strings.xml index a3862fe09..040b54477 100644 --- a/java/com/android/contacts/common/res/values-ar/strings.xml +++ b/java/com/android/contacts/common/res/values-ar/strings.xml @@ -70,10 +70,12 @@ "بالخارج" "مشغول" "جهات الاتصال" + "أهم المقترحات" "غير ذلك" "الدليل" "دليل العمل" "جميع جهات الاتصال" + "الاقتراحات" "أنا" "جارِ البحث…" "تم العثور على أكثر من %d من جهات الاتصال." @@ -252,7 +254,7 @@ "اكتب ملاحظة لإرسالها مع المكالمة ..." "إرسال واتصال" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "علامة تبويب %1$s." %1$s علامة تبويب. %2$d عناصر غير مقروءة. diff --git a/java/com/android/contacts/common/res/values-az/strings.xml b/java/com/android/contacts/common/res/values-az/strings.xml index 943377127..13250f7e0 100644 --- a/java/com/android/contacts/common/res/values-az/strings.xml +++ b/java/com/android/contacts/common/res/values-az/strings.xml @@ -70,10 +70,12 @@ "Kənar" "Məşğul" "Kontaktlar" + "Ən yaxşı Təkliflər" "Digər" "Kataloq" "İş kataloqu" "Bütün kontaktlar" + "Təkliflər" "Mən" "Axtarılır..." "%d ədəddən çox tapılıb." @@ -248,7 +250,7 @@ "Zəng ilə göndərmək üçün qeyd yazın..." "GÖNDƏRİN VƏ ZƏNG EDİN" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s tabel." %1$s tabel. %2$d oxunmamış element. 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 index fc99567f1..d3b6b0c05 100644 --- 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 @@ -70,10 +70,12 @@ "Odsutan/na" "Zauzet/a" "Kontakti" + "Najpopularniji predlozi" "Drugo" "Direktorijum" "Direktorijum za Work" "Svi kontakti" + "Predlozi" "Ja" "Pretražuje se…" "Pronađeno je više od %d." @@ -249,7 +251,7 @@ "Unesite belešku koju ćete poslati uz poziv..." "POŠALJI I POZOVI" "%1$s/%2$s" - "%1$s%2$s" + "%1$s %2$s" "Kartica %1$s." Kartica %1$s. %2$d nepročitana stavka. diff --git a/java/com/android/contacts/common/res/values-be/strings.xml b/java/com/android/contacts/common/res/values-be/strings.xml index a9652a1c1..ca8f16421 100644 --- a/java/com/android/contacts/common/res/values-be/strings.xml +++ b/java/com/android/contacts/common/res/values-be/strings.xml @@ -70,10 +70,12 @@ "Адсутнічае" "Заняты" "Кантакты" + "Лепшыя прапановы" "Іншае" "Дырэкторыя" "Працоўны каталог" "Усе кантакты" + "Прапановы" "Я" "Пошук..." "Знойдзена вынікаў: больш за %d." @@ -250,7 +252,7 @@ "Увесці нататку для адпраўкі з выклікам…" "АДПРАВІЦЬ І ВЫКЛІКАЦЬ" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "Укладка %1$s." Укладка %1$s. %2$d непрачытаны элемент. diff --git a/java/com/android/contacts/common/res/values-bg/strings.xml b/java/com/android/contacts/common/res/values-bg/strings.xml index 0b57eb6a5..4fdcc8c01 100644 --- a/java/com/android/contacts/common/res/values-bg/strings.xml +++ b/java/com/android/contacts/common/res/values-bg/strings.xml @@ -70,10 +70,12 @@ "Отсъства" "Зает/а" "Контакти" + "Водещи предложения" "Други" "Директория" "Служебен указател" "Всички контакти" + "Предложения" "Аз" "Търси се…" "Намерени са повече от %d." @@ -248,7 +250,7 @@ "Напишете придружаваща бележка, която ще се изпрати при извършване на обаждането..." "ИЗПРАЩАНЕ И ОБАЖДАНЕ" "%1$s/%2$s" - "%1$s%2$s" + "%1$s %2$s" "Раздел „%1$s“." Раздел „%1$s“. %2$d непрочетени елемента. diff --git a/java/com/android/contacts/common/res/values-bn/strings.xml b/java/com/android/contacts/common/res/values-bn/strings.xml index 8e783d129..debbe582e 100644 --- a/java/com/android/contacts/common/res/values-bn/strings.xml +++ b/java/com/android/contacts/common/res/values-bn/strings.xml @@ -70,10 +70,12 @@ "অন্যত্র" "ব্যস্ত" "পরিচিতিগুলি" + "শীর্ষস্থানীয় প্রস্তাবনা" "অন্যান্য" "ডিরেক্টরি" "কাজের সংগ্রহ" "সকল পরিচিতি" + "প্রস্তাবনাগুলি" "আমি" "অনুসন্ধান করছে..." "%dটির থেকে বেশি খুঁজে পাওয়া গিয়েছে৷" @@ -248,7 +250,7 @@ "কলের সাথে পাঠানোর জন্য একটি নোট লিখুন ..." "পাঠান এবং কল করুন" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s ট্যাব৷" %1$s ট্যাব৷ %2$dটি অপঠিত আইটেম৷ diff --git a/java/com/android/contacts/common/res/values-bs/strings.xml b/java/com/android/contacts/common/res/values-bs/strings.xml index 278f6a8d0..c5f85e588 100644 --- a/java/com/android/contacts/common/res/values-bs/strings.xml +++ b/java/com/android/contacts/common/res/values-bs/strings.xml @@ -70,10 +70,12 @@ "Odsutan" "Zauzeto" "Kontakti" + "Najbolji prijedlozi" "Ostalo" "Imenik" "Poslovni imenik" "Svi kontakti" + "Prijedlozi" "Ja" "Pretraživanje…" "Pronađeno je više od %d." @@ -249,7 +251,7 @@ "Upišite bilješku koja će se poslati uz poziv ..." "POŠALJI I POZOVI" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "Kartica %1$s." Kartica %1$s. %2$d nepročitana stavka. diff --git a/java/com/android/contacts/common/res/values-ca/strings.xml b/java/com/android/contacts/common/res/values-ca/strings.xml index ad31a01b6..7e814ff32 100644 --- a/java/com/android/contacts/common/res/values-ca/strings.xml +++ b/java/com/android/contacts/common/res/values-ca/strings.xml @@ -70,10 +70,12 @@ "Absent" "Ocupat" "Contactes" + "Suggeriments principals" "Altres" "Directori" "Directori de la feina" "Tots els contactes" + "Suggeriments" "Jo" "S\'està cercant…" "Se n\'han trobat més de %d." @@ -248,7 +250,7 @@ "Escriu una nota per enviar-la juntament amb la trucada..." "ENVIA I TRUCA" "%1$s/%2$s" - "%1$s%2$s" + "%1$s %2$s" "Pestanya %1$s" Pestanya %1$s: %2$d elements no llegits diff --git a/java/com/android/contacts/common/res/values-cs/strings.xml b/java/com/android/contacts/common/res/values-cs/strings.xml index ab54be93a..0bea069ce 100644 --- a/java/com/android/contacts/common/res/values-cs/strings.xml +++ b/java/com/android/contacts/common/res/values-cs/strings.xml @@ -70,10 +70,12 @@ "Pryč" "Nemám čas" "Kontakty" + "Hlavní návrhy" "Ostatní" "Adresář" "Pracovní adresář" "Všechny kontakty" + "Návrhy" "Já" "Vyhledávání..." "Nalezeno více kontaktů než %d." @@ -250,7 +252,7 @@ "Zadejte poznámku, která se odešle pomocí volání…" "ODESLAT A ZAVOLAT" "%1$s/%2$s" - "%1$s%2$s" + "%1$s %2$s" "Karta %1$s." Karta %1$s. %2$d nepřečtené položky. diff --git a/java/com/android/contacts/common/res/values-da/strings.xml b/java/com/android/contacts/common/res/values-da/strings.xml index 965d04a73..c000b2fe5 100644 --- a/java/com/android/contacts/common/res/values-da/strings.xml +++ b/java/com/android/contacts/common/res/values-da/strings.xml @@ -70,10 +70,12 @@ "Ikke til stede" "Optaget" "Kontakter" + "Populære forslag" "Andre" "Indeks" "Indeks for arbejde" "Alle kontakter" + "Forslag" "Mig" "Søger..." "Der er fundet mere end %d." @@ -248,7 +250,7 @@ "Indtast en note, som skal sendes ved opkald..." "SEND OG RING" "%1$s/%2$s" - "%1$s%2$s" + "%1$s %2$s" "Fanen %1$s." Fanen %1$s. %2$d ulæst element. diff --git a/java/com/android/contacts/common/res/values-de/strings.xml b/java/com/android/contacts/common/res/values-de/strings.xml index 60c5e6806..90e133608 100644 --- a/java/com/android/contacts/common/res/values-de/strings.xml +++ b/java/com/android/contacts/common/res/values-de/strings.xml @@ -70,10 +70,12 @@ "Abwesend" "Beschäftigt" "Kontakte" + "Top-Vorschläge" "Andere" "Verzeichnis" "Verzeichnis geschäftlicher Kontakte" "Alle Kontakte" + "Vorschläge" "Ich" "Suche läuft..." "Mehr als %d Kontakte gefunden" @@ -248,7 +250,7 @@ "Notiz eingeben, die beim Anrufen gesendet wird..." "SENDEN UND ANRUFEN" "%1$s/%2$s" - "%1$s%2$s" + "%1$s %2$s" "Tab \"%1$s\"." Tab \"%1$s\". %2$d ungelesene Elemente. diff --git a/java/com/android/contacts/common/res/values-el/strings.xml b/java/com/android/contacts/common/res/values-el/strings.xml index 9af3bc55a..33d2db4f6 100644 --- a/java/com/android/contacts/common/res/values-el/strings.xml +++ b/java/com/android/contacts/common/res/values-el/strings.xml @@ -70,10 +70,12 @@ "Μη διαθέσιμος" "Απασχολημένος" "Επαφές" + "Κορυφαίες προτάσεις" "Άλλο" "Κατάλογος" "Κατάλογος εργασίας" "Όλες οι επαφές" + "Προτάσεις" "Εγώ" "Αναζήτηση..." "Βρέθηκαν περισσότερα από %d." @@ -248,7 +250,7 @@ "Πληκτρολογήστε μια σημείωση για αποστολή με την κλήση…" "ΑΠΟΣΤΟΛΗ ΚΑΙ ΚΛΗΣΗ" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "Καρτέλα %1$s." Καρτέλα %1$s. %2$d μη αναγνωσμένα στοιχεία. diff --git a/java/com/android/contacts/common/res/values-en-rAU/strings.xml b/java/com/android/contacts/common/res/values-en-rAU/strings.xml index 996c6ee18..e4e09dcaf 100644 --- a/java/com/android/contacts/common/res/values-en-rAU/strings.xml +++ b/java/com/android/contacts/common/res/values-en-rAU/strings.xml @@ -70,10 +70,12 @@ "Away" "Busy" "Contacts" + "Top suggested" "Other" "Directory" "Work directory" "All contacts" + "Suggestions" "Me" "Searching…" "More than %d found." @@ -248,7 +250,7 @@ "Type a note to send with call ..." "SEND & CALL" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s tab." %1$s tab. %2$d unread items. diff --git a/java/com/android/contacts/common/res/values-en-rGB/strings.xml b/java/com/android/contacts/common/res/values-en-rGB/strings.xml index 996c6ee18..e4e09dcaf 100644 --- a/java/com/android/contacts/common/res/values-en-rGB/strings.xml +++ b/java/com/android/contacts/common/res/values-en-rGB/strings.xml @@ -70,10 +70,12 @@ "Away" "Busy" "Contacts" + "Top suggested" "Other" "Directory" "Work directory" "All contacts" + "Suggestions" "Me" "Searching…" "More than %d found." @@ -248,7 +250,7 @@ "Type a note to send with call ..." "SEND & CALL" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s tab." %1$s tab. %2$d unread items. diff --git a/java/com/android/contacts/common/res/values-en-rIN/strings.xml b/java/com/android/contacts/common/res/values-en-rIN/strings.xml index 996c6ee18..e4e09dcaf 100644 --- a/java/com/android/contacts/common/res/values-en-rIN/strings.xml +++ b/java/com/android/contacts/common/res/values-en-rIN/strings.xml @@ -70,10 +70,12 @@ "Away" "Busy" "Contacts" + "Top suggested" "Other" "Directory" "Work directory" "All contacts" + "Suggestions" "Me" "Searching…" "More than %d found." @@ -248,7 +250,7 @@ "Type a note to send with call ..." "SEND & CALL" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s tab." %1$s tab. %2$d unread items. diff --git a/java/com/android/contacts/common/res/values-es-rUS/strings.xml b/java/com/android/contacts/common/res/values-es-rUS/strings.xml index acb563cab..894c352d6 100644 --- a/java/com/android/contacts/common/res/values-es-rUS/strings.xml +++ b/java/com/android/contacts/common/res/values-es-rUS/strings.xml @@ -70,10 +70,12 @@ "Ausente" "Ocupado" "Contactos" + "Principales lugares sugeridos" "Otros" "Directorio" "Directorio del trabajo" "Todos los contactos" + "Sugerencias" "Yo" "Buscando..." "Más de %d encontrados" @@ -248,7 +250,7 @@ "Escribe una nota para enviar con la llamada…" "ENVIAR Y LLAMAR" "%1$s/%2$s" - "%1$s%2$s" + "%1$s %2$s" "Pestaña %1$s." Pestaña %1$s. %2$d elementos no leídos. diff --git a/java/com/android/contacts/common/res/values-es/strings.xml b/java/com/android/contacts/common/res/values-es/strings.xml index def7a447c..39e11d750 100644 --- a/java/com/android/contacts/common/res/values-es/strings.xml +++ b/java/com/android/contacts/common/res/values-es/strings.xml @@ -70,10 +70,12 @@ "Ausente" "Ocupado" "Contactos" + "Sugerencias principales" "Otro" "Directorio" "Directorio de trabajo" "Todos los contactos" + "Sugerencias" "Yo" "Buscando..." "Se han encontrado más de %d contactos." @@ -248,7 +250,7 @@ "Escribe una nota para enviarla con la llamada..." "ENVIAR Y LLAMAR" "%1$s/%2$s" - "%1$s%2$s" + "%1$s %2$s" "Pestaña %1$s." Pestaña %1$s. %2$d elementos no leídos. diff --git a/java/com/android/contacts/common/res/values-et/strings.xml b/java/com/android/contacts/common/res/values-et/strings.xml index c80d54214..e1460382d 100644 --- a/java/com/android/contacts/common/res/values-et/strings.xml +++ b/java/com/android/contacts/common/res/values-et/strings.xml @@ -70,10 +70,12 @@ "Eemal" "Hõivatud" "Kontaktid" + "Populaarsed soovitused" "Muu" "Kataloog" "Töökontaktide kataloog" "Kõik kontaktid" + "Soovitused" "Mina" "Otsimine ..." "Leitud rohkem kui %d." @@ -248,7 +250,7 @@ "Sisestage märkus, mis koos kõnega saata ..." "SAADA JA HELISTA" "%1$s/%2$s" - "%1$s%2$s" + "%1$s %2$s" "Vahekaart %1$s." Vahekaart %1$s. %2$d lugemata üksust. diff --git a/java/com/android/contacts/common/res/values-eu/strings.xml b/java/com/android/contacts/common/res/values-eu/strings.xml index 868d668b5..9caf1f111 100644 --- a/java/com/android/contacts/common/res/values-eu/strings.xml +++ b/java/com/android/contacts/common/res/values-eu/strings.xml @@ -70,10 +70,12 @@ "Kanpoan" "Okupatuta" "Kontaktuak" + "Iradokizun garrantzitsuenak" "Beste bat" "Direktorioa" "Laneko kontaktuak" "Kontaktu guztiak" + "Iradokizunak" "Ni" "Bilatzen…" "%d baino gehiago aurkitu dira." @@ -248,7 +250,7 @@ "Idatzi deiarekin batera bidali beharreko oharra…" "BIDALI ETA DEITU" "%1$s/%2$s" - "%1$s%2$s" + "%1$s: %2$s" "%1$s fitxa." %1$s fitxa. Irakurri gabeko %2$d elementu. diff --git a/java/com/android/contacts/common/res/values-fa/strings.xml b/java/com/android/contacts/common/res/values-fa/strings.xml index dda10647c..c0bc0109d 100644 --- a/java/com/android/contacts/common/res/values-fa/strings.xml +++ b/java/com/android/contacts/common/res/values-fa/strings.xml @@ -70,10 +70,12 @@ "غایب" "مشغول" "مخاطبین" + "پیشنهادهای برتر" "سایر موارد" "فهرست" "فهرست کار" "همه مخاطبین" + "پیشنهادها" "من" "در حال جستجو…" "بیش از %d مورد یافت شد." @@ -248,7 +250,7 @@ "یادداشتی بنویسید که همراه تماس ارسال شود…" "ارسال و تماس" "%1$s / ‏%2$s" - "%1$s%2$s" + "%1$s %2$s" "برگه «%1$s»." برگه «%1$s». %2$d مورد خوانده‌نشده. diff --git a/java/com/android/contacts/common/res/values-fi/strings.xml b/java/com/android/contacts/common/res/values-fi/strings.xml index b8065b2bf..c12476560 100644 --- a/java/com/android/contacts/common/res/values-fi/strings.xml +++ b/java/com/android/contacts/common/res/values-fi/strings.xml @@ -70,10 +70,12 @@ "Poissa" "Varattu" "Yhteystiedot" + "Kiinnostavimmat ehdotukset" "Muu" "Osoitekirja" "Työhakemisto" "Kaikki yhteystiedot" + "Ehdotukset" "Minä" "Haetaan…" "Löytyi yli %d yhteystietoa." @@ -248,7 +250,7 @@ "Kirjoita muistiinpano lähetettäväksi puhelun kanssa…" "LÄHETÄ JA SOITA" "%1$s/%2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s-välilehti." %1$s-välilehti. %2$d lukematonta kohdetta. diff --git a/java/com/android/contacts/common/res/values-fr-rCA/strings.xml b/java/com/android/contacts/common/res/values-fr-rCA/strings.xml index 82f549292..c05540841 100644 --- a/java/com/android/contacts/common/res/values-fr-rCA/strings.xml +++ b/java/com/android/contacts/common/res/values-fr-rCA/strings.xml @@ -70,10 +70,12 @@ "Absent" "Occupé(e)" "Contacts" + "Meilleures suggestions" "Autre" "Répertoire" "Annuaire professionnel" "Tous les contacts" + "Suggestions" "Moi" "Recherche en cours…" "Plus de %d contacts ont été trouvés." @@ -248,7 +250,7 @@ "Tapez une note à envoyer avec l\'appel..." "ENVOYER ET APPELER" "%1$s/%2$s" - "%1$s%2$s" + "%1$s : %2$s" "Onglet %1$s." Onglet %1$s. %2$d élément non lu. diff --git a/java/com/android/contacts/common/res/values-fr/strings.xml b/java/com/android/contacts/common/res/values-fr/strings.xml index 474d721dc..a47a5a283 100644 --- a/java/com/android/contacts/common/res/values-fr/strings.xml +++ b/java/com/android/contacts/common/res/values-fr/strings.xml @@ -70,10 +70,12 @@ "Absent" "Occupé" "Contacts" + "Principaux dossiers recommandés" "Autre" "Répertoire" "Contacts professionnels" "Tous les contacts" + "Suggestions" "Moi" "Recherche..." "Plus de %d contacts ont été trouvés." @@ -248,7 +250,7 @@ "Saisissez une note pour accompagner l\'appel..." "ENVOYER ET APPELER" "%1$s/%2$s" - "%1$s%2$s" + "%1$s %2$s" "Onglet %1$s." Onglet %1$s. %2$d élément non lu. diff --git a/java/com/android/contacts/common/res/values-gl/strings.xml b/java/com/android/contacts/common/res/values-gl/strings.xml index 4a3262a2b..a90481d6c 100644 --- a/java/com/android/contacts/common/res/values-gl/strings.xml +++ b/java/com/android/contacts/common/res/values-gl/strings.xml @@ -70,10 +70,12 @@ "Ausente" "Ocupado" "Contactos" + "Suxestións destacadas" "Outro" "Directorio" "Directorio de traballo" "Todos os contactos" + "Suxestións" "Eu" "Buscando..." "Encontráronse máis de %d contactos." @@ -248,7 +250,7 @@ "Escribe unha nota para enviala coa chamada…" "ENVIAR E CHAMAR" "%1$s/%2$s" - "%1$s%2$s" + "%1$s %2$s" "Pestana %1$s." Pestana %1$s. %2$d elementos non lidos. diff --git a/java/com/android/contacts/common/res/values-gu/strings.xml b/java/com/android/contacts/common/res/values-gu/strings.xml index 536aceb9c..9b1a6a894 100644 --- a/java/com/android/contacts/common/res/values-gu/strings.xml +++ b/java/com/android/contacts/common/res/values-gu/strings.xml @@ -70,10 +70,12 @@ "દૂર" "વ્યસ્ત" "સંપર્કો" + "ટોચના સૂચવેલ" "અન્ય" "નિર્દેશિકા" "કાર્ય નિર્દેશિકા" "તમામ સંપર્કો" + "સૂચનો" "હું" "શોધી રહ્યું છે..." "%d કરતાં વધુ મળ્યાં." @@ -248,7 +250,7 @@ "કૉલ સાથે મોકલવા માટે એક નોંધ લખો ..." "મોકલો અને કૉલ કરો" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s ટૅબ." %1$s ટૅબ. %2$d વાંચ્યા વગરની આઇટમ. diff --git a/java/com/android/contacts/common/res/values-hi/strings.xml b/java/com/android/contacts/common/res/values-hi/strings.xml index c61e195cb..e33f7d294 100644 --- a/java/com/android/contacts/common/res/values-hi/strings.xml +++ b/java/com/android/contacts/common/res/values-hi/strings.xml @@ -70,10 +70,12 @@ "दूर" "व्यस्त" "संपर्क" + "शीर्ष सुझाव" "अन्य" "निर्देशिका" "कार्य निर्देशिका" "सभी संपर्क" + "सुझाव" "मुझे" "खोज रहा है..." "%d से अधिक मिले." @@ -248,7 +250,7 @@ "कॉल के साथ भेजने के लिए नोट लिखें ..." "भेजें और कॉल करें" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s टैब." %1$s टैब. %2$d नहीं पढ़े गए आइटम. diff --git a/java/com/android/contacts/common/res/values-hr/strings.xml b/java/com/android/contacts/common/res/values-hr/strings.xml index 66986dd38..d6e0b10ac 100644 --- a/java/com/android/contacts/common/res/values-hr/strings.xml +++ b/java/com/android/contacts/common/res/values-hr/strings.xml @@ -70,10 +70,12 @@ "Odsutan" "Zauzet" "Kontakti" + "Najbolji prijedlozi" "Drugo" "Direktorij" "Poslovni direktorij" "Svi kontakti" + "Prijedlozi" "Ja" "Pretraživanje…" "Pronađeno je više od %d." @@ -249,7 +251,7 @@ "Napišite bilješku koju ćete poslati uz poziv..." "POŠALJI I NAZOVI" "%1$s/%2$s" - "%1$s%2$s" + "%1$s %2$s" "Kartica %1$s." Kartica %1$s. %2$d nepročitana stavka. diff --git a/java/com/android/contacts/common/res/values-hu/strings.xml b/java/com/android/contacts/common/res/values-hu/strings.xml index 22bf5094c..44bf9c8c3 100644 --- a/java/com/android/contacts/common/res/values-hu/strings.xml +++ b/java/com/android/contacts/common/res/values-hu/strings.xml @@ -70,10 +70,12 @@ "Nincs a gépnél" "Elfoglalt" "Címtár" + "Legjobb javaslatok" "Egyéb" "Címtár" "Munkahelyi névjegyek címtára" "Összes névjegy" + "Javaslatok" "Én" "Keresés…" "Több mint %d találat." @@ -248,7 +250,7 @@ "Írjon üzenetet, amelyet elküldhetünk a hívással együtt…" "KÜLDÉS ÉS HÍVÁS" "%2$s/%1$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s lap." %1$s lap. %2$d olvasatlan elem. diff --git a/java/com/android/contacts/common/res/values-hy/strings.xml b/java/com/android/contacts/common/res/values-hy/strings.xml index 85c902347..b1490c764 100644 --- a/java/com/android/contacts/common/res/values-hy/strings.xml +++ b/java/com/android/contacts/common/res/values-hy/strings.xml @@ -70,10 +70,12 @@ "Տեղում չէ" "Զբաղված" "Կոնտակտներ" + "Լավագույն առաջարկներ" "Այլ" "Գրացուցակ" "Աշխատանքային գրացուցակ" "Բոլոր կոնտակտները" + "Առաջարկներ" "Ես" "Որոնում..." "Գտնվել են %d-ից ավելի:" @@ -248,7 +250,7 @@ "Մուտքագրեք նշում՝ զանգի հետ ուղարկելու համար ..." "ՈՒՂԱՐԿԵԼ ԵՎ ԶԱՆԳԵԼ" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s ներդիր:" %1$s tab. %2$d unread items. diff --git a/java/com/android/contacts/common/res/values-in/strings.xml b/java/com/android/contacts/common/res/values-in/strings.xml index d7ee8bfb9..a54821e1d 100644 --- a/java/com/android/contacts/common/res/values-in/strings.xml +++ b/java/com/android/contacts/common/res/values-in/strings.xml @@ -70,10 +70,12 @@ "Keluar" "Sibuk" "Kontak" + "Paling Disarankan" "Lainnya" "Direktori" "Direktori kerja" "Semua kontak" + "Saran" "Saya" "Menelusuri…" "Ditemukan lebih dari %d." @@ -248,7 +250,7 @@ "Ketik catatan untuk dikirim dengan panggilan telepon ..." "KIRIM & TELEPON" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "Tab %1$s." Tab %1$s. %2$d item belum dibaca. diff --git a/java/com/android/contacts/common/res/values-is/strings.xml b/java/com/android/contacts/common/res/values-is/strings.xml index 26c1aefd1..803a44bd7 100644 --- a/java/com/android/contacts/common/res/values-is/strings.xml +++ b/java/com/android/contacts/common/res/values-is/strings.xml @@ -70,10 +70,12 @@ "Í burtu" "Upptekin(n)" "Tengiliðir" + "Helstu tillögur" "Annað" "Skrá" "Vinnuskrá" "Allir tengiliðir" + "Tillögur" "Ég" "Leitar…" "Yfir %d fundust." @@ -248,7 +250,7 @@ "Sláðu inn texta til að senda með símtalinu..." "SENDA OG HRINGJA" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "Flipinn %1$s." Flipinn %1$s. %2$d ólesið atriði. diff --git a/java/com/android/contacts/common/res/values-it/strings.xml b/java/com/android/contacts/common/res/values-it/strings.xml index 8ea564854..1c4c769eb 100644 --- a/java/com/android/contacts/common/res/values-it/strings.xml +++ b/java/com/android/contacts/common/res/values-it/strings.xml @@ -70,10 +70,12 @@ "Assente" "Occupato" "Contatti" + "Suggerimenti più popolari" "Altro" "Directory" "Directory di lavoro" "Tutti i contatti" + "Suggerimenti" "Io" "Ricerca..." "Più di %d trovati." @@ -248,7 +250,7 @@ "Digita una nota da inviare con la chiamata..." "INVIA E CHIAMA" "%1$s/%2$s" - "%1$s%2$s" + "%1$s %2$s" "Scheda %1$s." Scheda %1$s. %2$d elementi da leggere. diff --git a/java/com/android/contacts/common/res/values-iw/strings.xml b/java/com/android/contacts/common/res/values-iw/strings.xml index 2a6b2c189..9f1fd4927 100644 --- a/java/com/android/contacts/common/res/values-iw/strings.xml +++ b/java/com/android/contacts/common/res/values-iw/strings.xml @@ -70,10 +70,12 @@ "לא נמצא" "לא פנוי" "אנשי קשר" + "הצעות מובילות" "אחר" "ספריה" "ספריית עבודה" "כל אנשי הקשר" + "הצעות" "אני" "מחפש..." "נמצאו יותר מ-%d." @@ -250,7 +252,7 @@ "הקלד הערה לשליחה עם השיחה..." "שלח והתקשר" "%1$s / %2$s" - "%1$s%2$s" + "‎%1$s %2$s‎" "הכרטיסייה %1$s." הכרטיסייה %1$s. %2$d פריטים שלא נקראו. diff --git a/java/com/android/contacts/common/res/values-ja/strings.xml b/java/com/android/contacts/common/res/values-ja/strings.xml index 3271b46bb..8dd776887 100644 --- a/java/com/android/contacts/common/res/values-ja/strings.xml +++ b/java/com/android/contacts/common/res/values-ja/strings.xml @@ -70,10 +70,12 @@ "不在" "取り込み中" "連絡先" + "おすすめ" "その他" "ディレクトリ" "仕事用の連絡先リスト" "すべての連絡先" + "候補" "自分" "検索中..." "%d件以上見つかりました。" @@ -248,7 +250,7 @@ "発信時に送信するメモを入力..." "送信 / 通話" "%1$s/%2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s タブ。" %1$s タブ。%2$d 件の未読項目。 diff --git a/java/com/android/contacts/common/res/values-ka/strings.xml b/java/com/android/contacts/common/res/values-ka/strings.xml index ebbee6e33..a7f536d25 100644 --- a/java/com/android/contacts/common/res/values-ka/strings.xml +++ b/java/com/android/contacts/common/res/values-ka/strings.xml @@ -70,10 +70,12 @@ "გასული" "დაკავებული" "კონტაქტები" + "საუკეთესო შეთავაზებები" "სხვა" "კატალოგი" "სამსახურის კატალოგი" "ყველა კონტაქტი" + "შეთავაზებები" "მე" "ძიება..." "ნაპოვნია %d-ზე მეტი." @@ -248,7 +250,7 @@ "აკრიფეთ შენიშვნა ზართან ერთად გასაგზავნად ..." "გაგზავნა და დარეკვა" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s ცხრ." %1$s ცხრ. %2$d წაუკითხავი ერთეული. diff --git a/java/com/android/contacts/common/res/values-kk/strings.xml b/java/com/android/contacts/common/res/values-kk/strings.xml index 327532abc..cf2f5f156 100644 --- a/java/com/android/contacts/common/res/values-kk/strings.xml +++ b/java/com/android/contacts/common/res/values-kk/strings.xml @@ -70,10 +70,12 @@ "Желіден тыс" "Бос емес" "Контактілер" + "Үздік ұсыныстар" "Басқа" "Анықтама" "Жұмыс каталогы" "Барлық контактілер" + "Ұсыныстар" "Мен" "Іздеуде…" "%d көбірек табылды." @@ -248,7 +250,7 @@ "Қоңыраумен жіберу үшін ескертпе теріңіз ..." "ЖІБЕРУ ЖӘНЕ ҚОҢЫРАУ ШАЛУ" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s қойындысы." %1$s қойындысы. %2$d оқылмаған элемент. diff --git a/java/com/android/contacts/common/res/values-km/strings.xml b/java/com/android/contacts/common/res/values-km/strings.xml index 503016792..d22ebb230 100644 --- a/java/com/android/contacts/common/res/values-km/strings.xml +++ b/java/com/android/contacts/common/res/values-km/strings.xml @@ -70,10 +70,12 @@ "ចាក​ឆ្ងាយ" "រវល់" "ទំនាក់ទំនង" + "បាន​ណែនាំ​​កម្រិត​ខ្ពស់" "ផ្សេងៗ" "ថត" "ថតកន្លែងការងារ" "ទំនាក់ទំនង​ទាំងអស់" + "ការ​ណែនាំ" "ខ្ញុំ" "កំពុង​ស្វែងរក..." "បាន​រក​ឃើញ​ច្រើន​ជាង %d ។" @@ -248,7 +250,7 @@ "វាយបញ្ចូលចំណាំដែលត្រូវផ្ញើជាមួយការហៅទូរស័ព្ទ ..." "ផ្ញើ & ហៅ" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "ផ្ទាំង %1$s។" ផ្ទាំង %1$s។ ធាតុមិនទាន់​អាន %2$d diff --git a/java/com/android/contacts/common/res/values-kn/strings.xml b/java/com/android/contacts/common/res/values-kn/strings.xml index 446e078a6..6b49a0bb4 100644 --- a/java/com/android/contacts/common/res/values-kn/strings.xml +++ b/java/com/android/contacts/common/res/values-kn/strings.xml @@ -70,10 +70,12 @@ "ದೂರ" "ಕಾರ್ಯನಿರತ" "ಸಂಪರ್ಕಗಳು" + "ಉನ್ನತ ಸಲಹೆ" "ಇತರೆ" "ಡೈರೆಕ್ಟರಿ" "ಕೆಲಸದ ಡೈರೆಕ್ಟರಿ" "ಎಲ್ಲಾ ಸಂಪರ್ಕಗಳು" + "ಸಲಹೆಗಳು" "ನಾನು" "ಹುಡುಕಲಾಗುತ್ತಿದೆ…" "%d ಗಿಂತ ಹೆಚ್ಚಾಗಿ ಕಂಡುಬಂದಿದೆ." @@ -248,7 +250,7 @@ "ಕರೆ ಕಳುಹಿಸಲು ಟಿಪ್ಪಣಿಯನ್ನು ಟೈಪ್ ಮಾಡಿ ..." "ಕಳುಹಿಸು ಮತ್ತು ಕರೆಮಾಡು" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s ಟ್ಯಾಬ್." %1$s ಟ್ಯಾಬ್. %2$d ಓದದಿರುವ ಐಟಂಗಳು. diff --git a/java/com/android/contacts/common/res/values-ko/strings.xml b/java/com/android/contacts/common/res/values-ko/strings.xml index 4c2bd4f62..f18659687 100644 --- a/java/com/android/contacts/common/res/values-ko/strings.xml +++ b/java/com/android/contacts/common/res/values-ko/strings.xml @@ -70,10 +70,12 @@ "자리 비움" "다른 용무 중" "주소록" + "인기 추천" "기타" "디렉토리" "직장 디렉토리" "모든 연락처" + "추천" "나" "검색 중..." "%d개 이상 찾았습니다." @@ -248,7 +250,7 @@ "통화에 함께 전송할 메모를 입력하세요..." "보내기 및 전화 걸기" "%1$s/%2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s 탭" %1$s 탭. 읽지 않은 항목 %2$d diff --git a/java/com/android/contacts/common/res/values-ky/strings.xml b/java/com/android/contacts/common/res/values-ky/strings.xml index e5bab4550..eaa7dccad 100644 --- a/java/com/android/contacts/common/res/values-ky/strings.xml +++ b/java/com/android/contacts/common/res/values-ky/strings.xml @@ -70,10 +70,12 @@ "Чыгып кетти" "Бош эмес" "Байланыштар" + "Эң көп сунушталгандар" "Башка" "Директорий" "Жумуш профилиндеги байланыштар китепчеси" "Бардык байланыштар" + "Сунуштар" "Мен" "Изделүүдө…" "%d ашык табылды." @@ -248,7 +250,7 @@ "Чалуу менен жөнөтүлө турган кыска жазууну териңиз …" "ЖӨНӨТҮҮ ЖАНА ЧАЛУУ" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "\"%1$s\" өтмөгү." \"%1$s\" өтмөгү. %2$d нерсе окула элек. diff --git a/java/com/android/contacts/common/res/values-lo/strings.xml b/java/com/android/contacts/common/res/values-lo/strings.xml index c649539d4..fa6d3c63a 100644 --- a/java/com/android/contacts/common/res/values-lo/strings.xml +++ b/java/com/android/contacts/common/res/values-lo/strings.xml @@ -70,10 +70,12 @@ "ບໍ່ຢູ່" "ບໍ່ຫວ່າງ" "ລາຍຊື່ຜູ້ຕິດຕໍ່" + "ແນະນຳຫຼາຍທີ່ສຸດ" "ອື່ນໆ" "ໄດເຣັກທໍຣີ" "ໄດເຣັກທໍຣີບ່ອນເຮັດວຽກ" "ລາຍຊື່ຜູ້ຕິດຕໍ່ທັງໝົດ" + "ຄຳແນະນຳ" "ຂ້ອຍ" "ກຳລັງຊອກຫາ..." "ພົບຫຼາຍກວ່າ %d ລາຍການ." @@ -248,7 +250,7 @@ "ພິມ​ບັນ​ທຶກ ເພື່ອ​ສົ່ງ​ກັບ​ການ​ໂທ ..." "ສົ່ງ ແລະ ໂທ" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "ແຖບ %1$s." ແຖບ %1$s. %2$d ລາຍການບໍ່ທັນໄດ້ອ່ານ. diff --git a/java/com/android/contacts/common/res/values-lt/strings.xml b/java/com/android/contacts/common/res/values-lt/strings.xml index b74bd99ee..b577260e1 100644 --- a/java/com/android/contacts/common/res/values-lt/strings.xml +++ b/java/com/android/contacts/common/res/values-lt/strings.xml @@ -70,10 +70,12 @@ "Pasišalinęs" "Užsiėmęs" "Adresinė" + "Populiariausi siūlomi" "Kita" "Katalogas" "Darbo katalogas" "Visi kontaktai" + "Pasiūlymai" "Aš" "Ieškoma…" "Rasta daugiau nei %d." @@ -250,7 +252,7 @@ "Įveskite užrašą, kurį galima išsiųsti skambinant..." "SIŲSTI IR SKAMBINTI" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "Skirtukas „%1$s“." Skirtukas „%1$s“. %2$d neskaitytas elementas. diff --git a/java/com/android/contacts/common/res/values-lv/strings.xml b/java/com/android/contacts/common/res/values-lv/strings.xml index c09a27f5d..81551e220 100644 --- a/java/com/android/contacts/common/res/values-lv/strings.xml +++ b/java/com/android/contacts/common/res/values-lv/strings.xml @@ -70,10 +70,12 @@ "Prombūtnē" "Aizņemts" "Kontaktpersonas" + "Populārākie ieteikumi" "Cits" "Katalogs" "Darba katalogs" "Visas kontaktpersonas" + "Ieteikumi" "Es" "Notiek meklēšana…" "Atrastas vairāk nekā %d kontaktpersonas." @@ -249,7 +251,7 @@ "Ierakstiet piezīmi, ko nosūtīt ar zvanu..." "SŪTĪT UN ZVANĪT" "%1$s no %2$s" - "%1$s • %2$s" + "%1$s: %2$s" "Cilne “%1$s”" Cilne “%1$s”. %2$d nelasīti vienumi. diff --git a/java/com/android/contacts/common/res/values-mk/strings.xml b/java/com/android/contacts/common/res/values-mk/strings.xml index da1530f2a..475ea174e 100644 --- a/java/com/android/contacts/common/res/values-mk/strings.xml +++ b/java/com/android/contacts/common/res/values-mk/strings.xml @@ -70,10 +70,12 @@ "Отсутен" "Зафатен" "Контакти" + "Нејдобри предложени" "Друг" "Адресар" "Работен директориум" "Сите контакти" + "Предлози" "Јас" "Се пребарува..." "Повеќе од %d се пронајдени." @@ -248,7 +250,7 @@ "Напишете белешка да се испрати со повикот..." "ИСПРАТИ И ПОВИКАЈ" "%1$s/%2$s" - "%1$s%2$s" + "%1$s %2$s" "Картичка %1$s." Картичка %1$s. %2$d непрочитана ставка. diff --git a/java/com/android/contacts/common/res/values-ml/strings.xml b/java/com/android/contacts/common/res/values-ml/strings.xml index 7e927499a..969a99b5a 100644 --- a/java/com/android/contacts/common/res/values-ml/strings.xml +++ b/java/com/android/contacts/common/res/values-ml/strings.xml @@ -70,10 +70,12 @@ "ലഭ്യമല്ല" "തിരക്കിലാണ്" "കോണ്ടാക്റ്റ്" + "കൂടുതൽ നിർദ്ദേശിച്ചിരിക്കുന്നവ" "മറ്റുള്ളവ" "ഡയറക്‌ടറി" "ഔദ്യോഗിക ഡയറക്‌ടറി" "എല്ലാ കോൺടാക്റ്റുകളും" + "നിര്‍ദ്ദേശങ്ങള്‍" "ഞാന്‍" "തിരയുന്നു…" "%d-ൽ കൂടുതൽ കണ്ടെത്തി." @@ -248,7 +250,7 @@ "കോളിനൊപ്പം അയയ്ക്കുന്നതിന് ഒരു കുറിപ്പ് ടൈപ്പുചെയ്യുക ..." "അയയ്‌ക്കുകയും വിളിക്കുകയും ചെയ്യുക" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s ടാബ്." %1$s ടാബ്. %2$d വായിക്കാത്ത ഇനങ്ങൾ. diff --git a/java/com/android/contacts/common/res/values-mn/strings.xml b/java/com/android/contacts/common/res/values-mn/strings.xml index f0a8c9245..12fba53c7 100644 --- a/java/com/android/contacts/common/res/values-mn/strings.xml +++ b/java/com/android/contacts/common/res/values-mn/strings.xml @@ -70,10 +70,12 @@ "Холдсон" "Завгүй" "Харилцагчид" + "Санал болгосон шилдэг" "Бусад" "Директор" "Ажлын лавлагаа" "Бүх харилцагчид" + "Санал болголт" "Би" "Хайж байна..." "%d-с олон олдлоо." @@ -248,7 +250,7 @@ "Дуудлаганд илгээх тэмдэглэл бичнэ үү..." "ИЛГЭЭХ, ДУУДЛАГА" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s таб." %1$s таб. %2$d уншаагүй зүйл. diff --git a/java/com/android/contacts/common/res/values-mr/strings.xml b/java/com/android/contacts/common/res/values-mr/strings.xml index 96504c7bc..8770f8b53 100644 --- a/java/com/android/contacts/common/res/values-mr/strings.xml +++ b/java/com/android/contacts/common/res/values-mr/strings.xml @@ -70,10 +70,12 @@ "दूर आहे" "व्यस्त" "संपर्क" + "सुचविलेले उत्कृष्ट" "इतर" "निर्देशिका" "कार्य निर्देशिका" "सर्व संपर्क" + "सूचना" "मी" "शोधत आहे..." "%d पेक्षा जास्त आढळले." @@ -248,7 +250,7 @@ "कॉलसह पाठविण्‍यासाठी एक टीप टाइप करा..." "पाठवा आणि कॉल करा" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s टॅब." %1$s टॅब. %2$d न वाचलेला आयटम. diff --git a/java/com/android/contacts/common/res/values-ms/strings.xml b/java/com/android/contacts/common/res/values-ms/strings.xml index 60d2b7acc..45c297f60 100644 --- a/java/com/android/contacts/common/res/values-ms/strings.xml +++ b/java/com/android/contacts/common/res/values-ms/strings.xml @@ -70,10 +70,12 @@ "Tiada" "Sibuk" "Kenalan" + "Teratas Dicadangkan" "Lain-lain" "Direktori" "Direktori kerja" "Semua kenalan" + "Cadangan" "Saya" "Mencari..." "lebih daripada %d ditemui" @@ -248,7 +250,7 @@ "Taip nota untuk dihantar dengan panggilan…" "HANTAR & PANGGIL" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "Tab %1$s." Tab %1$s. %2$d item belum dibaca. diff --git a/java/com/android/contacts/common/res/values-my/strings.xml b/java/com/android/contacts/common/res/values-my/strings.xml index d81e8950d..6fbad16be 100644 --- a/java/com/android/contacts/common/res/values-my/strings.xml +++ b/java/com/android/contacts/common/res/values-my/strings.xml @@ -70,10 +70,12 @@ "အဝေးရောက်နေပါသည်" "အလုပ်များနေသည်" "အဆက်အသွယ်များ" + "ထိပ်တန်း အကြံပြုထားပါသည်" "တစ်ခြား" "လမ်းညွှန်" "အလုပ်လမ်းညွှန်" "လိပ်စာများအားလုံး" + "အကြံပြုချက်များ" "ကျွန်ုပ်" "ရှာဖွေနေသည်…" "%d ထက်ပိုတွေ့ရှိသည်" @@ -248,7 +250,7 @@ "ခေါ်ဆိုမှုဖြင့် ပေးပို့ရန် မှတ်စုတစ်ခု ရိုက်ပါ ..." "ပေးပို့ပြီး ခေါ်ပါ" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s တဘ်။" %1$s တဘ်။ မဖတ်ရသေးသည့် အရာ %2$d ခု။ diff --git a/java/com/android/contacts/common/res/values-nb/strings.xml b/java/com/android/contacts/common/res/values-nb/strings.xml index 7085cb381..8162ee732 100644 --- a/java/com/android/contacts/common/res/values-nb/strings.xml +++ b/java/com/android/contacts/common/res/values-nb/strings.xml @@ -70,10 +70,12 @@ "Borte" "Opptatt" "Kontakter" + "Toppforslag" "Annen" "Katalog" "Jobbkatalog" "Alle kontakter" + "Forslag" "Meg" "Søker …" "Fant mer enn %d." @@ -248,7 +250,7 @@ "Skriv et notat du vil sende med anropet …" "SEND OG RING" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s-fanen." %1$s-fanen. %2$d uleste elementer. diff --git a/java/com/android/contacts/common/res/values-ne/strings.xml b/java/com/android/contacts/common/res/values-ne/strings.xml index 1f54232af..0034852e6 100644 --- a/java/com/android/contacts/common/res/values-ne/strings.xml +++ b/java/com/android/contacts/common/res/values-ne/strings.xml @@ -70,10 +70,12 @@ "टाढा" "व्यस्त" "सम्पर्क" + "सबैभन्दा धेरै सुझाव दिइएको" "अन्य" "निर्देशिका" "कार्यको निर्देशिका" "सबै सम्पर्कहरू" + "सुझावहरू" "म" "खोजी गर्दै..." "%dभन्दा बढी पाइयो।" @@ -248,7 +250,7 @@ "यस कलसँग पठाउन एक टिप्पणी टाइप गर्नुहोस्" "पठाउनुहोस् र कल गर्नुहोस्" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s ट्याब।" %1$s ट्याब। %2$d नपढिएका वस्तुहरू। diff --git a/java/com/android/contacts/common/res/values-nl/strings.xml b/java/com/android/contacts/common/res/values-nl/strings.xml index 9d41899f1..e8f1b150b 100644 --- a/java/com/android/contacts/common/res/values-nl/strings.xml +++ b/java/com/android/contacts/common/res/values-nl/strings.xml @@ -70,10 +70,12 @@ "Niet beschikbaar" "Bezet" "Contacten" + "Populaire suggesties" "Overig" "Directory" "Zakelijke contactenlijst" "Alle contacten" + "Suggesties" "Ik" "Zoeken..." "Meer dan %d gevonden." @@ -248,7 +250,7 @@ "Typ een notitie om te verzenden met de oproep..." "VERZENDEN EN BELLEN" "%1$s/%2$s" - "%1$s%2$s" + "%1$s %2$s" "Tabblad %1$s." Tabblad %1$s. %2$d ongelezen items. diff --git a/java/com/android/contacts/common/res/values-no/strings.xml b/java/com/android/contacts/common/res/values-no/strings.xml index 7085cb381..8162ee732 100644 --- a/java/com/android/contacts/common/res/values-no/strings.xml +++ b/java/com/android/contacts/common/res/values-no/strings.xml @@ -70,10 +70,12 @@ "Borte" "Opptatt" "Kontakter" + "Toppforslag" "Annen" "Katalog" "Jobbkatalog" "Alle kontakter" + "Forslag" "Meg" "Søker …" "Fant mer enn %d." @@ -248,7 +250,7 @@ "Skriv et notat du vil sende med anropet …" "SEND OG RING" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s-fanen." %1$s-fanen. %2$d uleste elementer. diff --git a/java/com/android/contacts/common/res/values-pa/strings.xml b/java/com/android/contacts/common/res/values-pa/strings.xml index c96510cc7..8a1a13441 100644 --- a/java/com/android/contacts/common/res/values-pa/strings.xml +++ b/java/com/android/contacts/common/res/values-pa/strings.xml @@ -70,10 +70,12 @@ "ਦੂਰ" "ਰੁੱਝਾ ਹੋਇਆ ਹੈ" "ਸੰਪਰਕ" + "ਪ੍ਰਮੁੱਖ ਸੁਝਾਏ ਗਏ" "ਹੋਰ" "ਡਾਇਰੈਕਟਰੀ" "ਕੰਮ ਡਾਇਰੈਕਟਰੀ" "ਸਾਰੇ ਸੰਪਰਕ" + "ਸੁਝਾਅ" "ਮੈਂ" "ਖੋਜ ਰਿਹਾ ਹੈ..." "%d ਤੋਂ ਵੱਧ ਮਿਲੇ।" @@ -248,7 +250,7 @@ "ਕਾਲ ਦੇ ਨਾਲ ਭੇਜਣ ਲਈ ਕੋਈ ਨੋਟ ਟਾਈਪ ਕਰੋ ..." "ਭੇਜੋ ਅਤੇ ਕਾਲ ਕਰੋ" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s ਟੈਬ।" %1$s ਟੈਬ। %2$d ਅਣ-ਪੜ੍ਹੀਆਂ ਆਈਟਮਾਂ। diff --git a/java/com/android/contacts/common/res/values-pl/strings.xml b/java/com/android/contacts/common/res/values-pl/strings.xml index c4e65f556..37d5b621e 100644 --- a/java/com/android/contacts/common/res/values-pl/strings.xml +++ b/java/com/android/contacts/common/res/values-pl/strings.xml @@ -70,10 +70,12 @@ "Nieobecny" "Zajęty" "Kontakty" + "Najlepsze sugestie" "Inny" "Katalog" "Katalog służbowy" "Wszystkie kontakty" + "Sugestie" "Ja" "Wyszukiwanie..." "Znaleziono więcej niż %d." @@ -250,7 +252,7 @@ "Wpisz notatkę, którą chcesz wysłać razem z połączeniem..." "WYŚLIJ I ZADZWOŃ" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "Karta %1$s." Karta %1$s. %2$d nieprzeczytane elementy. diff --git a/java/com/android/contacts/common/res/values-pt-rBR/strings.xml b/java/com/android/contacts/common/res/values-pt-rBR/strings.xml index ee2b87c68..5083c4ad0 100644 --- a/java/com/android/contacts/common/res/values-pt-rBR/strings.xml +++ b/java/com/android/contacts/common/res/values-pt-rBR/strings.xml @@ -70,10 +70,12 @@ "Ausente" "Ocupado" "Contatos" + "Principais sugestões" "Outros" "Diretório" "Diretório de trabalho" "Todos os contatos" + "Sugestões" "Eu" "Pesquisando..." "Mais de %d encontrados." @@ -248,7 +250,7 @@ "Escreva uma nota para enviar com a chamada..." "ENVIAR E LIGAR" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "Guia \"%1$s\"." Guia \"%1$s\". %2$d item não lido. diff --git a/java/com/android/contacts/common/res/values-pt-rPT/strings.xml b/java/com/android/contacts/common/res/values-pt-rPT/strings.xml index 44bba149d..298b7a263 100644 --- a/java/com/android/contacts/common/res/values-pt-rPT/strings.xml +++ b/java/com/android/contacts/common/res/values-pt-rPT/strings.xml @@ -70,10 +70,12 @@ "Ausente" "Ocupado(a)" "Contactos" + "Principais sugestões" "Outro" "Diretório" "Diretório de trabalho" "Todos os contactos" + "Sugestões" "Eu" "A pesquisar..." "Foram encontrados mais de %d." @@ -248,7 +250,7 @@ "Escrever uma nota para enviar com a chamada..." "ENVIAR E LIGAR" "%1$s/%2$s" - "%1$s%2$s" + "%1$s %2$s" "Separador %1$s." %1$s tab. %2$d unread items. diff --git a/java/com/android/contacts/common/res/values-pt/strings.xml b/java/com/android/contacts/common/res/values-pt/strings.xml index ee2b87c68..5083c4ad0 100644 --- a/java/com/android/contacts/common/res/values-pt/strings.xml +++ b/java/com/android/contacts/common/res/values-pt/strings.xml @@ -70,10 +70,12 @@ "Ausente" "Ocupado" "Contatos" + "Principais sugestões" "Outros" "Diretório" "Diretório de trabalho" "Todos os contatos" + "Sugestões" "Eu" "Pesquisando..." "Mais de %d encontrados." @@ -248,7 +250,7 @@ "Escreva uma nota para enviar com a chamada..." "ENVIAR E LIGAR" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "Guia \"%1$s\"." Guia \"%1$s\". %2$d item não lido. diff --git a/java/com/android/contacts/common/res/values-ro/strings.xml b/java/com/android/contacts/common/res/values-ro/strings.xml index 358e7af93..2fd5e5b06 100644 --- a/java/com/android/contacts/common/res/values-ro/strings.xml +++ b/java/com/android/contacts/common/res/values-ro/strings.xml @@ -70,10 +70,12 @@ "Plecat(ă)" "Ocupat(ă)" "Agendă" + "Cele mai populare sugestii" "Altul" "Director" "Directorul de serviciu" "Toată agenda" + "Sugestii" "Eu" "Se caută…" "S-au găsit peste %d persoane de contact." @@ -249,7 +251,7 @@ "Introduceți o notă ca să o trimiteți împreună cu apelul..." "TRIMITEȚI ȘI APELAȚI" "%1$s/%2$s" - "%1$s%2$s" + "%1$s %2$s" "Fila %1$s" Fila %1$s. %2$d elemente necitite. diff --git a/java/com/android/contacts/common/res/values-ru/strings.xml b/java/com/android/contacts/common/res/values-ru/strings.xml index 3442f2c60..530732edf 100644 --- a/java/com/android/contacts/common/res/values-ru/strings.xml +++ b/java/com/android/contacts/common/res/values-ru/strings.xml @@ -70,10 +70,12 @@ "Отсутствует" "Не беспокоить" "Контакты" + "Топ рекомендуемых" "Другое" "Каталог" "Каталог контактов из рабочего профиля" "Все контакты" + "Рекомендуемые" "Вы" "Поиск…" "Найдено контактов: более %d" @@ -250,7 +252,7 @@ "Введите текст…" "ОТПРАВИТЬ И ПОЗВОНИТЬ" "%1$s/%2$s" - "%1$s%2$s" + "%1$s %2$s" "Вкладка \"%1$s\"." Вкладка %1$s. %2$d непрочитанный элемент. diff --git a/java/com/android/contacts/common/res/values-si/strings.xml b/java/com/android/contacts/common/res/values-si/strings.xml index 72ca32d9c..1bd906332 100644 --- a/java/com/android/contacts/common/res/values-si/strings.xml +++ b/java/com/android/contacts/common/res/values-si/strings.xml @@ -70,10 +70,12 @@ "ළඟ නැත" "කාර්යබහුල" "සම්බන්ධතා" + "ඉහළින්ම යෝජිත" "වෙනත්" "නාමාවලිය" "කාර්යාල සම්බන්ධතා නාමාවලිය" "සියලුම සම්බන්ධතා" + "යෝජනා" "මම" "සොයමින්..." "%d ට වඩා සොයාගන්නා ලදී." @@ -248,7 +250,7 @@ "ඇමතුම සමග යැවීමට සටහනක් ටයිප් කරන්න ..." "යවන්න සහ අමතන්න" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s ටැබය." %1$s ටැබය. නොකියවූ අයිතම %2$d. diff --git a/java/com/android/contacts/common/res/values-sk/strings.xml b/java/com/android/contacts/common/res/values-sk/strings.xml index b85f63f1b..59d666e5e 100644 --- a/java/com/android/contacts/common/res/values-sk/strings.xml +++ b/java/com/android/contacts/common/res/values-sk/strings.xml @@ -70,10 +70,12 @@ "Som preč" "Nemám čas" "Kontakty" + "Najviac odporúčané" "Iné" "Adresár" "Pracovný adresár" "Všetky kontakty" + "Návrhy" "Ja" "Hľadá sa…" "Našlo sa viac ako %d." @@ -250,7 +252,7 @@ "Napíšte poznámku, ktorá sa odošle s hovorom..." "ODOSLAŤ A VOLAŤ" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "Karta %1$s." Karta %1$s. %2$d neprečítané položky. diff --git a/java/com/android/contacts/common/res/values-sl/strings.xml b/java/com/android/contacts/common/res/values-sl/strings.xml index f4c39dea9..dc6e690da 100644 --- a/java/com/android/contacts/common/res/values-sl/strings.xml +++ b/java/com/android/contacts/common/res/values-sl/strings.xml @@ -70,10 +70,12 @@ "Odsoten" "Zaseden" "Stiki" + "Najboljši predlogi" "Drugo" "Imenik" "Delovni imenik" "Vsi stiki" + "Predlogi" "Jaz" "Iskanje ..." "Najdenih je bilo več kot toliko stikov: %d." @@ -250,7 +252,7 @@ "Vnesite zapisek, ki ga želite poslati s klicem ..." "POŠLJI IN KLIČI" "%1$s/%2$s" - "%1$s%2$s" + "%1$s: %2$s" "Zavihek »%1$s«." Zavihek »%1$s«. %2$d neprebran element. diff --git a/java/com/android/contacts/common/res/values-sq/strings.xml b/java/com/android/contacts/common/res/values-sq/strings.xml index 553c46df5..64b43889c 100644 --- a/java/com/android/contacts/common/res/values-sq/strings.xml +++ b/java/com/android/contacts/common/res/values-sq/strings.xml @@ -70,10 +70,12 @@ "I larguar" "I zënë" "Kontaktet" + "Sugjerimet kryesore" "Tjetër" "Direktoria" "Direktoria e punës" "Të gjitha kontaktet" + "Sugjerimet" "Unë" "Po kërkon..." "U gjetën më shumë se %d." @@ -248,7 +250,7 @@ "Shkruaj një shënim për të dërguar një telefonatë..." "DËRGO DHE TELEFONO" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "Skeda %1$s." Skeda %1$s. %2$d artikuj të palexuar. diff --git a/java/com/android/contacts/common/res/values-sr/strings.xml b/java/com/android/contacts/common/res/values-sr/strings.xml index 99997e656..e139662e2 100644 --- a/java/com/android/contacts/common/res/values-sr/strings.xml +++ b/java/com/android/contacts/common/res/values-sr/strings.xml @@ -70,10 +70,12 @@ "Одсутан/на" "Заузет/а" "Контакти" + "Најпопуларнији предлози" "Другo" "Директоријум" "Директоријум за Work" "Сви контакти" + "Предлози" "Ја" "Претражује се…" "Пронађено је више од %d." @@ -249,7 +251,7 @@ "Унесите белешку коју ћете послати уз позив..." "ПОШАЉИ И ПОЗОВИ" "%1$s/%2$s" - "%1$s%2$s" + "%1$s %2$s" "Картица %1$s." Картица %1$s. %2$d непрочитана ставка. diff --git a/java/com/android/contacts/common/res/values-sv/strings.xml b/java/com/android/contacts/common/res/values-sv/strings.xml index 79e56e504..cd095179b 100644 --- a/java/com/android/contacts/common/res/values-sv/strings.xml +++ b/java/com/android/contacts/common/res/values-sv/strings.xml @@ -70,10 +70,12 @@ "Borta" "Upptagen" "Kontakter" + "Bästa förslagen" "Övrigt" "Katalog" "Jobbkatalog" "Alla kontakter" + "Förslag" "Jag" "Söker…" "Fler än %d hittades." @@ -248,7 +250,7 @@ "Gör en anteckning som skickas när du ringer …" "SKICKA OCH RING" "%1$s/%2$s" - "%1$s%2$s" + "%1$s %2$s" "Fliken %1$s." Fliken %1$s. %2$d olästa poster. diff --git a/java/com/android/contacts/common/res/values-sw/strings.xml b/java/com/android/contacts/common/res/values-sw/strings.xml index 4d30271f3..5c41d8780 100644 --- a/java/com/android/contacts/common/res/values-sw/strings.xml +++ b/java/com/android/contacts/common/res/values-sw/strings.xml @@ -70,10 +70,12 @@ "Mbali" "Ana shughuli" "Anwani" + "Mapendekezo Maarufu" "Nyingineyo" "Saraka" "Anwani za kazi" "Anwani zote" + "Mapendekezo" "Mimi" "Inatafuta…" "Zaidi ya %d zimepatikana." @@ -248,7 +250,7 @@ "Andika dokezo litakaloambatana na simu utakayopiga ..." "TUMA na UPIGE SIMU" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "Kichupo cha %1$s." Kichupo cha %1$s. Vipengee %2$d havijasomwa. diff --git a/java/com/android/contacts/common/res/values-ta/strings.xml b/java/com/android/contacts/common/res/values-ta/strings.xml index e041a999d..df7ee067c 100644 --- a/java/com/android/contacts/common/res/values-ta/strings.xml +++ b/java/com/android/contacts/common/res/values-ta/strings.xml @@ -70,10 +70,12 @@ "வெளியே" "பணிமிகுதி" "தொடர்புகள்" + "அதிகம் பரிந்துரைத்தவை" "மற்றவை" "கோப்பகம்" "பணிக் கோப்பகம்" "எல்லா தொடர்புகளும்" + "பரிந்துரைகள்" "எனக்கு" "தேடுகிறது..." "%d க்கும் மேற்பட்டவை கண்டறியப்பட்டன." @@ -248,7 +250,7 @@ "அழைப்புடன் சேர்த்து அனுப்ப, குறிப்பை உள்ளிடவும்..." "அனுப்பி அழை" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s தாவல்." %1$s தாவல். படிக்காதவை (%2$d). diff --git a/java/com/android/contacts/common/res/values-te/strings.xml b/java/com/android/contacts/common/res/values-te/strings.xml index 6dd0e2143..c97cded6a 100644 --- a/java/com/android/contacts/common/res/values-te/strings.xml +++ b/java/com/android/contacts/common/res/values-te/strings.xml @@ -70,10 +70,12 @@ "దూరంగా ఉన్నారు" "బిజీగా ఉన్నారు" "పరిచయాలు" + "ఉత్తమ సూచనలు" "ఇతరం" "డైరెక్టరీ" "కార్యాలయ డైరెక్టరీ" "అన్ని పరిచయాలు" + "సూచనలు" "నేను" "శోధిస్తోంది..." "%d కంటే ఎక్కువ కనుగొనబడ్డాయి." @@ -248,7 +250,7 @@ "కాల్‌తో పాటు పంపడానికి గమనికను టైప్ చేయండి ..." "పంపు & కాల్ చేయి" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s ట్యాబ్." %1$s ట్యాబ్. %2$d చదవని అంశాలు. diff --git a/java/com/android/contacts/common/res/values-th/strings.xml b/java/com/android/contacts/common/res/values-th/strings.xml index b979e7424..aff4a9c5d 100644 --- a/java/com/android/contacts/common/res/values-th/strings.xml +++ b/java/com/android/contacts/common/res/values-th/strings.xml @@ -70,10 +70,12 @@ "ไม่อยู่" "ไม่ว่าง" "รายชื่อติดต่อ" + "รายการแนะนำยอดนิยม" "อื่นๆ" "ไดเรกทอรี" "ไดเรกทอรีที่ทำงาน" "รายชื่อติดต่อทั้งหมด" + "รายการแนะนำ" "ฉัน" "กำลังค้นหา…" "พบมากกว่า %d รายการ" @@ -248,7 +250,7 @@ "พิมพ์โน้ตเพื่อส่งพร้อมการโทร ..." "ส่งและโทร" "%1$s/%2$s" - "%1$s%2$s" + "%1$s %2$s" "แท็บ %1$s" แท็บ %1$s ยังไม่อ่าน %2$d รายการ diff --git a/java/com/android/contacts/common/res/values-tl/strings.xml b/java/com/android/contacts/common/res/values-tl/strings.xml index 62caef820..edf2cafeb 100644 --- a/java/com/android/contacts/common/res/values-tl/strings.xml +++ b/java/com/android/contacts/common/res/values-tl/strings.xml @@ -70,10 +70,12 @@ "Wala" "Abala" "Mga Contact" + "Mga Madalas Imungkahi" "Iba pa" "Direktoryo" "Directory sa trabaho" "Lahat ng mga contact" + "Mga Mungkahi" "Ako" "Naghahanap…" "Higit sa %d ang nakita." @@ -248,7 +250,7 @@ "Mag-type ng isang tala na ipadadala kasama ng tawag ..." "IPADALA AT TAWAGAN" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "Tab ng %1$s." Tab ng %1$s. %2$d hindi pa nababasang item. diff --git a/java/com/android/contacts/common/res/values-tr/strings.xml b/java/com/android/contacts/common/res/values-tr/strings.xml index ce3c109d2..9ec983f02 100644 --- a/java/com/android/contacts/common/res/values-tr/strings.xml +++ b/java/com/android/contacts/common/res/values-tr/strings.xml @@ -70,10 +70,12 @@ "Dışarıda" "Meşgul" "Kişiler" + "En Çok Önerilenler" "Diğer" "Dizin" "İş dizini" "Tüm kişiler" + "Öneriler" "Ben" "Aranıyor..." "%d kişiden fazla bulundu." @@ -248,7 +250,7 @@ "Çağrıyla göndermek için bir not yazın..." "GÖNDER VE ARA" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s sekmesi." %1$s sekmesi. %2$d okunmamış öğe. diff --git a/java/com/android/contacts/common/res/values-uk/strings.xml b/java/com/android/contacts/common/res/values-uk/strings.xml index f6d1e4731..6d5d4eb0a 100644 --- a/java/com/android/contacts/common/res/values-uk/strings.xml +++ b/java/com/android/contacts/common/res/values-uk/strings.xml @@ -70,10 +70,12 @@ "Не на місці" "Не турбувати" "Контакти" + "Найкращі пропозиції" "Інші" "Каталог" "Робочі контакти" "Усі контакти" + "Пропозиції" "Я" "Пошук…" "Знайдено понад %d." @@ -250,7 +252,7 @@ "Введіть нотатку, яку хочете надіслати під час дзвінка…" "ЗАТЕЛЕФОНУВАТИ Й НАДІСЛАТИ" "%1$s з %2$s" - "%1$s%2$s" + "%1$s %2$s" "Вкладка \"%1$s\"." Вкладка \"%1$s\". %2$d непрочитаний елемент. diff --git a/java/com/android/contacts/common/res/values-ur/strings.xml b/java/com/android/contacts/common/res/values-ur/strings.xml index b34c78d95..79cf8335d 100644 --- a/java/com/android/contacts/common/res/values-ur/strings.xml +++ b/java/com/android/contacts/common/res/values-ur/strings.xml @@ -70,10 +70,12 @@ "دور" "مصروف" "رابطے" + "سرفہرست تجویز کردہ" "دیگر" "ڈائریکٹری" "دفتری ڈائرکٹری" "سبھی رابطے" + "تجاویز" "میں" "تلاش کر رہا ہے…" "%d سے زیادہ ملے۔" @@ -248,7 +250,7 @@ "کال کے ساتھ بھیجنے کیلئے ایک نوٹ ٹائپ کریں…" "بھیجیں اور کال کریں" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s ٹیب۔" %1$s ٹیب۔ %2$d بغیر پڑھی ہوئی آئٹمز۔ diff --git a/java/com/android/contacts/common/res/values-uz/strings.xml b/java/com/android/contacts/common/res/values-uz/strings.xml index 44bfd9999..489846fcb 100644 --- a/java/com/android/contacts/common/res/values-uz/strings.xml +++ b/java/com/android/contacts/common/res/values-uz/strings.xml @@ -70,10 +70,12 @@ "Tashqarida" "Band" "Kontaktlar" + "Eng faol" "Boshqa" "Direktoriya" "Ishchi katalogi" "Barcha kontaktlar" + "Takliflar" "Men" "Qidirilmoqda…" "%ddan ko‘proq topildi." @@ -248,7 +250,7 @@ "Qo‘ng‘iroqqa qo‘shib yuborish uchun izoh yozing ..." "YUBORISH va QO‘NG‘IROQ QILISH" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s ichki oynasi." %1$s ichki oynasi. %2$d ta o‘qilmagan narsa. diff --git a/java/com/android/contacts/common/res/values-vi/strings.xml b/java/com/android/contacts/common/res/values-vi/strings.xml index dadb78a7d..65a1c65a4 100644 --- a/java/com/android/contacts/common/res/values-vi/strings.xml +++ b/java/com/android/contacts/common/res/values-vi/strings.xml @@ -70,10 +70,12 @@ "Đã ra ngoài" "Bận" "Danh bạ" + "Đề xuất hàng đầu" "Khác" "Thư mục" "Thư mục công việc" "Tất cả liên hệ" + "Đề xuất" "Tôi" "Đang tìm kiếm…" "Đã tìm thấy hơn %d người liên hệ." @@ -248,7 +250,7 @@ "Nhập ghi chú để gửi kèm cuộc gọi..." "GỬI và GỌI" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "Tab %1$s." Tab %1$s. %2$d mục chưa đọc. diff --git a/java/com/android/contacts/common/res/values-zh-rCN/strings.xml b/java/com/android/contacts/common/res/values-zh-rCN/strings.xml index 161638e66..ee4451378 100644 --- a/java/com/android/contacts/common/res/values-zh-rCN/strings.xml +++ b/java/com/android/contacts/common/res/values-zh-rCN/strings.xml @@ -70,10 +70,12 @@ "离开" "忙碌" "通讯录" + "常用联系人推荐" "其他" "目录" "工作目录" "所有联系人" + "建议" "我" "正在搜索..." "找到超过 %d 位联系人。" @@ -248,7 +250,7 @@ "输入要在拨打电话时发送的备注…" "发送并拨打电话" "%1$s / %2$s" - "%1$s%2$s" + "%1$s%2$s" "%1$s标签。" %1$s标签。%2$d 项未读内容。 diff --git a/java/com/android/contacts/common/res/values-zh-rHK/strings.xml b/java/com/android/contacts/common/res/values-zh-rHK/strings.xml index 9952ab626..122d0febc 100644 --- a/java/com/android/contacts/common/res/values-zh-rHK/strings.xml +++ b/java/com/android/contacts/common/res/values-zh-rHK/strings.xml @@ -70,10 +70,12 @@ "離開" "忙碌" "通訊錄" + "熱門建議" "其他" "名錄" "工作目錄" "所有聯絡人" + "建議" "我" "正在搜尋..." "找到超過 %d 位聯絡人。" @@ -248,7 +250,7 @@ "撥號時可以書寫和傳送筆記…" "傳送和撥號" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "「%1$s」標籤。" %1$s」標籤 (%2$d 個未讀取項目)。 diff --git a/java/com/android/contacts/common/res/values-zh-rTW/strings.xml b/java/com/android/contacts/common/res/values-zh-rTW/strings.xml index e5ad61fac..64b6105cf 100644 --- a/java/com/android/contacts/common/res/values-zh-rTW/strings.xml +++ b/java/com/android/contacts/common/res/values-zh-rTW/strings.xml @@ -70,10 +70,12 @@ "離開" "忙碌" "聯絡人" + "常用聯絡人建議" "其他" "目錄" "Work 聯絡人目錄" "所有聯絡人" + "建議" "我" "搜尋中…" "找到 %d 位以上的聯絡人。" @@ -248,7 +250,7 @@ "輸入可在撥號時傳送的備註..." "傳送並撥打" "%1$s/%2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s分頁。" %1$s分頁。%2$d 個未讀項目。 diff --git a/java/com/android/contacts/common/res/values-zu/strings.xml b/java/com/android/contacts/common/res/values-zu/strings.xml index adca1399c..e78a6b392 100644 --- a/java/com/android/contacts/common/res/values-zu/strings.xml +++ b/java/com/android/contacts/common/res/values-zu/strings.xml @@ -70,10 +70,12 @@ "Ngiphumile" "Ngimatasa" "Othi tana nabo" + "Okuphezulu okuphakanyisiwe" "Okunye" "Uhla lwemibhalo" "Uhla lwemibhalo lomsebenzi" "Bonke othintana nabo" + "Iziphakamiso" "Mina" "Iyasesha..." "Abangaphezu kuka-%d abatholakele." @@ -248,7 +250,7 @@ "Thayipha inothi ukuthumela nekholi ..." "THUMELA FUTHI YENZA IKHOLI" "%1$s / %2$s" - "%1$s%2$s" + "%1$s %2$s" "%1$s ithebhu." %1$s ithebhu. %2$d izinto ezingafundiwe. diff --git a/java/com/android/contacts/common/res/values/dimens.xml b/java/com/android/contacts/common/res/values/dimens.xml index 642eb31a4..26f095f39 100644 --- a/java/com/android/contacts/common/res/values/dimens.xml +++ b/java/com/android/contacts/common/res/values/dimens.xml @@ -107,7 +107,7 @@ 2dp 14sp - 2dp + 0dp 16dp 2dp 0dp diff --git a/java/com/android/contacts/common/res/values/ids.xml b/java/com/android/contacts/common/res/values/ids.xml index 871f5a636..65969c43f 100644 --- a/java/com/android/contacts/common/res/values/ids.xml +++ b/java/com/android/contacts/common/res/values/ids.xml @@ -27,4 +27,5 @@ + diff --git a/java/com/android/contacts/common/res/values/strings.xml b/java/com/android/contacts/common/res/values/strings.xml index 9ac9fef28..85866f736 100644 --- a/java/com/android/contacts/common/res/values/strings.xml +++ b/java/com/android/contacts/common/res/values/strings.xml @@ -143,6 +143,9 @@ Contacts + + Top Suggested + Other @@ -155,6 +158,9 @@ All contacts + + Suggestions + Me @@ -744,9 +750,9 @@ compared to the character limit. Example: 2 / 64 --> %1$s / %2$s - - %1$s%2$s + + %1$s %2$s %1$s tab. diff --git a/java/com/android/contacts/common/res/values/styles.xml b/java/com/android/contacts/common/res/values/styles.xml index 07d4a0225..bb19afe82 100644 --- a/java/com/android/contacts/common/res/values/styles.xml +++ b/java/com/android/contacts/common/res/values/styles.xml @@ -43,7 +43,6 @@ background and text color. See also android:style/Widget.Holo.TextView.ListSepar wrap_content @dimen/list_section_divider_min_height - @drawable/list_section_divider_holo_custom @style/DirectoryHeaderStyle center_vertical 8dip diff --git a/java/com/android/contacts/common/util/AccountFilterUtil.java b/java/com/android/contacts/common/util/AccountFilterUtil.java index 18743c65e..25f937c5e 100644 --- a/java/com/android/contacts/common/util/AccountFilterUtil.java +++ b/java/com/android/contacts/common/util/AccountFilterUtil.java @@ -16,35 +16,15 @@ package com.android.contacts.common.util; -import android.app.Activity; import android.content.Context; -import android.content.Intent; -import android.util.Log; import android.view.View; import android.widget.TextView; import com.android.contacts.common.R; import com.android.contacts.common.list.ContactListFilter; -import com.android.contacts.common.list.ContactListFilterController; /** Utility class for account filter manipulation. */ public class AccountFilterUtil { - public static final String EXTRA_CONTACT_LIST_FILTER = "contactListFilter"; - private static final String TAG = AccountFilterUtil.class.getSimpleName(); - - /** - * Find TextView with the id "account_filter_header" and set correct text for the account filter - * header. - * - * @param filterContainer View containing TextView with id "account_filter_header" - * @return true when header text is set in the call. You may use this for conditionally showing or - * hiding this entire view. - */ - public static boolean updateAccountFilterTitleForPeople( - View filterContainer, ContactListFilter filter, boolean showTitleForAllAccounts) { - return updateAccountFilterTitle(filterContainer, filter, showTitleForAllAccounts, false); - } - /** * Similar to {@link #updateAccountFilterTitleForPeople(View, ContactListFilter, boolean, * boolean)}, but for Phone UI. @@ -78,8 +58,6 @@ public class AccountFilterUtil { } else if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) { headerTextView.setText(R.string.listCustomView); textWasSet = true; - } else { - Log.w(TAG, "Filter type \"" + filter.filterType + "\" isn't expected."); } } else { if (filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS) { @@ -97,29 +75,9 @@ public class AccountFilterUtil { } else if (filter.filterType == ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) { headerTextView.setText(R.string.listSingleContact); textWasSet = true; - } else { - Log.w(TAG, "Filter type \"" + filter.filterType + "\" isn't expected."); } } - } else { - Log.w(TAG, "Filter is null."); } return textWasSet; } - - /** This will update filter via a given ContactListFilterController. */ - public static void handleAccountFilterResult( - ContactListFilterController filterController, int resultCode, Intent data) { - if (resultCode == Activity.RESULT_OK) { - final ContactListFilter filter = data.getParcelableExtra(EXTRA_CONTACT_LIST_FILTER); - if (filter == null) { - return; - } - if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) { - filterController.selectCustomFilter(); - } else { - filterController.setContactListFilter(filter, true); - } - } - } } diff --git a/java/com/android/contacts/common/util/BitmapUtil.java b/java/com/android/contacts/common/util/BitmapUtil.java index 20f916a3f..51f65f280 100644 --- a/java/com/android/contacts/common/util/BitmapUtil.java +++ b/java/com/android/contacts/common/util/BitmapUtil.java @@ -24,8 +24,6 @@ import android.graphics.PorterDuff.Mode; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.RectF; -import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; /** Provides static functions to decode bitmaps at the optimal size */ public class BitmapUtil { @@ -90,30 +88,6 @@ public class BitmapUtil { return BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options); } - /** - * Retrieves a copy of the specified drawable resource, rotated by a specified angle. - * - * @param resources The current resources. - * @param resourceId The resource ID of the drawable to rotate. - * @param angle The angle of rotation. - * @return Rotated drawable. - */ - public static Drawable getRotatedDrawable( - android.content.res.Resources resources, int resourceId, float angle) { - - // Get the original drawable and make a copy which will be rotated. - Bitmap original = BitmapFactory.decodeResource(resources, resourceId); - Bitmap rotated = - Bitmap.createBitmap(original.getWidth(), original.getHeight(), Bitmap.Config.ARGB_8888); - - // Perform the rotation. - Canvas tempCanvas = new Canvas(rotated); - tempCanvas.rotate(angle, original.getWidth() / 2, original.getHeight() / 2); - tempCanvas.drawBitmap(original, 0, 0, null); - - return new BitmapDrawable(resources, rotated); - } - /** * Given an input bitmap, scales it to the given width/height and makes it round. * diff --git a/java/com/android/contacts/common/util/ContactDisplayUtils.java b/java/com/android/contacts/common/util/ContactDisplayUtils.java index 1586784db..ff22f2880 100644 --- a/java/com/android/contacts/common/util/ContactDisplayUtils.java +++ b/java/com/android/contacts/common/util/ContactDisplayUtils.java @@ -16,21 +16,20 @@ package com.android.contacts.common.util; -import static android.provider.ContactsContract.CommonDataKinds.Phone; - import android.content.Context; import android.content.res.Resources; +import android.provider.ContactsContract.CommonDataKinds.Phone; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.text.Spannable; import android.text.SpannableString; import android.text.TextUtils; import android.text.style.TtsSpan; -import android.util.Log; import android.util.Patterns; import com.android.contacts.common.R; import com.android.contacts.common.compat.PhoneNumberUtilsCompat; import com.android.contacts.common.preference.ContactsPreferences; +import com.android.dialer.common.LogUtil; import java.util.Objects; /** Methods for handling various contact data labels. */ @@ -38,7 +37,6 @@ public class ContactDisplayUtils { public static final int INTERACTION_CALL = 1; public static final int INTERACTION_SMS = 2; - private static final String TAG = ContactDisplayUtils.class.getSimpleName(); /** * Checks if the given data type is a custom type. @@ -74,9 +72,9 @@ public class ContactDisplayUtils { } else { resId = getPhoneLabelResourceId(type); if (interactionType != INTERACTION_CALL) { - Log.e( - TAG, - "Un-recognized interaction type: " + LogUtil.e( + "ContactDisplayUtils.getLabelForCallOrSms", + "un-recognized interaction type: " + interactionType + ". Defaulting to ContactDisplayUtils.INTERACTION_CALL."); } diff --git a/java/com/android/contacts/common/util/DateUtils.java b/java/com/android/contacts/common/util/DateUtils.java index 1935d727a..09d52bce8 100644 --- a/java/com/android/contacts/common/util/DateUtils.java +++ b/java/com/android/contacts/common/util/DateUtils.java @@ -16,252 +16,11 @@ package com.android.contacts.common.util; -import android.content.Context; -import android.text.format.DateFormat; import android.text.format.Time; -import java.text.ParsePosition; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.Locale; -import java.util.TimeZone; /** Utility methods for processing dates. */ public class DateUtils { - public static final TimeZone UTC_TIMEZONE = TimeZone.getTimeZone("UTC"); - - /** - * When parsing a date without a year, the system assumes 1970, which wasn't a leap-year. Let's - * add a one-off hack for that day of the year - */ - public static final String NO_YEAR_DATE_FEB29TH = "--02-29"; - - // Variations of ISO 8601 date format. Do not change the order - it does affect the - // result in ambiguous cases. - private static final SimpleDateFormat[] DATE_FORMATS = { - CommonDateUtils.FULL_DATE_FORMAT, - CommonDateUtils.DATE_AND_TIME_FORMAT, - new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'", Locale.US), - new SimpleDateFormat("yyyyMMdd", Locale.US), - new SimpleDateFormat("yyyyMMdd'T'HHmmssSSS'Z'", Locale.US), - new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'", Locale.US), - new SimpleDateFormat("yyyyMMdd'T'HHmm'Z'", Locale.US), - }; - - static { - for (SimpleDateFormat format : DATE_FORMATS) { - format.setLenient(true); - format.setTimeZone(UTC_TIMEZONE); - } - CommonDateUtils.NO_YEAR_DATE_FORMAT.setTimeZone(UTC_TIMEZONE); - } - - /** - * Parses the supplied string to see if it looks like a date. - * - * @param string The string representation of the provided date - * @param mustContainYear If true, the string is parsed as a date containing a year. If false, the - * string is parsed into a valid date even if the year field is missing. - * @return A Calendar object corresponding to the date if the string is successfully parsed. If - * not, null is returned. - */ - public static Calendar parseDate(String string, boolean mustContainYear) { - ParsePosition parsePosition = new ParsePosition(0); - Date date; - if (!mustContainYear) { - final boolean noYearParsed; - // Unfortunately, we can't parse Feb 29th correctly, so let's handle this day seperately - if (NO_YEAR_DATE_FEB29TH.equals(string)) { - return getUtcDate(0, Calendar.FEBRUARY, 29); - } else { - synchronized (CommonDateUtils.NO_YEAR_DATE_FORMAT) { - date = CommonDateUtils.NO_YEAR_DATE_FORMAT.parse(string, parsePosition); - } - noYearParsed = parsePosition.getIndex() == string.length(); - } - - if (noYearParsed) { - return getUtcDate(date, true); - } - } - for (int i = 0; i < DATE_FORMATS.length; i++) { - SimpleDateFormat f = DATE_FORMATS[i]; - synchronized (f) { - parsePosition.setIndex(0); - date = f.parse(string, parsePosition); - if (parsePosition.getIndex() == string.length()) { - return getUtcDate(date, false); - } - } - } - return null; - } - - private static final Calendar getUtcDate(Date date, boolean noYear) { - final Calendar calendar = Calendar.getInstance(UTC_TIMEZONE, Locale.US); - calendar.setTime(date); - if (noYear) { - calendar.set(Calendar.YEAR, 0); - } - return calendar; - } - - private static final Calendar getUtcDate(int year, int month, int dayOfMonth) { - final Calendar calendar = Calendar.getInstance(UTC_TIMEZONE, Locale.US); - calendar.clear(); - calendar.set(Calendar.YEAR, year); - calendar.set(Calendar.MONTH, month); - calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); - return calendar; - } - - public static boolean isYearSet(Calendar cal) { - // use the Calendar.YEAR field to track whether or not the year is set instead of - // Calendar.isSet() because doing Calendar.get() causes Calendar.isSet() to become - // true irregardless of what the previous value was - return cal.get(Calendar.YEAR) > 1; - } - - /** - * Same as {@link #formatDate(Context context, String string, boolean longForm)}, with longForm - * set to {@code true} by default. - * - * @param context Valid context - * @param string String representation of a date to parse - * @return Returns the same date in a cleaned up format. If the supplied string does not look like - * a date, return it unchanged. - */ - public static String formatDate(Context context, String string) { - return formatDate(context, string, true); - } - - /** - * Parses the supplied string to see if it looks like a date. - * - * @param context Valid context - * @param string String representation of a date to parse - * @param longForm If true, return the date formatted into its long string representation. If - * false, return the date formatted using its short form representation (i.e. 12/11/2012) - * @return Returns the same date in a cleaned up format. If the supplied string does not look like - * a date, return it unchanged. - */ - public static String formatDate(Context context, String string, boolean longForm) { - if (string == null) { - return null; - } - - string = string.trim(); - if (string.length() == 0) { - return string; - } - final Calendar cal = parseDate(string, false); - - // we weren't able to parse the string successfully so just return it unchanged - if (cal == null) { - return string; - } - - final boolean isYearSet = isYearSet(cal); - final java.text.DateFormat outFormat; - if (!isYearSet) { - outFormat = getLocalizedDateFormatWithoutYear(context); - } else { - outFormat = - longForm ? DateFormat.getLongDateFormat(context) : DateFormat.getDateFormat(context); - } - synchronized (outFormat) { - outFormat.setTimeZone(UTC_TIMEZONE); - return outFormat.format(cal.getTime()); - } - } - - public static boolean isMonthBeforeDay(Context context) { - char[] dateFormatOrder = DateFormat.getDateFormatOrder(context); - for (int i = 0; i < dateFormatOrder.length; i++) { - if (dateFormatOrder[i] == 'd') { - return false; - } - if (dateFormatOrder[i] == 'M') { - return true; - } - } - return false; - } - - /** - * Returns a SimpleDateFormat object without the year fields by using a regular expression to - * eliminate the year in the string pattern. In the rare occurence that the resulting pattern - * cannot be reconverted into a SimpleDateFormat, it uses the provided context to determine - * whether the month field should be displayed before the day field, and returns either "MMMM dd" - * or "dd MMMM" converted into a SimpleDateFormat. - */ - public static java.text.DateFormat getLocalizedDateFormatWithoutYear(Context context) { - final String pattern = - ((SimpleDateFormat) SimpleDateFormat.getDateInstance(java.text.DateFormat.LONG)) - .toPattern(); - // Determine the correct regex pattern for year. - // Special case handling for Spanish locale by checking for "de" - final String yearPattern = - pattern.contains("de") ? "[^Mm]*[Yy]+[^Mm]*" : "[^DdMm]*[Yy]+[^DdMm]*"; - try { - // Eliminate the substring in pattern that matches the format for that of year - return new SimpleDateFormat(pattern.replaceAll(yearPattern, "")); - } catch (IllegalArgumentException e) { - return new SimpleDateFormat(DateUtils.isMonthBeforeDay(context) ? "MMMM dd" : "dd MMMM"); - } - } - - /** - * Given a calendar (possibly containing only a day of the year), returns the earliest possible - * anniversary of the date that is equal to or after the current point in time if the date does - * not contain a year, or the date converted to the local time zone (if the date contains a year. - * - * @param target The date we wish to convert(in the UTC time zone). - * @return If date does not contain a year (year < 1900), returns the next earliest anniversary - * that is after the current point in time (in the local time zone). Otherwise, returns the - * adjusted Date in the local time zone. - */ - public static Date getNextAnnualDate(Calendar target) { - final Calendar today = Calendar.getInstance(); - today.setTime(new Date()); - - // Round the current time to the exact start of today so that when we compare - // today against the target date, both dates are set to exactly 0000H. - today.set(Calendar.HOUR_OF_DAY, 0); - today.set(Calendar.MINUTE, 0); - today.set(Calendar.SECOND, 0); - today.set(Calendar.MILLISECOND, 0); - - final boolean isYearSet = isYearSet(target); - final int targetYear = target.get(Calendar.YEAR); - final int targetMonth = target.get(Calendar.MONTH); - final int targetDay = target.get(Calendar.DAY_OF_MONTH); - final boolean isFeb29 = (targetMonth == Calendar.FEBRUARY && targetDay == 29); - final GregorianCalendar anniversary = new GregorianCalendar(); - // Convert from the UTC date to the local date. Set the year to today's year if the - // there is no provided year (targetYear < 1900) - anniversary.set(!isYearSet ? today.get(Calendar.YEAR) : targetYear, targetMonth, targetDay); - // If the anniversary's date is before the start of today and there is no year set, - // increment the year by 1 so that the returned date is always equal to or greater than - // today. If the day is a leap year, keep going until we get the next leap year anniversary - // Otherwise if there is already a year set, simply return the exact date. - if (!isYearSet) { - int anniversaryYear = today.get(Calendar.YEAR); - if (anniversary.before(today) || (isFeb29 && !anniversary.isLeapYear(anniversaryYear))) { - // If the target date is not Feb 29, then set the anniversary to the next year. - // Otherwise, keep going until we find the next leap year (this is not guaranteed - // to be in 4 years time). - do { - anniversaryYear += 1; - } while (isFeb29 && !anniversary.isLeapYear(anniversaryYear)); - anniversary.set(anniversaryYear, targetMonth, targetDay); - } - } - return anniversary.getTime(); - } - /** * Determine the difference, in days between two dates. Uses similar logic as the {@link * android.text.format.DateUtils.getRelativeTimeSpanString} method. diff --git a/java/com/android/contacts/common/util/MaterialColorMapUtils.java b/java/com/android/contacts/common/util/MaterialColorMapUtils.java index a2d9847ec..bd32faa51 100644 --- a/java/com/android/contacts/common/util/MaterialColorMapUtils.java +++ b/java/com/android/contacts/common/util/MaterialColorMapUtils.java @@ -21,7 +21,6 @@ import android.content.res.TypedArray; import android.os.Parcel; import android.os.Parcelable; import android.os.Trace; -import com.android.contacts.common.R; public class MaterialColorMapUtils { @@ -35,13 +34,6 @@ public class MaterialColorMapUtils { resources.obtainTypedArray(com.android.contacts.common.R.array.letter_tile_colors_dark); } - public static MaterialPalette getDefaultPrimaryAndSecondaryColors(Resources resources) { - final int primaryColor = resources.getColor(R.color.quickcontact_default_photo_tint_color); - final int secondaryColor = - resources.getColor(R.color.quickcontact_default_photo_tint_color_dark); - return new MaterialPalette(primaryColor, secondaryColor); - } - /** * Returns the hue component of a color int. * diff --git a/java/com/android/contacts/common/util/NameConverter.java b/java/com/android/contacts/common/util/NameConverter.java deleted file mode 100644 index ae3275d14..000000000 --- a/java/com/android/contacts/common/util/NameConverter.java +++ /dev/null @@ -1,242 +0,0 @@ -/* - * Copyright (C) 2011 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.contacts.common.util; - -import android.content.ContentValues; -import android.content.Context; -import android.database.Cursor; -import android.net.Uri; -import android.net.Uri.Builder; -import android.provider.ContactsContract; -import android.provider.ContactsContract.CommonDataKinds.StructuredName; -import android.text.TextUtils; -import com.android.contacts.common.model.dataitem.StructuredNameDataItem; -import java.util.Map; -import java.util.TreeMap; - -/** - * Utility class for converting between a display name and structured name (and vice-versa), via - * calls to the contact provider. - */ -public class NameConverter { - - /** The array of fields that comprise a structured name. */ - public static final String[] STRUCTURED_NAME_FIELDS = - new String[] { - StructuredName.PREFIX, - StructuredName.GIVEN_NAME, - StructuredName.MIDDLE_NAME, - StructuredName.FAMILY_NAME, - StructuredName.SUFFIX - }; - - /** - * Converts the given structured name (provided as a map from {@link StructuredName} fields to - * corresponding values) into a display name string. - * - *

Note that this operates via a call back to the ContactProvider, but it does not access the - * database, so it should be safe to call from the UI thread. See ContactsProvider2.completeName() - * for the underlying method call. - * - * @param context Activity context. - * @param structuredName The structured name map to convert. - * @return The display name computed from the structured name map. - */ - public static String structuredNameToDisplayName( - Context context, Map structuredName) { - Builder builder = ContactsContract.AUTHORITY_URI.buildUpon().appendPath("complete_name"); - for (String key : STRUCTURED_NAME_FIELDS) { - if (structuredName.containsKey(key)) { - appendQueryParameter(builder, key, structuredName.get(key)); - } - } - return fetchDisplayName(context, builder.build()); - } - - /** - * Converts the given structured name (provided as ContentValues) into a display name string. - * - * @param context Activity context. - * @param values The content values containing values comprising the structured name. - */ - public static String structuredNameToDisplayName(Context context, ContentValues values) { - Builder builder = ContactsContract.AUTHORITY_URI.buildUpon().appendPath("complete_name"); - for (String key : STRUCTURED_NAME_FIELDS) { - if (values.containsKey(key)) { - appendQueryParameter(builder, key, values.getAsString(key)); - } - } - return fetchDisplayName(context, builder.build()); - } - - /** Helper method for fetching the display name via the given URI. */ - private static String fetchDisplayName(Context context, Uri uri) { - String displayName = null; - Cursor cursor = - context - .getContentResolver() - .query( - uri, - new String[] { - StructuredName.DISPLAY_NAME, - }, - null, - null, - null); - - if (cursor != null) { - try { - if (cursor.moveToFirst()) { - displayName = cursor.getString(0); - } - } finally { - cursor.close(); - } - } - return displayName; - } - - /** - * Converts the given display name string into a structured name (as a map from {@link - * StructuredName} fields to corresponding values). - * - *

Note that this operates via a call back to the ContactProvider, but it does not access the - * database, so it should be safe to call from the UI thread. - * - * @param context Activity context. - * @param displayName The display name to convert. - * @return The structured name map computed from the display name. - */ - public static Map displayNameToStructuredName( - Context context, String displayName) { - Map structuredName = new TreeMap(); - Builder builder = ContactsContract.AUTHORITY_URI.buildUpon().appendPath("complete_name"); - - appendQueryParameter(builder, StructuredName.DISPLAY_NAME, displayName); - Cursor cursor = - context - .getContentResolver() - .query(builder.build(), STRUCTURED_NAME_FIELDS, null, null, null); - - if (cursor != null) { - try { - if (cursor.moveToFirst()) { - for (int i = 0; i < STRUCTURED_NAME_FIELDS.length; i++) { - structuredName.put(STRUCTURED_NAME_FIELDS[i], cursor.getString(i)); - } - } - } finally { - cursor.close(); - } - } - return structuredName; - } - - /** - * Converts the given display name string into a structured name (inserting the structured values - * into a new or existing ContentValues object). - * - *

Note that this operates via a call back to the ContactProvider, but it does not access the - * database, so it should be safe to call from the UI thread. - * - * @param context Activity context. - * @param displayName The display name to convert. - * @param contentValues The content values object to place the structured name values into. If - * null, a new one will be created and returned. - * @return The ContentValues object containing the structured name fields derived from the display - * name. - */ - public static ContentValues displayNameToStructuredName( - Context context, String displayName, ContentValues contentValues) { - if (contentValues == null) { - contentValues = new ContentValues(); - } - Map mapValues = displayNameToStructuredName(context, displayName); - for (String key : mapValues.keySet()) { - contentValues.put(key, mapValues.get(key)); - } - return contentValues; - } - - private static void appendQueryParameter(Builder builder, String field, String value) { - if (!TextUtils.isEmpty(value)) { - builder.appendQueryParameter(field, value); - } - } - - /** - * Parses phonetic name and returns parsed data (family, middle, given) as ContentValues. Parsed - * data should be {@link StructuredName#PHONETIC_FAMILY_NAME}, {@link - * StructuredName#PHONETIC_MIDDLE_NAME}, and {@link StructuredName#PHONETIC_GIVEN_NAME}. If this - * method cannot parse given phoneticName, null values will be stored. - * - * @param phoneticName Phonetic name to be parsed - * @param values ContentValues to be used for storing data. If null, new instance will be created. - * @return ContentValues with parsed data. Those data can be null. - */ - public static StructuredNameDataItem parsePhoneticName( - String phoneticName, StructuredNameDataItem item) { - String family = null; - String middle = null; - String given = null; - - if (!TextUtils.isEmpty(phoneticName)) { - String[] strings = phoneticName.split(" ", 3); - switch (strings.length) { - case 1: - family = strings[0]; - break; - case 2: - family = strings[0]; - given = strings[1]; - break; - case 3: - family = strings[0]; - middle = strings[1]; - given = strings[2]; - break; - } - } - - if (item == null) { - item = new StructuredNameDataItem(); - } - item.setPhoneticFamilyName(family); - item.setPhoneticMiddleName(middle); - item.setPhoneticGivenName(given); - return item; - } - - /** Constructs and returns a phonetic full name from given parts. */ - public static String buildPhoneticName(String family, String middle, String given) { - if (!TextUtils.isEmpty(family) || !TextUtils.isEmpty(middle) || !TextUtils.isEmpty(given)) { - StringBuilder sb = new StringBuilder(); - if (!TextUtils.isEmpty(family)) { - sb.append(family.trim()).append(' '); - } - if (!TextUtils.isEmpty(middle)) { - sb.append(middle.trim()).append(' '); - } - if (!TextUtils.isEmpty(given)) { - sb.append(given.trim()).append(' '); - } - sb.setLength(sb.length() - 1); // Yank the last space - return sb.toString(); - } else { - return null; - } - } -} diff --git a/java/com/android/contacts/common/util/StopWatch.java b/java/com/android/contacts/common/util/StopWatch.java index b944b9867..7986d1081 100644 --- a/java/com/android/contacts/common/util/StopWatch.java +++ b/java/com/android/contacts/common/util/StopWatch.java @@ -16,7 +16,7 @@ package com.android.contacts.common.util; -import android.util.Log; +import com.android.dialer.common.LogUtil; import java.util.ArrayList; /** A {@link StopWatch} records start, laps and stop, and print them to logcat. */ @@ -37,11 +37,6 @@ public class StopWatch { return new StopWatch(label); } - /** Return a dummy instance that does no operations. */ - public static StopWatch getNullStopWatch() { - return NullStopWatch.INSTANCE; - } - /** Record a lap. */ public void lap(String lapLabel) { mTimes.add(System.currentTimeMillis()); @@ -76,25 +71,6 @@ public class StopWatch { sb.append(" "); last = current; } - Log.v(TAG, sb.toString()); - } - - private static class NullStopWatch extends StopWatch { - - public static final NullStopWatch INSTANCE = new NullStopWatch(); - - public NullStopWatch() { - super(null); - } - - @Override - public void lap(String lapLabel) { - // noop - } - - @Override - public void stopAndLog(String TAG, int timeThresholdToLog) { - // noop - } + LogUtil.v(TAG, sb.toString()); } } diff --git a/java/com/android/contacts/common/util/TelephonyManagerUtils.java b/java/com/android/contacts/common/util/TelephonyManagerUtils.java index b664268ca..e4c2c6373 100644 --- a/java/com/android/contacts/common/util/TelephonyManagerUtils.java +++ b/java/com/android/contacts/common/util/TelephonyManagerUtils.java @@ -33,13 +33,4 @@ public class TelephonyManagerUtils { final String voiceMailLabel = telephonyManager.getVoiceMailAlphaTag(); return voiceMailLabel; } - - /** - * @param context Current application context. - * @return True if there is a subscription which supports video calls. False otherwise. - */ - public static boolean hasVideoCallSubscription(Context context) { - // TODO: Check the telephony manager's subscriptions to see if any support video calls. - return true; - } } diff --git a/java/com/android/contacts/common/util/TrafficStatsTags.java b/java/com/android/contacts/common/util/TrafficStatsTags.java deleted file mode 100644 index b0e7fb583..000000000 --- a/java/com/android/contacts/common/util/TrafficStatsTags.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (C) 2015 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.contacts.common.util; - -public class TrafficStatsTags { - - public static final int CONTACT_PHOTO_DOWNLOAD_TAG = 0x0001; - public static final int TAG_MAX = 0x9999; -} diff --git a/java/com/android/dialer/about/AndroidManifest.xml b/java/com/android/dialer/about/AndroidManifest.xml index e9489ce1e..85c750826 100644 --- a/java/com/android/dialer/about/AndroidManifest.xml +++ b/java/com/android/dialer/about/AndroidManifest.xml @@ -1,6 +1,6 @@ - + - diff --git a/java/com/android/dialer/app/AndroidManifest.xml b/java/com/android/dialer/app/AndroidManifest.xml index de4b48c51..4200082a6 100644 --- a/java/com/android/dialer/app/AndroidManifest.xml +++ b/java/com/android/dialer/app/AndroidManifest.xml @@ -39,6 +39,7 @@ + diff --git a/java/com/android/dialer/app/Bindings.java b/java/com/android/dialer/app/Bindings.java index 2beb40184..c8cf27eb2 100644 --- a/java/com/android/dialer/app/Bindings.java +++ b/java/com/android/dialer/app/Bindings.java @@ -17,9 +17,6 @@ package com.android.dialer.app; import android.content.Context; -import com.android.dialer.app.bindings.DialerBindings; -import com.android.dialer.app.bindings.DialerBindingsFactory; -import com.android.dialer.app.bindings.DialerBindingsStub; import com.android.dialer.app.legacybindings.DialerLegacyBindings; import com.android.dialer.app.legacybindings.DialerLegacyBindingsFactory; import com.android.dialer.app.legacybindings.DialerLegacyBindingsStub; @@ -28,28 +25,10 @@ import java.util.Objects; /** Accessor for the in call UI bindings. */ public class Bindings { - private static DialerBindings instance; private static DialerLegacyBindings legacyInstance; private Bindings() {} - public static DialerBindings get(Context context) { - Objects.requireNonNull(context); - if (instance != null) { - return instance; - } - - Context application = context.getApplicationContext(); - if (application instanceof DialerBindingsFactory) { - instance = ((DialerBindingsFactory) application).newDialerBindings(); - } - - if (instance == null) { - instance = new DialerBindingsStub(); - } - return instance; - } - public static DialerLegacyBindings getLegacy(Context context) { Objects.requireNonNull(context); if (legacyInstance != null) { @@ -67,11 +46,4 @@ public class Bindings { return legacyInstance; } - public static void setForTesting(DialerBindings testInstance) { - instance = testInstance; - } - - public static void setLegacyBindingForTesting(DialerLegacyBindings testLegacyInstance) { - legacyInstance = testLegacyInstance; - } } diff --git a/java/com/android/dialer/app/DialtactsActivity.java b/java/com/android/dialer/app/DialtactsActivity.java index 6e2c6be7d..527dbff18 100644 --- a/java/com/android/dialer/app/DialtactsActivity.java +++ b/java/com/android/dialer/app/DialtactsActivity.java @@ -71,10 +71,12 @@ import com.android.contacts.common.widget.FloatingActionButtonController; import com.android.dialer.animation.AnimUtils; import com.android.dialer.animation.AnimationListenerAdapter; import com.android.dialer.app.calllog.CallLogActivity; +import com.android.dialer.app.calllog.CallLogAdapter; import com.android.dialer.app.calllog.CallLogFragment; import com.android.dialer.app.calllog.CallLogNotificationsService; import com.android.dialer.app.dialpad.DialpadFragment; import com.android.dialer.app.list.DialtactsPagerAdapter; +import com.android.dialer.app.list.DialtactsPagerAdapter.TabIndex; import com.android.dialer.app.list.DragDropController; import com.android.dialer.app.list.ListsFragment; import com.android.dialer.app.list.OldSpeedDialFragment; @@ -92,6 +94,7 @@ import com.android.dialer.callintent.CallIntentBuilder; import com.android.dialer.callintent.CallSpecificAppData; import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; +import com.android.dialer.configprovider.ConfigProviderBindings; import com.android.dialer.database.Database; import com.android.dialer.database.DialerDatabaseHelper; import com.android.dialer.interactions.PhoneNumberInteraction; @@ -99,20 +102,24 @@ import com.android.dialer.interactions.PhoneNumberInteraction.InteractionErrorCo import com.android.dialer.logging.DialerImpression; import com.android.dialer.logging.Logger; import com.android.dialer.logging.ScreenEvent; +import com.android.dialer.logging.UiAction; +import com.android.dialer.main.Main; +import com.android.dialer.main.MainComponent; import com.android.dialer.p13n.inference.P13nRanking; import com.android.dialer.p13n.inference.protocol.P13nRanker; import com.android.dialer.p13n.inference.protocol.P13nRanker.P13nRefreshCompleteListener; import com.android.dialer.p13n.logging.P13nLogger; import com.android.dialer.p13n.logging.P13nLogging; +import com.android.dialer.performancereport.PerformanceReport; import com.android.dialer.postcall.PostCall; import com.android.dialer.proguard.UsedByReflection; +import com.android.dialer.searchfragment.list.NewSearchFragment; import com.android.dialer.simulator.Simulator; import com.android.dialer.simulator.SimulatorComponent; import com.android.dialer.smartdial.SmartDialNameMatcher; import com.android.dialer.smartdial.SmartDialPrefix; import com.android.dialer.telecom.TelecomUtil; import com.android.dialer.util.DialerUtils; -import com.android.dialer.util.IntentUtil; import com.android.dialer.util.PermissionsUtil; import com.android.dialer.util.TouchPointManager; import com.android.dialer.util.TransactionSafeActivity; @@ -130,6 +137,7 @@ public class DialtactsActivity extends TransactionSafeActivity DialpadFragment.OnDialpadQueryChangedListener, OnListFragmentScrolledListener, CallLogFragment.HostInterface, + CallLogAdapter.OnActionModeStateChangedListener, DialpadFragment.HostInterface, OldSpeedDialFragment.HostInterface, SearchFragment.HostInterface, @@ -147,6 +155,7 @@ public class DialtactsActivity extends TransactionSafeActivity private static final String ACTION_SHOW_TAB = "ACTION_SHOW_TAB"; @VisibleForTesting public static final String EXTRA_SHOW_TAB = "EXTRA_SHOW_TAB"; public static final String EXTRA_CLEAR_NEW_VOICEMAILS = "EXTRA_CLEAR_NEW_VOICEMAILS"; + private static final String KEY_LAST_TAB = "last_tab"; private static final String TAG = "DialtactsActivity"; private static final String KEY_IN_REGULAR_SEARCH_UI = "in_regular_search_ui"; private static final String KEY_IN_DIALPAD_SEARCH_UI = "in_dialpad_search_ui"; @@ -154,6 +163,7 @@ public class DialtactsActivity extends TransactionSafeActivity private static final String KEY_FIRST_LAUNCH = "first_launch"; private static final String KEY_WAS_CONFIGURATION_CHANGE = "was_configuration_change"; private static final String KEY_IS_DIALPAD_SHOWN = "is_dialpad_shown"; + private static final String TAG_NEW_SEARCH_FRAGMENT = "new_search"; private static final String TAG_REGULAR_SEARCH_FRAGMENT = "search"; private static final String TAG_SMARTDIAL_SEARCH_FRAGMENT = "smartdial"; private static final String TAG_FAVORITES_FRAGMENT = "favorites"; @@ -162,6 +172,7 @@ public class DialtactsActivity extends TransactionSafeActivity private static final int ACTIVITY_REQUEST_CODE_VOICE_SEARCH = 1; public static final int ACTIVITY_REQUEST_CODE_CALL_COMPOSE = 2; + public static final int ACTIVITY_REQUEST_CODE_LIGHTBRINGER = 3; private static final int FAB_SCALE_IN_DELAY_MS = 300; @@ -180,6 +191,9 @@ public class DialtactsActivity extends TransactionSafeActivity /** Fragment for searching phone numbers using the dialpad. */ private SmartDialSearchFragment mSmartDialSearchFragment; + /** new Fragment for search phone numbers using the keyboard and the dialpad. */ + private NewSearchFragment mNewSearchFragment; + /** Animation that slides in. */ private Animation mSlideIn; @@ -225,6 +239,9 @@ public class DialtactsActivity extends TransactionSafeActivity private P13nLogger mP13nLogger; private P13nRanker mP13nRanker; + public boolean isMultiSelectModeEnabled; + + private boolean isLastTabEnabled; AnimationListenerAdapter mSlideInListener = new AnimationListenerAdapter() { @@ -256,12 +273,18 @@ public class DialtactsActivity extends TransactionSafeActivity // no need to do anything here. return; } + + if (count != 0) { + PerformanceReport.recordClick(UiAction.Type.TEXT_CHANGE_WITH_INPUT); + } + if (DEBUG) { LogUtil.v("DialtactsActivity.onTextChanged", "called with new query: " + newText); LogUtil.v("DialtactsActivity.onTextChanged", "previous query: " + mSearchQuery); } mSearchQuery = newText; + // TODO: show p13n when newText is empty. // Show search fragment only when the query string is changed to non-empty text. if (!TextUtils.isEmpty(newText)) { // Call enterSearchUi only if we are switching search modes, or showing a search @@ -277,6 +300,8 @@ public class DialtactsActivity extends TransactionSafeActivity mSmartDialSearchFragment.setQueryString(mSearchQuery); } else if (mRegularSearchFragment != null && mRegularSearchFragment.isVisible()) { mRegularSearchFragment.setQueryString(mSearchQuery); + } else if (mNewSearchFragment != null) { + mNewSearchFragment.setQuery(mSearchQuery); } } @@ -289,6 +314,7 @@ public class DialtactsActivity extends TransactionSafeActivity @Override public void onClick(View v) { if (!isInSearchUi()) { + PerformanceReport.recordClick(UiAction.Type.OPEN_SEARCH); mActionBarController.onSearchBoxTapped(); enterSearchUi( false /* smartDialSearch */, mSearchView.getText().toString(), true /* animate */); @@ -306,9 +332,13 @@ public class DialtactsActivity extends TransactionSafeActivity if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { if (TextUtils.isEmpty(mSearchView.getText().toString())) { // If the search term is empty, close the search UI. + PerformanceReport.recordClick(UiAction.Type.CLOSE_SEARCH_WITH_HIDE_BUTTON); maybeExitSearchUi(); } else { // If the search term is not empty, show the dialpad fab. + if (!mFloatingActionButtonController.isVisible()) { + PerformanceReport.recordClick(UiAction.Type.HIDE_KEYBOARD_IN_SEARCH); + } showFabInSearchUi(); } } @@ -355,6 +385,7 @@ public class DialtactsActivity extends TransactionSafeActivity super.onCreate(savedInstanceState); mFirstLaunch = true; + isLastTabEnabled = ConfigProviderBindings.get(this).getBoolean("last_tab_enabled", false); final Resources resources = getResources(); mActionBarHeight = resources.getDimensionPixelSize(R.dimen.action_bar_height_large); @@ -480,6 +511,13 @@ public class DialtactsActivity extends TransactionSafeActivity Trace.beginSection(TAG + " onResume"); super.onResume(); + // Some calls may not be recorded (eg. from quick contact), + // so we should restart recording after these calls. (Recorded call is stopped) + PostCall.restartPerformanceRecordingIfARecentCallExist(this); + if (!PerformanceReport.isRecording()) { + PerformanceReport.startRecording(); + } + mStateSaved = false; if (mFirstLaunch) { displayFragment(getIntent()); @@ -542,7 +580,8 @@ public class DialtactsActivity extends TransactionSafeActivity } if (getIntent().getBooleanExtra(EXTRA_CLEAR_NEW_VOICEMAILS, false)) { - CallLogNotificationsService.markNewVoicemailsAsOld(this, null); + LogUtil.i("DialtactsActivity.onResume", "clearing all new voicemails"); + CallLogNotificationsService.markAllNewVoicemailsAsOld(this); } } @@ -593,6 +632,10 @@ public class DialtactsActivity extends TransactionSafeActivity && !getSystemService(KeyguardManager.class).isKeyguardLocked()) { mListsFragment.markMissedCallsAsReadAndRemoveNotifications(); } + DialerUtils.getDefaultSharedPreferenceForDeviceProtectedStorageContext(this) + .edit() + .putInt(KEY_LAST_TAB, mListsFragment.getCurrentTabIndex()) + .apply(); } @Override @@ -630,6 +673,8 @@ public class DialtactsActivity extends TransactionSafeActivity } else if (fragment instanceof ListsFragment) { mListsFragment = (ListsFragment) fragment; mListsFragment.addOnPageChangeListener(this); + } else if (fragment instanceof NewSearchFragment) { + mNewSearchFragment = (NewSearchFragment) fragment; } if (fragment instanceof SearchFragment) { final SearchFragment searchFragment = (SearchFragment) fragment; @@ -664,13 +709,8 @@ public class DialtactsActivity extends TransactionSafeActivity public void onClick(View view) { int resId = view.getId(); if (resId == R.id.floating_action_button) { - if (mListsFragment.getCurrentTabIndex() == DialtactsPagerAdapter.TAB_INDEX_ALL_CONTACTS - && !mInRegularSearch - && !mInDialpadSearch) { - DialerUtils.startActivityWithErrorToast( - this, IntentUtil.getNewContactIntent(), R.string.add_contact_not_available); - Logger.get(this).logImpression(DialerImpression.Type.NEW_CONTACT_FAB); - } else if (!mIsDialpadShown) { + if (!mIsDialpadShown) { + PerformanceReport.recordClick(UiAction.Type.OPEN_DIALPAD); mInCallDialpadUp = false; showDialpadFragment(true); PostCall.closePrompt(); @@ -700,6 +740,7 @@ public class DialtactsActivity extends TransactionSafeActivity int resId = item.getItemId(); if (resId == R.id.menu_history) { + PerformanceReport.recordClick(UiAction.Type.OPEN_CALL_HISTORY); final Intent intent = new Intent(this, CallLogActivity.class); startActivity(intent); } else if (resId == R.id.menu_clear_frequents) { @@ -710,6 +751,9 @@ public class DialtactsActivity extends TransactionSafeActivity handleMenuSettings(); Logger.get(this).logScreenView(ScreenEvent.Type.SETTINGS, this); return true; + } else if (resId == R.id.menu_new_ui_launcher_shortcut) { + MainComponent.get(this).getMain().createNewUiLauncherShortcut(this); + return true; } return false; } @@ -785,6 +829,7 @@ public class DialtactsActivity extends TransactionSafeActivity if (animate) { mFloatingActionButtonController.scaleOut(); + maybeEnterSearchUi(); } else { mFloatingActionButtonController.setVisible(false); maybeEnterSearchUi(); @@ -1007,6 +1052,16 @@ public class DialtactsActivity extends TransactionSafeActivity if (showDialpadChooser && !mDialpadFragment.isVisible()) { mInCallDialpadUp = true; } + } else if (isLastTabEnabled) { + @TabIndex + int tabIndex = + DialerUtils.getDefaultSharedPreferenceForDeviceProtectedStorageContext(this) + .getInt(KEY_LAST_TAB, DialtactsPagerAdapter.TAB_INDEX_SPEED_DIAL); + // If voicemail tab is saved and its availability changes, we still move to the voicemail tab + // but it is quickly removed and shown the contacts tab. + if (mListsFragment != null) { + mListsFragment.showTab(tabIndex); + } } } @@ -1057,7 +1112,11 @@ public class DialtactsActivity extends TransactionSafeActivity } final String tag; - if (smartDialSearch) { + boolean useNewSearch = + ConfigProviderBindings.get(this).getBoolean("enable_new_search_fragment", false); + if (useNewSearch) { + tag = TAG_NEW_SEARCH_FRAGMENT; + } else if (smartDialSearch) { tag = TAG_SMARTDIAL_SEARCH_FRAGMENT; } else { tag = TAG_REGULAR_SEARCH_FRAGMENT; @@ -1067,40 +1126,52 @@ public class DialtactsActivity extends TransactionSafeActivity mFloatingActionButtonController.scaleOut(); - SearchFragment fragment = (SearchFragment) getFragmentManager().findFragmentByTag(tag); if (animate) { transaction.setCustomAnimations(android.R.animator.fade_in, 0); } else { transaction.setTransition(FragmentTransaction.TRANSIT_NONE); } + + Fragment fragment = getFragmentManager().findFragmentByTag(tag); if (fragment == null) { - if (smartDialSearch) { + if (useNewSearch) { + fragment = new NewSearchFragment(); + } else if (smartDialSearch) { fragment = new SmartDialSearchFragment(); } else { fragment = Bindings.getLegacy(this).newRegularSearchFragment(); - fragment.setOnTouchListener( - new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - // Show the FAB when the user touches the lists fragment and the soft - // keyboard is hidden. - hideDialpadFragment(true, false); - showFabInSearchUi(); - v.performClick(); - return false; - } - }); + ((SearchFragment) fragment) + .setOnTouchListener( + (v, event) -> { + // Show the FAB when the user touches the lists fragment and the soft + // keyboard is hidden. + hideDialpadFragment(true, false); + v.performClick(); + return false; + }); } transaction.add(R.id.dialtacts_frame, fragment, tag); } else { + // TODO: if this is a transition from dialpad to searchbar, animate fragment + // down, and vice versa. Perhaps just add a coordinator behavior with the search bar. transaction.show(fragment); } + // DialtactsActivity will provide the options menu fragment.setHasOptionsMenu(false); + // Will show empty list if P13nRanker is not enabled. Else, re-ranked list by the ranker. - fragment.setShowEmptyListForNullQuery(mP13nRanker.shouldShowEmptyListForNullQuery()); - if (!smartDialSearch) { - fragment.setQueryString(query); + if (!useNewSearch) { + ((SearchFragment) fragment) + .setShowEmptyListForNullQuery(mP13nRanker.shouldShowEmptyListForNullQuery()); + } else { + // TODO: add p13n ranker to new search. + } + + if (!smartDialSearch && !useNewSearch) { + ((SearchFragment) fragment).setQueryString(query); + } else if (useNewSearch) { + ((NewSearchFragment) fragment).setQuery(query); } transaction.commit(); @@ -1146,6 +1217,9 @@ public class DialtactsActivity extends TransactionSafeActivity if (mRegularSearchFragment != null) { transaction.remove(mRegularSearchFragment); } + if (mNewSearchFragment != null) { + transaction.remove(mNewSearchFragment); + } transaction.commit(); Assert.isNotNull(mListsFragment.getView()).animate().alpha(1).withLayer(); @@ -1163,6 +1237,8 @@ public class DialtactsActivity extends TransactionSafeActivity @Override public void onBackPressed() { + PerformanceReport.recordClick(UiAction.Type.PRESS_ANDROID_BACK_BUTTON); + if (mStateSaved) { return; } @@ -1247,6 +1323,7 @@ public class DialtactsActivity extends TransactionSafeActivity if (mInDialpadSearch && mSmartDialSearchFragment != null && !mSmartDialSearchFragment.isShowingPermissionRequest()) { + PerformanceReport.recordClick(UiAction.Type.CLOSE_DIALPAD); hideDialpadFragment(true /* animate */, true /* clearDialpad */); return true; } @@ -1255,6 +1332,7 @@ public class DialtactsActivity extends TransactionSafeActivity @Override public void onListFragmentScrollStateChange(int scrollState) { + PerformanceReport.recordScrollStateChange(scrollState); if (scrollState == OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) { hideDialpadFragment(true, false); DialerUtils.hideInputMethod(mParentLayout); @@ -1381,18 +1459,6 @@ public class DialtactsActivity extends TransactionSafeActivity int tabIndex = mListsFragment.getCurrentTabIndex(); mPreviouslySelectedTabIndex = tabIndex; mFloatingActionButtonController.setVisible(true); - if (tabIndex == DialtactsPagerAdapter.TAB_INDEX_ALL_CONTACTS - && !mInRegularSearch - && !mInDialpadSearch) { - mFloatingActionButtonController.changeIcon( - getResources().getDrawable(R.drawable.quantum_ic_person_add_white_24, null), - getResources().getString(R.string.search_shortcut_create_new_contact)); - } else { - mFloatingActionButtonController.changeIcon( - getResources().getDrawable(R.drawable.quantum_ic_dialpad_white_24, null), - getResources().getString(R.string.action_menu_dialpad_button)); - } - timeTabSelected = SystemClock.elapsedRealtime(); } @@ -1477,6 +1543,17 @@ public class DialtactsActivity extends TransactionSafeActivity Arrays.toString(grantResults))); } + @Override + public void onActionModeStateChanged(boolean isEnabled) { + isMultiSelectModeEnabled = isEnabled; + } + + @Override + public boolean isActionModeStateEnabled() { + return isMultiSelectModeEnabled; + } + + /** Popup menu accessible from the search bar */ protected class OptionsPopupMenu extends PopupMenu { public OptionsPopupMenu(Context context, View anchor) { @@ -1505,6 +1582,10 @@ public class DialtactsActivity extends TransactionSafeActivity simulatorMenuItem.setVisible(false); } + Main dialtacts = MainComponent.get(context).getMain(); + menu.findItem(R.id.menu_new_ui_launcher_shortcut) + .setVisible(dialtacts.isNewUiEnabled(context)); + super.show(); } } diff --git a/java/com/android/dialer/app/SpecialCharSequenceMgr.java b/java/com/android/dialer/app/SpecialCharSequenceMgr.java index 85c2ea650..20222d68c 100644 --- a/java/com/android/dialer/app/SpecialCharSequenceMgr.java +++ b/java/com/android/dialer/app/SpecialCharSequenceMgr.java @@ -47,7 +47,6 @@ import com.android.contacts.common.widget.SelectPhoneAccountDialogFragment.Selec import com.android.dialer.calllogutils.PhoneAccountUtils; import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; -import com.android.dialer.compat.CompatUtils; import com.android.dialer.oem.MotorolaUtils; import com.android.dialer.telecom.TelecomUtil; import java.util.ArrayList; @@ -299,9 +298,7 @@ public class SpecialCharSequenceMgr { : R.string.meid; List deviceIds = new ArrayList(); - if (TelephonyManagerCompat.getPhoneCount(telephonyManager) > 1 - && CompatUtils.isMethodAvailable( - TelephonyManagerCompat.TELEPHONY_MANAGER_CLASS, "getDeviceId", Integer.TYPE)) { + if (TelephonyManagerCompat.getPhoneCount(telephonyManager) > 1) { for (int slot = 0; slot < telephonyManager.getPhoneCount(); slot++) { String deviceId = telephonyManager.getDeviceId(slot); if (!TextUtils.isEmpty(deviceId)) { diff --git a/java/com/android/dialer/app/bindings/DialerBindings.java b/java/com/android/dialer/app/bindings/DialerBindings.java deleted file mode 100644 index e1f517860..000000000 --- a/java/com/android/dialer/app/bindings/DialerBindings.java +++ /dev/null @@ -1,25 +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.app.bindings; - -import com.android.dialer.common.ConfigProvider; - -/** This interface allows the container application to customize the dialer. */ -public interface DialerBindings { - - ConfigProvider getConfigProvider(); -} diff --git a/java/com/android/dialer/app/bindings/DialerBindingsFactory.java b/java/com/android/dialer/app/bindings/DialerBindingsFactory.java deleted file mode 100644 index 9f209f99e..000000000 --- a/java/com/android/dialer/app/bindings/DialerBindingsFactory.java +++ /dev/null @@ -1,26 +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.app.bindings; - -/** - * This interface should be implementated by the Application subclass. It allows the dialer module - * to get references to the DialerBindings. - */ -public interface DialerBindingsFactory { - - DialerBindings newDialerBindings(); -} diff --git a/java/com/android/dialer/app/bindings/DialerBindingsStub.java b/java/com/android/dialer/app/bindings/DialerBindingsStub.java deleted file mode 100644 index f56743fa5..000000000 --- a/java/com/android/dialer/app/bindings/DialerBindingsStub.java +++ /dev/null @@ -1,48 +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.app.bindings; - -import com.android.dialer.common.ConfigProvider; - -/** Default implementation for dialer bindings. */ -public class DialerBindingsStub implements DialerBindings { - private ConfigProvider configProvider; - - @Override - public ConfigProvider getConfigProvider() { - if (configProvider == null) { - configProvider = - new ConfigProvider() { - @Override - public String getString(String key, String defaultValue) { - return defaultValue; - } - - @Override - public long getLong(String key, long defaultValue) { - return defaultValue; - } - - @Override - public boolean getBoolean(String key, boolean defaultValue) { - return defaultValue; - } - }; - } - return configProvider; - } -} diff --git a/java/com/android/dialer/app/calllog/CallLogActivity.java b/java/com/android/dialer/app/calllog/CallLogActivity.java index 443171d3f..6433af9a6 100644 --- a/java/com/android/dialer/app/calllog/CallLogActivity.java +++ b/java/com/android/dialer/app/calllog/CallLogActivity.java @@ -34,6 +34,9 @@ import com.android.dialer.app.R; import com.android.dialer.database.CallLogQueryHandler; import com.android.dialer.logging.Logger; import com.android.dialer.logging.ScreenEvent; +import com.android.dialer.logging.UiAction; +import com.android.dialer.performancereport.PerformanceReport; +import com.android.dialer.postcall.PostCall; import com.android.dialer.util.TransactionSafeActivity; import com.android.dialer.util.ViewUtil; @@ -48,7 +51,6 @@ public class CallLogActivity extends TransactionSafeActivity private ViewPagerTabs mViewPagerTabs; private ViewPagerAdapter mViewPagerAdapter; private CallLogFragment mAllCallsFragment; - private CallLogFragment mMissedCallsFragment; private String[] mTabTitles; private boolean mIsResumed; @@ -93,9 +95,16 @@ public class CallLogActivity extends TransactionSafeActivity @Override protected void onResume() { + // Some calls may not be recorded (eg. from quick contact), + // so we should restart recording after these calls. (Recorded call is stopped) + PostCall.restartPerformanceRecordingIfARecentCallExist(this); + if (!PerformanceReport.isRecording()) { + PerformanceReport.startRecording(); + } + mIsResumed = true; super.onResume(); - sendScreenViewForChildFragment(mViewPager.getCurrentItem()); + sendScreenViewForChildFragment(); } @Override @@ -129,6 +138,7 @@ public class CallLogActivity extends TransactionSafeActivity } if (item.getItemId() == android.R.id.home) { + PerformanceReport.recordClick(UiAction.Type.CLOSE_CALL_HISTORY_WITH_CANCEL_BUTTON); final Intent intent = new Intent(this, DialtactsActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); @@ -148,7 +158,7 @@ public class CallLogActivity extends TransactionSafeActivity @Override public void onPageSelected(int position) { if (mIsResumed) { - sendScreenViewForChildFragment(position); + sendScreenViewForChildFragment(); } mViewPagerTabs.onPageSelected(position); } @@ -158,7 +168,7 @@ public class CallLogActivity extends TransactionSafeActivity mViewPagerTabs.onPageScrollStateChanged(state); } - private void sendScreenViewForChildFragment(int position) { + private void sendScreenViewForChildFragment() { Logger.get(this).logScreenView(ScreenEvent.Type.CALL_LOG_FILTER, this); } @@ -169,6 +179,12 @@ public class CallLogActivity extends TransactionSafeActivity return position; } + @Override + public void onBackPressed() { + PerformanceReport.recordClick(UiAction.Type.PRESS_ANDROID_BACK_BUTTON); + super.onBackPressed(); + } + /** Adapter for the view pager. */ public class ViewPagerAdapter extends FragmentPagerAdapter { @@ -189,20 +205,16 @@ public class CallLogActivity extends TransactionSafeActivity CallLogQueryHandler.CALL_TYPE_ALL, true /* isCallLogActivity */); case TAB_INDEX_MISSED: return new CallLogFragment(Calls.MISSED_TYPE, true /* isCallLogActivity */); + default: + throw new IllegalStateException("No fragment at position " + position); } - throw new IllegalStateException("No fragment at position " + position); } @Override public Object instantiateItem(ViewGroup container, int position) { final CallLogFragment fragment = (CallLogFragment) super.instantiateItem(container, position); - switch (position) { - case TAB_INDEX_ALL: + if (position == TAB_INDEX_ALL) { mAllCallsFragment = fragment; - break; - case TAB_INDEX_MISSED: - mMissedCallsFragment = fragment; - break; } return fragment; } diff --git a/java/com/android/dialer/app/calllog/CallLogAdapter.java b/java/com/android/dialer/app/calllog/CallLogAdapter.java index 2f8a58c8a..f1d051a8c 100644 --- a/java/com/android/dialer/app/calllog/CallLogAdapter.java +++ b/java/com/android/dialer/app/calllog/CallLogAdapter.java @@ -19,6 +19,7 @@ package com.android.dialer.app.calllog; import android.app.Activity; import android.content.ContentUris; import android.content.DialogInterface; +import android.content.DialogInterface.OnCancelListener; import android.content.res.Resources; import android.database.Cursor; import android.net.Uri; @@ -52,7 +53,6 @@ import android.view.ViewGroup; import com.android.contacts.common.ContactsUtils; import com.android.contacts.common.compat.PhoneNumberUtilsCompat; import com.android.contacts.common.preference.ContactsPreferences; -import com.android.dialer.app.Bindings; import com.android.dialer.app.DialtactsActivity; import com.android.dialer.app.R; import com.android.dialer.app.calllog.CallLogGroupBuilder.GroupCreator; @@ -66,10 +66,10 @@ 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; -import com.android.dialer.common.ConfigProviderBindings; import com.android.dialer.common.LogUtil; import com.android.dialer.common.concurrent.AsyncTaskExecutor; import com.android.dialer.common.concurrent.AsyncTaskExecutors; +import com.android.dialer.configprovider.ConfigProviderBindings; import com.android.dialer.enrichedcall.EnrichedCallCapabilities; import com.android.dialer.enrichedcall.EnrichedCallComponent; import com.android.dialer.enrichedcall.EnrichedCallManager; @@ -80,12 +80,15 @@ import com.android.dialer.lightbringer.LightbringerListener; import com.android.dialer.logging.ContactSource; import com.android.dialer.logging.DialerImpression; import com.android.dialer.logging.Logger; +import com.android.dialer.logging.UiAction; +import com.android.dialer.performancereport.PerformanceReport; import com.android.dialer.phonenumbercache.CallLogQuery; import com.android.dialer.phonenumbercache.ContactInfo; import com.android.dialer.phonenumbercache.ContactInfoHelper; import com.android.dialer.phonenumberutil.PhoneNumberHelper; import com.android.dialer.spam.Spam; import com.android.dialer.util.PermissionsUtil; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; @@ -105,11 +108,12 @@ public class CallLogAdapter extends GroupingListAdapter private static final String KEY_EXPANDED_POSITION = "expanded_position"; private static final String KEY_EXPANDED_ROW_ID = "expanded_row_id"; + private static final String KEY_ACTION_MODE = "action_mode_selected_items"; public static final String LOAD_DATA_TASK_IDENTIFIER = "load_data"; public static final String ENABLE_CALL_LOG_MULTI_SELECT = "enable_call_log_multiselect"; - public static final boolean ENABLE_CALL_LOG_MULTI_SELECT_FLAG = false; + public static final boolean ENABLE_CALL_LOG_MULTI_SELECT_FLAG = true; protected final Activity mActivity; protected final VoicemailPlaybackPresenter mVoicemailPlaybackPresenter; @@ -117,6 +121,8 @@ public class CallLogAdapter extends GroupingListAdapter protected final CallLogCache mCallLogCache; private final CallFetcher mCallFetcher; + private final OnActionModeStateChangedListener mActionModeStateChangedListener; + private final MultiSelectRemoveView mMultiSelectRemoveView; @NonNull private final FilteredNumberAsyncQueryHandler mFilteredNumberAsyncQueryHandler; private final int mActivityType; @@ -136,6 +142,8 @@ public class CallLogAdapter extends GroupingListAdapter private final CallLogAlertManager mCallLogAlertManager; public ActionMode mActionMode = null; + public boolean selectAllMode = false; + public boolean deselectAllMode = false; private final SparseArray selectedItems = new SparseArray<>(); private final ActionMode.Callback mActionModeCallback = @@ -144,10 +152,17 @@ public class CallLogAdapter extends GroupingListAdapter // Called when the action mode is created; startActionMode() was called @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { + if (mActivity != null) { + announceforAccessibility( + mActivity.getCurrentFocus(), + mActivity.getString(R.string.description_entering_bulk_action_mode)); + } mActionMode = mode; // Inflate a menu resource providing context menu items MenuInflater inflater = mode.getMenuInflater(); inflater.inflate(R.menu.actionbar_delete, menu); + mMultiSelectRemoveView.showMultiSelectRemoveView(true); + mActionModeStateChangedListener.onActionModeStateChanged(true); return true; } @@ -162,10 +177,10 @@ public class CallLogAdapter extends GroupingListAdapter @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { if (item.getItemId() == R.id.action_bar_delete_menu_item) { + Logger.get(mActivity).logImpression(DialerImpression.Type.MULTISELECT_TAP_DELETE_ICON); if (selectedItems.size() > 0) { showDeleteSelectedItemsDialog(); } - mode.finish(); return true; } else { return false; @@ -175,53 +190,78 @@ public class CallLogAdapter extends GroupingListAdapter // Called when the user exits the action mode @Override public void onDestroyActionMode(ActionMode mode) { + if (mActivity != null) { + announceforAccessibility( + mActivity.getCurrentFocus(), + mActivity.getString(R.string.description_leaving_bulk_action_mode)); + } selectedItems.clear(); mActionMode = null; + selectAllMode = false; + deselectAllMode = false; + mMultiSelectRemoveView.showMultiSelectRemoveView(false); + mActionModeStateChangedListener.onActionModeStateChanged(false); notifyDataSetChanged(); } }; - // Todo (uabdullah): Use plurals http://b/37751831 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.voicemailMultiSelectVoicemails); - String deleteVoicemailTitle = - mActivity - .getResources() - .getString(R.string.voicemailMultiSelectDialogTitle, voicemailString); SparseArray 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(); + new AlertDialog.Builder(mActivity, R.style.AlertDialogCustom) + .setCancelable(true) + .setTitle( + mActivity + .getResources() + .getQuantityString( + R.plurals.delete_voicemails_confirmation_dialog_title, selectedItems.size())) + .setPositiveButton( + R.string.voicemailMultiSelectDeleteConfirm, + new DialogInterface.OnClickListener() { + @Override + public void onClick(final DialogInterface dialog, final int button) { + LogUtil.i( + "CallLogAdapter.showDeleteSelectedItemsDialog", + "onClick, these items to delete " + voicemailsToDeleteOnConfirmation); + deleteSelectedItems(voicemailsToDeleteOnConfirmation); + mActionMode.finish(); + dialog.cancel(); + Logger.get(mActivity) + .logImpression( + DialerImpression.Type.MULTISELECT_DELETE_ENTRY_VIA_CONFIRMATION_DIALOG); + } + }) + .setOnCancelListener( + new OnCancelListener() { + @Override + public void onCancel(DialogInterface dialogInterface) { + Logger.get(mActivity) + .logImpression( + DialerImpression.Type + .MULTISELECT_CANCEL_CONFIRMATION_DIALOG_VIA_CANCEL_TOUCH); + dialogInterface.cancel(); + } + }) + .setNegativeButton( + R.string.voicemailMultiSelectDeleteCancel, + new DialogInterface.OnClickListener() { + @Override + public void onClick(final DialogInterface dialog, final int button) { + Logger.get(mActivity) + .logImpression( + DialerImpression.Type + .MULTISELECT_CANCEL_CONFIRMATION_DIALOG_VIA_CANCEL_BUTTON); + dialog.cancel(); + } + }) + .show(); + Logger.get(mActivity) + .logImpression(DialerImpression.Type.MULTISELECT_DISPLAY_DELETE_CONFIRMATION_DIALOG); } private void deleteSelectedItems(SparseArray voicemailsToDelete) { for (int i = 0; i < voicemailsToDelete.size(); i++) { String voicemailUri = voicemailsToDelete.get(voicemailsToDelete.keyAt(i)); + LogUtil.i("CallLogAdapter.deleteSelectedItems", "deleting uri:" + voicemailUri); CallLogAsyncTaskUtil.deleteVoicemail(mActivity, Uri.parse(voicemailUri), null); } } @@ -235,8 +275,13 @@ public class CallLogAdapter extends GroupingListAdapter && mVoicemailPlaybackPresenter != null) { if (v.getId() == R.id.primary_action_view || v.getId() == R.id.quick_contact_photo) { if (mActionMode == null) { + Logger.get(mActivity) + .logImpression( + DialerImpression.Type.MULTISELECT_LONG_PRESS_ENTER_MULTI_SELECT_MODE); mActionMode = v.startActionMode(mActionModeCallback); } + Logger.get(mActivity) + .logImpression(DialerImpression.Type.MULTISELECT_LONG_PRESS_TAP_ENTRY); CallLogListItemViewHolder viewHolder = (CallLogListItemViewHolder) v.getTag(); viewHolder.quickContactView.setVisibility(View.GONE); viewHolder.checkBoxView.setVisibility(View.VISIBLE); @@ -253,27 +298,26 @@ public class CallLogAdapter extends GroupingListAdapter new View.OnClickListener() { @Override public void onClick(View v) { + PerformanceReport.recordClick(UiAction.Type.CLICK_CALL_LOG_ITEM); + CallLogListItemViewHolder viewHolder = (CallLogListItemViewHolder) v.getTag(); if (viewHolder == null) { return; } if (mActionMode != null && viewHolder.voicemailUri != null) { + selectAllMode = false; + deselectAllMode = false; + mMultiSelectRemoveView.setSelectAllModeToFalse(); int id = getVoicemailId(viewHolder.voicemailUri); if (selectedItems.get(id) != null) { - selectedItems.delete(id); - viewHolder.checkBoxView.setVisibility(View.GONE); - viewHolder.quickContactView.setVisibility(View.VISIBLE); + Logger.get(mActivity) + .logImpression(DialerImpression.Type.MULTISELECT_SINGLE_PRESS_UNSELECT_ENTRY); + uncheckMarkCallLogEntry(viewHolder, id); } else { - viewHolder.quickContactView.setVisibility(View.GONE); - viewHolder.checkBoxView.setVisibility(View.VISIBLE); - selectedItems.put(getVoicemailId(viewHolder.voicemailUri), viewHolder.voicemailUri); + Logger.get(mActivity) + .logImpression(DialerImpression.Type.MULTISELECT_SINGLE_PRESS_SELECT_ENTRY); + checkMarkCallLogEntry(viewHolder); } - - if (selectedItems.size() == 0) { - mActionMode.finish(); - return; - } - mActionMode.setTitle(Integer.toString(selectedItems.size())); return; } @@ -312,6 +356,50 @@ public class CallLogAdapter extends GroupingListAdapter } }; + private void checkMarkCallLogEntry(CallLogListItemViewHolder viewHolder) { + announceforAccessibility( + mActivity.getCurrentFocus(), + mActivity.getString( + R.string.description_selecting_bulk_action_mode, viewHolder.nameOrNumber)); + viewHolder.quickContactView.setVisibility(View.GONE); + viewHolder.checkBoxView.setVisibility(View.VISIBLE); + selectedItems.put(getVoicemailId(viewHolder.voicemailUri), viewHolder.voicemailUri); + updateActionBar(); + } + + private void announceforAccessibility(View view, String announcement) { + if (view != null) { + view.announceForAccessibility(announcement); + } + } + + private void updateActionBar() { + if (mActionMode == null && selectedItems.size() > 0) { + Logger.get(mActivity) + .logImpression(DialerImpression.Type.MULTISELECT_ROTATE_AND_SHOW_ACTION_MODE); + mActivity.startActionMode(mActionModeCallback); + } + if (mActionMode != null) { + mActionMode.setTitle( + mActivity + .getResources() + .getString( + R.string.voicemailMultiSelectActionBarTitle, + Integer.toString(selectedItems.size()))); + } + } + + private void uncheckMarkCallLogEntry(CallLogListItemViewHolder viewHolder, int id) { + announceforAccessibility( + mActivity.getCurrentFocus(), + mActivity.getString( + R.string.description_unselecting_bulk_action_mode, viewHolder.nameOrNumber)); + selectedItems.delete(id); + viewHolder.checkBoxView.setVisibility(View.GONE); + viewHolder.quickContactView.setVisibility(View.VISIBLE); + updateActionBar(); + } + private static int getVoicemailId(String voicemailUri) { Assert.checkArgument(voicemailUri != null); Assert.checkArgument(voicemailUri.length() > 0); @@ -358,6 +446,8 @@ public class CallLogAdapter extends GroupingListAdapter Activity activity, ViewGroup alertContainer, CallFetcher callFetcher, + MultiSelectRemoveView multiSelectRemoveView, + OnActionModeStateChangedListener actionModeStateChangedListener, CallLogCache callLogCache, ContactInfoCache contactInfoCache, VoicemailPlaybackPresenter voicemailPlaybackPresenter, @@ -367,6 +457,8 @@ public class CallLogAdapter extends GroupingListAdapter mActivity = activity; mCallFetcher = callFetcher; + mActionModeStateChangedListener = actionModeStateChangedListener; + mMultiSelectRemoveView = multiSelectRemoveView; mVoicemailPlaybackPresenter = voicemailPlaybackPresenter; if (mVoicemailPlaybackPresenter != null) { mVoicemailPlaybackPresenter.setOnVoicemailDeletedListener(this); @@ -426,6 +518,25 @@ public class CallLogAdapter extends GroupingListAdapter public void onSaveInstanceState(Bundle outState) { outState.putInt(KEY_EXPANDED_POSITION, mCurrentlyExpandedPosition); outState.putLong(KEY_EXPANDED_ROW_ID, mCurrentlyExpandedRowId); + + ArrayList listOfSelectedItems = new ArrayList<>(); + + if (selectedItems.size() > 0) { + for (int i = 0; i < selectedItems.size(); i++) { + int id = selectedItems.keyAt(i); + String voicemailUri = selectedItems.valueAt(i); + LogUtil.i( + "CallLogAdapter.onSaveInstanceState", "index %d, id=%d, uri=%s ", i, id, voicemailUri); + listOfSelectedItems.add(voicemailUri); + } + } + outState.putStringArrayList(KEY_ACTION_MODE, listOfSelectedItems); + + LogUtil.i( + "CallLogAdapter.onSaveInstanceState", + "saved: %d, selectedItemsSize:%d", + listOfSelectedItems.size(), + selectedItems.size()); } public void onRestoreInstanceState(Bundle savedInstanceState) { @@ -434,6 +545,33 @@ public class CallLogAdapter extends GroupingListAdapter savedInstanceState.getInt(KEY_EXPANDED_POSITION, RecyclerView.NO_POSITION); mCurrentlyExpandedRowId = savedInstanceState.getLong(KEY_EXPANDED_ROW_ID, NO_EXPANDED_LIST_ITEM); + // Restoring multi selected entries + ArrayList listOfSelectedItems = + savedInstanceState.getStringArrayList(KEY_ACTION_MODE); + LogUtil.i( + "CallLogAdapter.onRestoreInstanceState", + "restored selectedItemsList:%d", + listOfSelectedItems.size()); + + if (!listOfSelectedItems.isEmpty()) { + for (int i = 0; i < listOfSelectedItems.size(); i++) { + String voicemailUri = listOfSelectedItems.get(i); + int id = getVoicemailId(voicemailUri); + LogUtil.i( + "CallLogAdapter.onRestoreInstanceState", + "restoring selected index %d, id=%d, uri=%s ", + i, + id, + voicemailUri); + selectedItems.put(id, voicemailUri); + } + + LogUtil.i( + "CallLogAdapter.onRestoreInstance", + "restored selectedItems %s", + selectedItems.toString()); + updateActionBar(); + } } } @@ -521,6 +659,7 @@ public class CallLogAdapter extends GroupingListAdapter mBlockReportSpamListener, mExpandCollapseListener, mLongPressListener, + mActionModeStateChangedListener, mCallLogCache, mCallLogListItemHelper, mVoicemailPlaybackPresenter); @@ -546,7 +685,7 @@ public class CallLogAdapter extends GroupingListAdapter Trace.beginSection("onBindViewHolder: " + position); switch (getItemViewType(position)) { case VIEW_TYPE_ALERT: - //Do nothing + // Do nothing break; default: bindCallLogListViewHolder(viewHolder, position); @@ -559,6 +698,8 @@ public class CallLogAdapter extends GroupingListAdapter public void onViewRecycled(ViewHolder viewHolder) { if (viewHolder.getItemViewType() == VIEW_TYPE_CALLLOG) { CallLogListItemViewHolder views = (CallLogListItemViewHolder) viewHolder; + updateCheckMarkedStatusOfEntry(views); + if (views.asyncTask != null) { views.asyncTask.cancel(true); } @@ -591,6 +732,8 @@ public class CallLogAdapter extends GroupingListAdapter return; } CallLogListItemViewHolder views = (CallLogListItemViewHolder) viewHolder; + updateCheckMarkedStatusOfEntry(views); + views.isLoaded = false; int groupSize = getGroupSize(position); CallDetailsEntries callDetailsEntries = createCallDetailsEntries(c, groupSize); @@ -609,6 +752,17 @@ public class CallLogAdapter extends GroupingListAdapter loadAndRender(views, views.rowId, details, callDetailsEntries); } + private void updateCheckMarkedStatusOfEntry(CallLogListItemViewHolder views) { + if (selectedItems.size() > 0 && views.voicemailUri != null) { + int id = getVoicemailId(views.voicemailUri); + if (selectedItems.get(id) != null) { + checkMarkCallLogEntry(views); + } else { + uncheckMarkCallLogEntry(views, id); + } + } + } + private void loadAndRender( final CallLogListItemViewHolder views, final long rowId, @@ -840,8 +994,7 @@ public class CallLogAdapter extends GroupingListAdapter details.countryIso, details.cachedContactInfo, position - < Bindings.get(mActivity) - .getConfigProvider() + < ConfigProviderBindings.get(mActivity) .getLong("number_of_call_to_do_remote_lookup", 5L)); } CharSequence formattedNumber = @@ -917,6 +1070,12 @@ public class CallLogAdapter extends GroupingListAdapter views.workIconView.setVisibility( details.contactUserType == ContactsUtils.USER_TYPE_WORK ? View.VISIBLE : View.GONE); + if (selectAllMode && views.voicemailUri != null) { + selectedItems.put(getVoicemailId(views.voicemailUri), views.voicemailUri); + } + if (deselectAllMode && views.voicemailUri != null) { + selectedItems.delete(getVoicemailId(views.voicemailUri)); + } if (views.voicemailUri != null && selectedItems.get(getVoicemailId(views.voicemailUri)) != null) { views.checkBoxView.setVisibility(View.VISIBLE); @@ -925,7 +1084,6 @@ public class CallLogAdapter extends GroupingListAdapter views.checkBoxView.setVisibility(View.GONE); views.quickContactView.setVisibility(View.VISIBLE); } - mCallLogListItemHelper.setPhoneCallDetails(views, details); if (mCurrentlyExpandedRowId == views.rowId) { // In case ViewHolders were added/removed, update the expanded position if the rowIds @@ -1192,9 +1350,49 @@ public class CallLogAdapter extends GroupingListAdapter notifyDataSetChanged(); } + public void onAllSelected() { + selectAllMode = true; + deselectAllMode = false; + selectedItems.clear(); + for (int i = 0; i < getItemCount(); i++) { + Cursor c = (Cursor) getItem(i); + if (c != null) { + Assert.checkArgument(CallLogQuery.VOICEMAIL_URI == c.getColumnIndex("voicemail_uri")); + String voicemailUri = c.getString(CallLogQuery.VOICEMAIL_URI); + selectedItems.put(getVoicemailId(voicemailUri), voicemailUri); + } + } + updateActionBar(); + notifyDataSetChanged(); + } + + public void onAllDeselected() { + selectAllMode = false; + deselectAllMode = true; + selectedItems.clear(); + updateActionBar(); + notifyDataSetChanged(); + } + /** Interface used to initiate a refresh of the content. */ public interface CallFetcher { void fetchCalls(); } + + /** Interface used to allow single tap multi select for contact photos. */ + public interface OnActionModeStateChangedListener { + + void onActionModeStateChanged(boolean isEnabled); + + boolean isActionModeStateEnabled(); + } + + /** Interface used to hide the fragments. */ + public interface MultiSelectRemoveView { + + void showMultiSelectRemoveView(boolean show); + + void setSelectAllModeToFalse(); + } } diff --git a/java/com/android/dialer/app/calllog/CallLogAsyncTaskUtil.java b/java/com/android/dialer/app/calllog/CallLogAsyncTaskUtil.java index a5553d134..10866aae2 100644 --- a/java/com/android/dialer/app/calllog/CallLogAsyncTaskUtil.java +++ b/java/com/android/dialer/app/calllog/CallLogAsyncTaskUtil.java @@ -28,6 +28,7 @@ import android.provider.VoicemailContract.Voicemails; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.text.TextUtils; +import com.android.dialer.common.LogUtil; import com.android.dialer.common.concurrent.AsyncTaskExecutor; import com.android.dialer.common.concurrent.AsyncTaskExecutors; import com.android.dialer.util.PermissionsUtil; @@ -45,6 +46,7 @@ public class CallLogAsyncTaskUtil { public static void markVoicemailAsRead( @NonNull final Context context, @NonNull final Uri voicemailUri) { + LogUtil.enterBlock("CallLogAsyncTaskUtil.markVoicemailAsRead, voicemailUri: " + voicemailUri); if (sAsyncTaskExecutor == null) { initTaskExecutor(); } @@ -66,9 +68,7 @@ public class CallLogAsyncTaskUtil { uploadVoicemailLocalChangesToServer(context); } - Intent intent = new Intent(context, CallLogNotificationsService.class); - intent.setAction(CallLogNotificationsService.ACTION_MARK_NEW_VOICEMAILS_AS_OLD); - context.startService(intent); + CallLogNotificationsService.markAllNewVoicemailsAsOld(context); return null; } }); diff --git a/java/com/android/dialer/app/calllog/CallLogFragment.java b/java/com/android/dialer/app/calllog/CallLogFragment.java index 6e4b23fc1..b03a4ad64 100644 --- a/java/com/android/dialer/app/calllog/CallLogFragment.java +++ b/java/com/android/dialer/app/calllog/CallLogFragment.java @@ -35,53 +35,68 @@ import android.provider.ContactsContract; import android.support.annotation.CallSuper; import android.support.annotation.Nullable; import android.support.v13.app.FragmentCompat; +import android.support.v13.app.FragmentCompat.OnRequestPermissionsResultCallback; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; +import android.view.View.OnClickListener; import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; import com.android.dialer.app.Bindings; import com.android.dialer.app.R; +import com.android.dialer.app.calllog.CallLogAdapter.CallFetcher; +import com.android.dialer.app.calllog.CallLogAdapter.MultiSelectRemoveView; import com.android.dialer.app.calllog.calllogcache.CallLogCache; import com.android.dialer.app.contactinfo.ContactInfoCache; import com.android.dialer.app.contactinfo.ContactInfoCache.OnContactInfoChangedListener; import com.android.dialer.app.contactinfo.ExpirableCacheHeadlessFragment; import com.android.dialer.app.list.ListsFragment; import com.android.dialer.app.voicemail.VoicemailPlaybackPresenter; -import com.android.dialer.app.widget.EmptyContentView; -import com.android.dialer.app.widget.EmptyContentView.OnEmptyViewActionButtonClickedListener; import com.android.dialer.blocking.FilteredNumberAsyncQueryHandler; import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; import com.android.dialer.database.CallLogQueryHandler; +import com.android.dialer.database.CallLogQueryHandler.Listener; import com.android.dialer.location.GeoUtil; +import com.android.dialer.logging.DialerImpression; +import com.android.dialer.logging.Logger; +import com.android.dialer.oem.CequintCallerIdManager; +import com.android.dialer.performancereport.PerformanceReport; import com.android.dialer.phonenumbercache.ContactInfoHelper; import com.android.dialer.util.PermissionsUtil; +import com.android.dialer.widget.EmptyContentView; +import com.android.dialer.widget.EmptyContentView.OnEmptyViewActionButtonClickedListener; +import java.util.Arrays; /** * Displays a list of call log entries. To filter for a particular kind of call (all, missed or * voicemails), specify it in the constructor. */ public class CallLogFragment extends Fragment - implements CallLogQueryHandler.Listener, - CallLogAdapter.CallFetcher, + implements Listener, + CallFetcher, + MultiSelectRemoveView, OnEmptyViewActionButtonClickedListener, - FragmentCompat.OnRequestPermissionsResultCallback, - CallLogModalAlertManager.Listener { + OnRequestPermissionsResultCallback, + CallLogModalAlertManager.Listener, + OnClickListener { private static final String KEY_FILTER_TYPE = "filter_type"; private static final String KEY_LOG_LIMIT = "log_limit"; private static final String KEY_DATE_LIMIT = "date_limit"; private static final String KEY_IS_CALL_LOG_ACTIVITY = "is_call_log_activity"; private static final String KEY_HAS_READ_CALL_LOG_PERMISSION = "has_read_call_log_permission"; private static final String KEY_REFRESH_DATA_REQUIRED = "refresh_data_required"; + private static final String KEY_SELECT_ALL_MODE = "select_all_mode_checked"; // No limit specified for the number of logs to show; use the CallLogQueryHandler's default. private static final int NO_LOG_LIMIT = -1; // No date-based filtering. private static final int NO_DATE_LIMIT = 0; - private static final int READ_CALL_LOG_PERMISSION_REQUEST_CODE = 1; + private static final int PHONE_PERMISSIONS_REQUEST_CODE = 1; private static final int EVENT_UPDATE_DISPLAY = 1; @@ -90,6 +105,9 @@ public class CallLogFragment extends Fragment // See issue 6363009 private final ContentObserver mCallLogObserver = new CustomContentObserver(); private final ContentObserver mContactsObserver = new CustomContentObserver(); + private View mMultiSelectUnSelectAllViewContent; + private TextView mSelectUnselectAllViewText; + private ImageView mSelectUnselectAllIcon; private RecyclerView mRecyclerView; private LinearLayoutManager mLayoutManager; private CallLogAdapter mAdapter; @@ -123,6 +141,7 @@ public class CallLogFragment extends Fragment * True if this instance of the CallLogFragment shown in the CallLogActivity. */ private boolean mIsCallLogActivity = false; + private boolean selectAllMode; private final Handler mDisplayUpdateHandler = new Handler() { @Override @@ -194,6 +213,7 @@ public class CallLogFragment extends Fragment mIsCallLogActivity = state.getBoolean(KEY_IS_CALL_LOG_ACTIVITY, mIsCallLogActivity); mHasReadCallLogPermission = state.getBoolean(KEY_HAS_READ_CALL_LOG_PERMISSION, false); mRefreshDataRequired = state.getBoolean(KEY_REFRESH_DATA_REQUIRED, mRefreshDataRequired); + selectAllMode = state.getBoolean(KEY_SELECT_ALL_MODE, false); } final Activity activity = getActivity(); @@ -290,12 +310,20 @@ public class CallLogFragment extends Fragment mRecyclerView.setHasFixedSize(true); mLayoutManager = new LinearLayoutManager(getActivity()); mRecyclerView.setLayoutManager(mLayoutManager); + PerformanceReport.logOnScrollStateChange(mRecyclerView); mEmptyListView = (EmptyContentView) view.findViewById(R.id.empty_list_view); mEmptyListView.setImage(R.drawable.empty_call_log); mEmptyListView.setActionClickedListener(this); mModalAlertView = (ViewGroup) view.findViewById(R.id.modal_message_container); mModalAlertManager = new CallLogModalAlertManager(LayoutInflater.from(getContext()), mModalAlertView, this); + mMultiSelectUnSelectAllViewContent = + view.findViewById(R.id.multi_select_select_all_view_content); + mSelectUnselectAllViewText = (TextView) view.findViewById(R.id.select_all_view_text); + mSelectUnselectAllIcon = (ImageView) view.findViewById(R.id.select_all_view_icon); + mMultiSelectUnSelectAllViewContent.setOnClickListener(null); + mSelectUnselectAllIcon.setOnClickListener(this); + mSelectUnselectAllViewText.setOnClickListener(this); } protected void setupData() { @@ -317,6 +345,10 @@ public class CallLogFragment extends Fragment getActivity(), mRecyclerView, this, + this, + activityType == CallLogAdapter.ACTIVITY_TYPE_DIALTACTS + ? (CallLogAdapter.OnActionModeStateChangedListener) getActivity() + : null, CallLogCache.getCallLogCache(getActivity()), mContactInfoCache, getVoicemailPlaybackPresenter(), @@ -335,9 +367,18 @@ public class CallLogFragment extends Fragment public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setupData(); + updateSelectAllState(savedInstanceState); mAdapter.onRestoreInstanceState(savedInstanceState); } + private void updateSelectAllState(Bundle savedInstanceState) { + if (savedInstanceState != null) { + if (savedInstanceState.getBoolean(KEY_SELECT_ALL_MODE, false)) { + updateSelectAllIcon(); + } + } + } + @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); @@ -379,6 +420,16 @@ public class CallLogFragment extends Fragment super.onPause(); } + @Override + public void onStart() { + super.onStart(); + CequintCallerIdManager cequintCallerIdManager = null; + if (CequintCallerIdManager.isCequintCallerIdEnabled(getContext())) { + cequintCallerIdManager = CequintCallerIdManager.createInstanceForCallLog(); + } + mContactInfoCache.setCequintCallerIdManager(cequintCallerIdManager); + } + @Override public void onStop() { updateOnTransition(); @@ -407,7 +458,7 @@ public class CallLogFragment extends Fragment outState.putBoolean(KEY_IS_CALL_LOG_ACTIVITY, mIsCallLogActivity); outState.putBoolean(KEY_HAS_READ_CALL_LOG_PERMISSION, mHasReadCallLogPermission); outState.putBoolean(KEY_REFRESH_DATA_REQUIRED, mRefreshDataRequired); - + outState.putBoolean(KEY_SELECT_ALL_MODE, selectAllMode); mAdapter.onSaveInstanceState(outState); } @@ -451,6 +502,8 @@ public class CallLogFragment extends Fragment mEmptyListView.setActionLabel(EmptyContentView.NO_LABEL); } else if (filterType == CallLogQueryHandler.CALL_TYPE_ALL) { mEmptyListView.setActionLabel(R.string.call_log_all_empty_action); + } else { + mEmptyListView.setActionLabel(EmptyContentView.NO_LABEL); } } @@ -503,7 +556,8 @@ public class CallLogFragment extends Fragment if (mKeyguardManager != null && !mKeyguardManager.inKeyguardRestrictedInputMode() && mCallTypeFilter == Calls.VOICEMAIL_TYPE) { - CallLogNotificationsService.markNewVoicemailsAsOld(getActivity(), null); + LogUtil.i("CallLogFragment.updateOnTransition", "clearing all new voicemails"); + CallLogNotificationsService.markAllNewVoicemailsAsOld(getActivity()); } } @@ -514,9 +568,14 @@ public class CallLogFragment extends Fragment return; } - if (!PermissionsUtil.hasPermission(activity, READ_CALL_LOG)) { - FragmentCompat.requestPermissions( - this, new String[] {READ_CALL_LOG}, READ_CALL_LOG_PERMISSION_REQUEST_CODE); + String[] deniedPermissions = + PermissionsUtil.getPermissionsCurrentlyDenied( + getContext(), PermissionsUtil.allPhoneGroupPermissionsUsedInDialer); + if (deniedPermissions.length > 0) { + LogUtil.i( + "CallLogFragment.onEmptyViewActionButtonClicked", + "Requesting permissions: " + Arrays.toString(deniedPermissions)); + FragmentCompat.requestPermissions(this, deniedPermissions, PHONE_PERMISSIONS_REQUEST_CODE); } else if (!mIsCallLogActivity) { // Show dialpad if we are not in the call log activity. ((HostInterface) activity).showDialpad(); @@ -526,7 +585,7 @@ public class CallLogFragment extends Fragment @Override public void onRequestPermissionsResult( int requestCode, String[] permissions, int[] grantResults) { - if (requestCode == READ_CALL_LOG_PERMISSION_REQUEST_CODE) { + if (requestCode == PHONE_PERMISSIONS_REQUEST_CODE) { if (grantResults.length >= 1 && PackageManager.PERMISSION_GRANTED == grantResults[0]) { // Force a refresh of the data since we were missing the permission before this. mRefreshDataRequired = true; @@ -589,6 +648,44 @@ public class CallLogFragment extends Fragment } } + @Override + public void showMultiSelectRemoveView(boolean show) { + mMultiSelectUnSelectAllViewContent.setVisibility(show ? View.VISIBLE : View.GONE); + mMultiSelectUnSelectAllViewContent.setAlpha(show ? 0 : 1); + mMultiSelectUnSelectAllViewContent.animate().alpha(show ? 1 : 0).start(); + ((ListsFragment) getParentFragment()).showMultiSelectRemoveView(show); + } + + @Override + public void setSelectAllModeToFalse() { + selectAllMode = false; + mSelectUnselectAllIcon.setImageDrawable( + getContext().getDrawable(R.drawable.ic_empty_check_mark_white_24dp)); + } + + @Override + public void onClick(View v) { + selectAllMode = !selectAllMode; + if (selectAllMode) { + Logger.get(v.getContext()).logImpression(DialerImpression.Type.MULTISELECT_SELECT_ALL); + } else { + Logger.get(v.getContext()).logImpression(DialerImpression.Type.MULTISELECT_UNSELECT_ALL); + } + updateSelectAllIcon(); + } + + private void updateSelectAllIcon() { + if (selectAllMode) { + mSelectUnselectAllIcon.setImageDrawable( + getContext().getDrawable(R.drawable.ic_check_mark_blue_24dp)); + getAdapter().onAllSelected(); + } else { + mSelectUnselectAllIcon.setImageDrawable( + getContext().getDrawable(R.drawable.ic_empty_check_mark_white_24dp)); + getAdapter().onAllDeselected(); + } + } + public interface HostInterface { void showDialpad(); diff --git a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java index 1daccd1a4..c59f0dd61 100644 --- a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java +++ b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java @@ -17,6 +17,7 @@ package com.android.dialer.app.calllog; import android.app.Activity; +import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; import android.content.res.Resources; @@ -25,32 +26,37 @@ import android.os.AsyncTask; import android.provider.CallLog; import android.provider.CallLog.Calls; import android.provider.ContactsContract.CommonDataKinds.Phone; +import android.support.annotation.IntDef; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.VisibleForTesting; import android.support.v7.widget.CardView; import android.support.v7.widget.RecyclerView; +import android.telecom.PhoneAccount; 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.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewStub; import android.widget.ImageButton; import android.widget.ImageView; -import android.widget.QuickContactBadge; import android.widget.TextView; +import android.widget.Toast; import com.android.contacts.common.ClipboardUtils; import com.android.contacts.common.ContactPhotoManager; import com.android.contacts.common.compat.PhoneNumberUtilsCompat; import com.android.contacts.common.dialog.CallSubjectDialog; +import com.android.contacts.common.lettertiles.LetterTileDrawable; +import com.android.contacts.common.lettertiles.LetterTileDrawable.ContactType; import com.android.contacts.common.util.UriUtils; import com.android.dialer.app.DialtactsActivity; import com.android.dialer.app.R; +import com.android.dialer.app.calllog.CallLogAdapter.OnActionModeStateChangedListener; import com.android.dialer.app.calllog.calllogcache.CallLogCache; import com.android.dialer.app.voicemail.VoicemailPlaybackLayout; import com.android.dialer.app.voicemail.VoicemailPlaybackPresenter; @@ -58,23 +64,31 @@ 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.CallComposerContact; +import com.android.dialer.calldetails.CallDetailsActivity; import com.android.dialer.calldetails.CallDetailsEntries; -import com.android.dialer.common.ConfigProviderBindings; +import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; import com.android.dialer.compat.CompatUtils; +import com.android.dialer.configprovider.ConfigProviderBindings; +import com.android.dialer.dialercontact.DialerContact; +import com.android.dialer.dialercontact.SimDetails; 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.InteractionEvent; import com.android.dialer.logging.Logger; import com.android.dialer.logging.ScreenEvent; +import com.android.dialer.logging.UiAction; +import com.android.dialer.performancereport.PerformanceReport; import com.android.dialer.phonenumbercache.CachedNumberLookupService; import com.android.dialer.phonenumbercache.ContactInfo; import com.android.dialer.phonenumbercache.PhoneNumberCache; import com.android.dialer.phonenumberutil.PhoneNumberHelper; import com.android.dialer.util.CallUtil; import com.android.dialer.util.DialerUtils; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; /** * This is an object containing references to views contained by the call log list item. This @@ -90,7 +104,7 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder /** The root view of the call log list item */ public final View rootView; /** The quick contact badge for the contact. */ - public final QuickContactBadge quickContactView; + public final DialerQuickContactBadge quickContactView; /** The primary action view of the entry. */ public final View primaryActionView; /** The details of the phone call. */ @@ -108,6 +122,7 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder private final CachedNumberLookupService mCachedNumberLookupService; private final VoicemailPlaybackPresenter mVoicemailPlaybackPresenter; private final OnClickListener mBlockReportListener; + @HostUi private final int hostUi; /** 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. */ @@ -201,6 +216,7 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder public boolean lightbringerReady; private View.OnClickListener mExpandCollapseListener; + private final OnActionModeStateChangedListener onActionModeStateChangedListener; private final View.OnLongClickListener longPressListener; private boolean mVoicemailPrimaryActionButtonClicked; @@ -216,11 +232,12 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder OnClickListener blockReportListener, View.OnClickListener expandCollapseListener, View.OnLongClickListener longClickListener, + CallLogAdapter.OnActionModeStateChangedListener actionModeStateChangedListener, CallLogCache callLogCache, CallLogListItemHelper callLogListItemHelper, VoicemailPlaybackPresenter voicemailPlaybackPresenter, View rootView, - QuickContactBadge quickContactView, + DialerQuickContactBadge dialerQuickContactView, View primaryActionView, PhoneCallDetailsViews phoneCallDetailsViews, CardView callLogEntryView, @@ -230,6 +247,7 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder mContext = context; mExpandCollapseListener = expandCollapseListener; + onActionModeStateChangedListener = actionModeStateChangedListener; longPressListener = longClickListener; mCallLogCache = callLogCache; mCallLogListItemHelper = callLogListItemHelper; @@ -238,7 +256,7 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder mCachedNumberLookupService = PhoneNumberCache.get(mContext).getCachedNumberLookupService(); this.rootView = rootView; - this.quickContactView = quickContactView; + this.quickContactView = dialerQuickContactView; this.primaryActionView = primaryActionView; this.phoneCallDetailsViews = phoneCallDetailsViews; this.callLogEntryView = callLogEntryView; @@ -251,6 +269,23 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder phoneCallDetailsViews.nameView.setElegantTextHeight(false); phoneCallDetailsViews.callLocationAndDate.setElegantTextHeight(false); + if (mContext instanceof CallLogActivity) { + hostUi = HostUi.CALL_HISTORY; + Logger.get(mContext) + .logQuickContactOnTouch( + quickContactView, InteractionEvent.Type.OPEN_QUICK_CONTACT_FROM_CALL_HISTORY, true); + } else if (mVoicemailPlaybackPresenter == null) { + hostUi = HostUi.CALL_LOG; + Logger.get(mContext) + .logQuickContactOnTouch( + quickContactView, InteractionEvent.Type.OPEN_QUICK_CONTACT_FROM_CALL_LOG, true); + } else { + hostUi = HostUi.VOICEMAIL; + Logger.get(mContext) + .logQuickContactOnTouch( + quickContactView, InteractionEvent.Type.OPEN_QUICK_CONTACT_FROM_VOICEMAIL, false); + } + quickContactView.setOverlay(null); if (CompatUtils.hasPrioritizedMimeType()) { quickContactView.setPrioritizedMimeType(Phone.CONTENT_ITEM_TYPE); @@ -264,6 +299,8 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder CallLogAdapter.ENABLE_CALL_LOG_MULTI_SELECT_FLAG)) { primaryActionView.setOnLongClickListener(longPressListener); quickContactView.setOnLongClickListener(longPressListener); + quickContactView.setMulitSelectListeners( + mExpandCollapseListener, onActionModeStateChangedListener); } else { primaryActionView.setOnCreateContextMenuListener(this); } @@ -275,6 +312,7 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder OnClickListener blockReportListener, View.OnClickListener expandCollapseListener, View.OnLongClickListener longClickListener, + CallLogAdapter.OnActionModeStateChangedListener actionModeStateChangeListener, CallLogCache callLogCache, CallLogListItemHelper callLogListItemHelper, VoicemailPlaybackPresenter voicemailPlaybackPresenter) { @@ -284,11 +322,12 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder blockReportListener, expandCollapseListener, longClickListener, + actionModeStateChangeListener, callLogCache, callLogListItemHelper, voicemailPlaybackPresenter, view, - (QuickContactBadge) view.findViewById(R.id.quick_contact_photo), + (DialerQuickContactBadge) view.findViewById(R.id.quick_contact_photo), view.findViewById(R.id.primary_action_view), PhoneCallDetailsViews.fromView(view), (CardView) view.findViewById(R.id.call_log_row), @@ -297,6 +336,11 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder } public static CallLogListItemViewHolder createForTest(Context context) { + return createForTest(context, null); + } + + static CallLogListItemViewHolder createForTest( + Context context, VoicemailPlaybackPresenter voicemailPlaybackPresenter) { Resources resources = context.getResources(); CallLogCache callLogCache = CallLogCache.getCallLogCache(context); PhoneCallDetailsHelper phoneCallDetailsHelper = @@ -308,11 +352,12 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder null, null /* expandCollapseListener */, null, + null, callLogCache, new CallLogListItemHelper(phoneCallDetailsHelper, resources, callLogCache), - null /* voicemailPlaybackPresenter */, - new View(context), - new QuickContactBadge(context), + voicemailPlaybackPresenter, + LayoutInflater.from(context).inflate(R.layout.call_log_list_item, null), + new DialerQuickContactBadge(context), new View(context), PhoneCallDetailsViews.createForTest(context), new CardView(context), @@ -456,6 +501,17 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder // Treat as normal list item; show call button, if possible. if (PhoneNumberHelper.canPlaceCallsTo(number, numberPresentation)) { boolean isVoicemailNumber = mCallLogCache.isVoicemailNumber(accountHandle, number); + + if (!isVoicemailNumber && showLightbringerPrimaryButton()) { + primaryActionButtonView.setTag(IntentProvider.getLightbringerIntentProvider(number)); + primaryActionButtonView.setContentDescription( + TextUtils.expandTemplate( + mContext.getString(R.string.description_video_call_action), validNameOrNumber)); + primaryActionButtonView.setImageResource(R.drawable.quantum_ic_videocam_vd_theme_24); + primaryActionButtonView.setVisibility(View.VISIBLE); + return; + } + if (isVoicemailNumber) { // Call to generic voicemail number, in case there are multiple accounts. primaryActionButtonView.setTag(IntentProvider.getReturnVoicemailCallIntentProvider()); @@ -467,7 +523,7 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder primaryActionButtonView.setContentDescription( TextUtils.expandTemplate( mContext.getString(R.string.description_call_action), validNameOrNumber)); - primaryActionButtonView.setImageResource(R.drawable.quantum_ic_call_white_24); + primaryActionButtonView.setImageResource(R.drawable.quantum_ic_call_vd_theme_24); primaryActionButtonView.setVisibility(View.VISIBLE); } else { primaryActionButtonView.setTag(null); @@ -513,8 +569,15 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder return; } - if (!TextUtils.isEmpty(voicemailUri) && canPlaceCallToNumber) { + if (canPlaceCallToNumber) { + // Set up the call button but hide it by default (the primary action is to call so it is + // redundant). We then set it to be visible when appropriate below. This saves us having to + // remember to set it to GONE in multiple places. callButtonView.setTag(IntentProvider.getReturnCallIntentProvider(number)); + callButtonView.setVisibility(View.GONE); + } + + if (!TextUtils.isEmpty(voicemailUri) && canPlaceCallToNumber) { ((TextView) callButtonView.findViewById(R.id.call_action_text)) .setText( TextUtils.expandTemplate( @@ -529,13 +592,14 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder callTypeOrLocationView.setVisibility(View.GONE); } callButtonView.setVisibility(View.VISIBLE); - } else { - callButtonView.setVisibility(View.GONE); } if (hasPlacedCarrierVideoCall() || canSupportCarrierVideoCall()) { videoCallButtonView.setTag(IntentProvider.getReturnVideoCallIntentProvider(number)); videoCallButtonView.setVisibility(View.VISIBLE); + } else if (showLightbringerPrimaryButton()) { + callButtonView.setVisibility(View.VISIBLE); + videoCallButtonView.setVisibility(View.GONE); } else if (lightbringerReady) { videoCallButtonView.setTag(IntentProvider.getLightbringerIntentProvider(number)); videoCallButtonView.setVisibility(View.VISIBLE); @@ -567,8 +631,12 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder detailsButtonView.setVisibility(View.GONE); } else { detailsButtonView.setVisibility(View.VISIBLE); + boolean canReportCallerId = + mCachedNumberLookupService != null + && mCachedNumberLookupService.canReportAsInvalid(info.sourceType, info.objectId); detailsButtonView.setTag( - IntentProvider.getCallDetailIntentProvider(callDetailsEntries, buildContact())); + IntentProvider.getCallDetailIntentProvider( + callDetailsEntries, buildContact(), canReportCallerId)); } boolean isBlockedOrSpam = blockId != null || (isSpamFeatureEnabled && isSpam); @@ -616,6 +684,12 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder return false; } + private boolean showLightbringerPrimaryButton() { + return accountHandle != null + && accountHandle.getComponentName().equals(getLightbringer().getPhoneAccountComponentName()) + && lightbringerReady; + } + private static boolean hasDialableChar(CharSequence number) { if (TextUtils.isEmpty(number)) { return false; @@ -635,9 +709,7 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder if (accountHandle == null) { return false; } - if (accountHandle - .getComponentName() - .equals(getLightbringer().getPhoneAccountComponentName(mContext))) { + if (accountHandle.getComponentName().equals(getLightbringer().getPhoneAccountComponentName())) { return false; } return true; @@ -717,19 +789,14 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder 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; - } else if (numberPresentation == TelecomManager.PRESENTATION_RESTRICTED) { - contactType = ContactPhotoManager.TYPE_GENERIC_AVATAR; - } - return contactType; + private @ContactType int getContactType() { + return LetterTileDrawable.getContactTypeFromPrimitives( + mCallLogCache.isVoicemailNumber(accountHandle, number), + isSpam, + mCachedNumberLookupService != null + && mCachedNumberLookupService.isBusiness(info.sourceType), + numberPresentation, + false); } @Override @@ -795,19 +862,45 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder mVoicemailPlaybackPresenter.shareVoicemail(); } else { logCallLogAction(view.getId()); + final IntentProvider intentProvider = (IntentProvider) view.getTag(); - if (intentProvider != null) { - final Intent intent = intentProvider.getIntent(mContext); - // See IntentProvider.getCallDetailIntentProvider() for why this may be null. - if (intent != null) { - DialerUtils.startActivityWithErrorToast(mContext, intent); + if (intentProvider == null) { + return; + } + + final Intent intent = intentProvider.getIntent(mContext); + // See IntentProvider.getCallDetailIntentProvider() for why this may be null. + if (intent == null) { + return; + } + + // We check to see if we are starting a Lightbringer intent. The reason is Lightbringer + // intents need to be started using startActivityForResult instead of the usual startActivity + String packageName = intent.getPackage(); + if (getLightbringer().getPackageName().equals(packageName)) { + startLightbringerActivity(intent); + } else { + if (intent.getComponent() != null + && CallDetailsActivity.class.getName().equals(intent.getComponent().getClassName())) { + // We are going to open call detail + PerformanceReport.recordClick(UiAction.Type.OPEN_CALL_DETAIL); } + DialerUtils.startActivityWithErrorToast(mContext, intent); } } } - private CallComposerContact buildContact() { - CallComposerContact.Builder contact = CallComposerContact.newBuilder(); + private void startLightbringerActivity(Intent intent) { + try { + Activity activity = (Activity) mContext; + activity.startActivityForResult(intent, DialtactsActivity.ACTIVITY_REQUEST_CODE_LIGHTBRINGER); + } catch (ActivityNotFoundException e) { + Toast.makeText(mContext, R.string.activity_not_available, Toast.LENGTH_SHORT).show(); + } + } + + private DialerContact buildContact() { + DialerContact.Builder contact = DialerContact.newBuilder(); contact.setPhotoId(info.photoId); if (info.photoUri != null) { contact.setPhotoUri(info.photoUri.toString()); @@ -826,6 +919,19 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder } /* phone number type (e.g. mobile) in second line of contact view */ contact.setNumberLabel(numberType); + + /* third line of contact view. */ + String accountLabel = mCallLogCache.getAccountLabel(accountHandle); + if (!TextUtils.isEmpty(accountLabel)) { + SimDetails.Builder simDetails = SimDetails.newBuilder().setNetwork(accountLabel); + int color = mCallLogCache.getAccountColor(accountHandle); + if (color == PhoneAccount.NO_HIGHLIGHT_COLOR) { + simDetails.setColor(R.color.secondary_text_color); + } else { + simDetails.setColor(color); + } + contact.setSimDetails(simDetails.build()); + } return contact.build(); } @@ -834,8 +940,38 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder Logger.get(mContext).logImpression(DialerImpression.Type.CALL_LOG_SEND_MESSAGE); } else if (id == R.id.add_to_existing_contact_action) { Logger.get(mContext).logImpression(DialerImpression.Type.CALL_LOG_ADD_TO_CONTACT); + switch (hostUi) { + case HostUi.CALL_HISTORY: + Logger.get(mContext) + .logImpression(DialerImpression.Type.ADD_TO_A_CONTACT_FROM_CALL_HISTORY); + break; + case HostUi.CALL_LOG: + Logger.get(mContext).logImpression(DialerImpression.Type.ADD_TO_A_CONTACT_FROM_CALL_LOG); + break; + case HostUi.VOICEMAIL: + Logger.get(mContext).logImpression(DialerImpression.Type.ADD_TO_A_CONTACT_FROM_VOICEMAIL); + break; + default: + throw Assert.createIllegalStateFailException(); + } } else if (id == R.id.create_new_contact_action) { Logger.get(mContext).logImpression(DialerImpression.Type.CALL_LOG_CREATE_NEW_CONTACT); + switch (hostUi) { + case HostUi.CALL_HISTORY: + Logger.get(mContext) + .logImpression(DialerImpression.Type.CREATE_NEW_CONTACT_FROM_CALL_HISTORY); + break; + case HostUi.CALL_LOG: + Logger.get(mContext) + .logImpression(DialerImpression.Type.CREATE_NEW_CONTACT_FROM_CALL_LOG); + break; + case HostUi.VOICEMAIL: + Logger.get(mContext) + .logImpression(DialerImpression.Type.CREATE_NEW_CONTACT_FROM_VOICEMAIL); + break; + default: + throw Assert.createIllegalStateFailException(); + } } } @@ -987,6 +1123,15 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder Logger.get(mContext).logScreenView(ScreenEvent.Type.CALL_LOG_CONTEXT_MENU, (Activity) mContext); } + /** Specifies where the view holder belongs. */ + @IntDef({HostUi.CALL_LOG, HostUi.CALL_HISTORY, HostUi.VOICEMAIL}) + @Retention(RetentionPolicy.SOURCE) + private @interface HostUi { + int CALL_LOG = 0; + int CALL_HISTORY = 1; + int VOICEMAIL = 2; + } + public interface OnClickListener { void onBlockReportSpam( diff --git a/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java b/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java index e169b8de9..43e03e9fd 100644 --- a/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java +++ b/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java @@ -18,7 +18,6 @@ package com.android.dialer.app.calllog; import android.Manifest; import android.annotation.TargetApi; -import android.app.NotificationManager; import android.content.ContentResolver; import android.content.ContentUris; import android.content.ContentValues; @@ -27,6 +26,7 @@ import android.database.Cursor; import android.net.Uri; import android.os.Build.VERSION_CODES; import android.provider.CallLog.Calls; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.WorkerThread; import android.support.v4.os.UserManagerCompat; @@ -36,7 +36,6 @@ import com.android.dialer.app.R; import com.android.dialer.calllogutils.PhoneNumberDisplayUtil; import com.android.dialer.common.LogUtil; import com.android.dialer.location.GeoUtil; -import com.android.dialer.notification.GroupedNotificationUtil; import com.android.dialer.phonenumbercache.ContactInfo; import com.android.dialer.phonenumbercache.ContactInfoHelper; import com.android.dialer.util.PermissionsUtil; @@ -46,7 +45,6 @@ import java.util.List; /** Helper class operating on call log notifications. */ public class CallLogNotificationsQueryHelper { - private static final String TAG = "CallLogNotifHelper"; private final Context mContext; private final NewCallsQuery mNewCallsQuery; private final ContactInfoHelper mContactInfoHelper; @@ -74,44 +72,58 @@ public class CallLogNotificationsQueryHelper { countryIso); } + public static void markAllMissedCallsInCallLogAsRead(@NonNull Context context) { + markMissedCallsInCallLogAsRead(context, null); + } + + public static void markSingleMissedCallInCallLogAsRead( + @NonNull Context context, @Nullable Uri callUri) { + if (callUri == null) { + LogUtil.e( + "CallLogNotificationsQueryHelper.markSingleMissedCallInCallLogAsRead", + "call URI is null, unable to mark call as read"); + } else { + markMissedCallsInCallLogAsRead(context, callUri); + } + } + /** - * Removes the missed call notifications and marks calls as read. If a callUri is provided, only - * that call is marked as read. + * If callUri is null then calls with a matching callUri are marked as read, otherwise all calls + * are marked as read. */ @WorkerThread - public static void removeMissedCallNotifications(Context context, @Nullable Uri callUri) { - // Call log is only accessible when unlocked. If that's the case, clear the list of - // new missed calls from the call log. - if (UserManagerCompat.isUserUnlocked(context) && PermissionsUtil.hasPhonePermissions(context)) { - ContentValues values = new ContentValues(); - values.put(Calls.NEW, 0); - values.put(Calls.IS_READ, 1); - StringBuilder where = new StringBuilder(); - where.append(Calls.NEW); - where.append(" = 1 AND "); - where.append(Calls.TYPE); - where.append(" = ?"); - try { - context - .getContentResolver() - .update( - callUri == null ? Calls.CONTENT_URI : callUri, - values, - where.toString(), - new String[] {Integer.toString(Calls.MISSED_TYPE)}); - } catch (IllegalArgumentException e) { - LogUtil.e( - "CallLogNotificationsQueryHelper.removeMissedCallNotifications", - "contacts provider update command failed", - e); - } + private static void markMissedCallsInCallLogAsRead(Context context, @Nullable Uri callUri) { + if (!UserManagerCompat.isUserUnlocked(context)) { + LogUtil.e("CallLogNotificationsQueryHelper.markMissedCallsInCallLogAsRead", "locked"); + return; + } + if (!PermissionsUtil.hasPhonePermissions(context)) { + LogUtil.e("CallLogNotificationsQueryHelper.markMissedCallsInCallLogAsRead", "no permission"); + return; } - GroupedNotificationUtil.removeNotification( - context.getSystemService(NotificationManager.class), - callUri != null ? callUri.toString() : null, - R.id.notification_missed_call, - MissedCallNotifier.NOTIFICATION_TAG); + ContentValues values = new ContentValues(); + values.put(Calls.NEW, 0); + values.put(Calls.IS_READ, 1); + StringBuilder where = new StringBuilder(); + where.append(Calls.NEW); + where.append(" = 1 AND "); + where.append(Calls.TYPE); + where.append(" = ?"); + try { + context + .getContentResolver() + .update( + callUri == null ? Calls.CONTENT_URI : callUri, + values, + where.toString(), + new String[] {Integer.toString(Calls.MISSED_TYPE)}); + } catch (IllegalArgumentException e) { + LogUtil.e( + "CallLogNotificationsQueryHelper.markMissedCallsInCallLogAsRead", + "contacts provider update command failed", + e); + } } /** Create a new instance of {@link NewCallsQuery}. */ @@ -281,7 +293,9 @@ public class CallLogNotificationsQueryHelper { @TargetApi(VERSION_CODES.M) public List query(int type) { if (!PermissionsUtil.hasPermission(mContext, Manifest.permission.READ_CALL_LOG)) { - LogUtil.w(TAG, "No READ_CALL_LOG permission, returning null for calls lookup."); + LogUtil.w( + "CallLogNotificationsQueryHelper.DefaultNewCallsQuery.query", + "no READ_CALL_LOG permission, returning null for calls lookup."); return null; } final String selection = String.format("%s = 1 AND %s = ?", Calls.NEW, Calls.TYPE); @@ -302,7 +316,9 @@ public class CallLogNotificationsQueryHelper { } return newCalls; } catch (RuntimeException e) { - LogUtil.w(TAG, "Exception when querying Contacts Provider for calls lookup"); + LogUtil.w( + "CallLogNotificationsQueryHelper.DefaultNewCallsQuery.query", + "exception when querying Contacts Provider for calls lookup"); return null; } } diff --git a/java/com/android/dialer/app/calllog/CallLogNotificationsService.java b/java/com/android/dialer/app/calllog/CallLogNotificationsService.java index 7dfd2cb69..be1ebfb6d 100644 --- a/java/com/android/dialer/app/calllog/CallLogNotificationsService.java +++ b/java/com/android/dialer/app/calllog/CallLogNotificationsService.java @@ -17,12 +17,13 @@ package com.android.dialer.app.calllog; import android.app.IntentService; +import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.net.Uri; -import android.os.Handler; -import android.os.Looper; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.annotation.VisibleForTesting; import com.android.dialer.common.LogUtil; import com.android.dialer.telecom.TelecomUtil; import com.android.dialer.util.PermissionsUtil; @@ -43,16 +44,20 @@ import com.android.dialer.util.PermissionsUtil; */ public class CallLogNotificationsService extends IntentService { - /** Action to mark all the new voicemails as old. */ - public static final String ACTION_MARK_NEW_VOICEMAILS_AS_OLD = - "com.android.dialer.calllog.ACTION_MARK_NEW_VOICEMAILS_AS_OLD"; + private static final String ACTION_MARK_ALL_NEW_VOICEMAILS_AS_OLD = + "com.android.dialer.calllog.ACTION_MARK_ALL_NEW_VOICEMAILS_AS_OLD"; - /** Action to mark all the new missed calls as old. */ - public static final String ACTION_MARK_NEW_MISSED_CALLS_AS_OLD = - "com.android.dialer.calllog.ACTION_MARK_NEW_MISSED_CALLS_AS_OLD"; + private static final String ACTION_MARK_SINGLE_NEW_VOICEMAIL_AS_OLD = + "com.android.dialer.calllog.ACTION_MARK_SINGLE_NEW_VOICEMAIL_AS_OLD "; - /** Action to update missed call notifications with a post call note. */ - public static final String ACTION_INCOMING_POST_CALL = + @VisibleForTesting + static final String ACTION_CANCEL_ALL_MISSED_CALLS = + "com.android.dialer.calllog.ACTION_CANCEL_ALL_MISSED_CALLS"; + + private static final String ACTION_CANCEL_SINGLE_MISSED_CALL = + "com.android.dialer.calllog.ACTION_CANCEL_SINGLE_MISSED_CALL"; + + private static final String ACTION_INCOMING_POST_CALL = "com.android.dialer.calllog.INCOMING_POST_CALL"; /** Action to call back a missed call. */ @@ -64,7 +69,7 @@ public class CallLogNotificationsService extends IntentService { * *

It must be a {@link String} */ - public static final String EXTRA_POST_CALL_NOTE = "POST_CALL_NOTE"; + private static final String EXTRA_POST_CALL_NOTE = "POST_CALL_NOTE"; /** * Extra to be included with {@link #ACTION_INCOMING_POST_CALL} to represent the phone number the @@ -72,10 +77,9 @@ public class CallLogNotificationsService extends IntentService { * *

It must be a {@link String} */ - public static final String EXTRA_POST_CALL_NUMBER = "POST_CALL_NUMBER"; + private static final String EXTRA_POST_CALL_NUMBER = "POST_CALL_NUMBER"; public static final int UNKNOWN_MISSED_CALL_COUNT = -1; - private VoicemailQueryHandler mVoicemailQueryHandler; public CallLogNotificationsService() { super("CallLogNotificationsService"); @@ -89,52 +93,95 @@ public class CallLogNotificationsService extends IntentService { context.startService(serviceIntent); } - public static void markNewVoicemailsAsOld(Context context, @Nullable Uri voicemailUri) { + public static void markAllNewVoicemailsAsOld(Context context) { + LogUtil.enterBlock("CallLogNotificationsService.markAllNewVoicemailsAsOld"); Intent serviceIntent = new Intent(context, CallLogNotificationsService.class); - serviceIntent.setAction(CallLogNotificationsService.ACTION_MARK_NEW_VOICEMAILS_AS_OLD); + serviceIntent.setAction(CallLogNotificationsService.ACTION_MARK_ALL_NEW_VOICEMAILS_AS_OLD); + context.startService(serviceIntent); + } + + public static void markSingleNewVoicemailAsOld(Context context, @Nullable Uri voicemailUri) { + LogUtil.enterBlock("CallLogNotificationsService.markSingleNewVoicemailAsOld"); + Intent serviceIntent = new Intent(context, CallLogNotificationsService.class); + serviceIntent.setAction(CallLogNotificationsService.ACTION_MARK_SINGLE_NEW_VOICEMAIL_AS_OLD); serviceIntent.setData(voicemailUri); context.startService(serviceIntent); } - public static void markNewMissedCallsAsOld(Context context, @Nullable Uri callUri) { + public static PendingIntent createMarkAllNewVoicemailsAsOldIntent(@NonNull Context context) { + Intent intent = new Intent(context, CallLogNotificationsService.class); + intent.setAction(CallLogNotificationsService.ACTION_MARK_ALL_NEW_VOICEMAILS_AS_OLD); + return PendingIntent.getService(context, 0, intent, 0); + } + + public static PendingIntent createMarkSingleNewVoicemailAsOldIntent( + @NonNull Context context, @Nullable Uri voicemailUri) { + Intent intent = new Intent(context, CallLogNotificationsService.class); + intent.setAction(CallLogNotificationsService.ACTION_MARK_SINGLE_NEW_VOICEMAIL_AS_OLD); + intent.setData(voicemailUri); + return PendingIntent.getService(context, 0, intent, 0); + } + + public static void cancelAllMissedCalls(@NonNull Context context) { + LogUtil.enterBlock("CallLogNotificationsService.cancelAllMissedCalls"); Intent serviceIntent = new Intent(context, CallLogNotificationsService.class); - serviceIntent.setAction(ACTION_MARK_NEW_MISSED_CALLS_AS_OLD); - serviceIntent.setData(callUri); + serviceIntent.setAction(ACTION_CANCEL_ALL_MISSED_CALLS); context.startService(serviceIntent); } + public static PendingIntent createCancelAllMissedCallsPendingIntent(@NonNull Context context) { + Intent intent = new Intent(context, CallLogNotificationsService.class); + intent.setAction(ACTION_CANCEL_ALL_MISSED_CALLS); + return PendingIntent.getService(context, 0, intent, 0); + } + + public static PendingIntent createCancelSingleMissedCallPendingIntent( + @NonNull Context context, @Nullable Uri callUri) { + Intent intent = new Intent(context, CallLogNotificationsService.class); + intent.setAction(ACTION_CANCEL_SINGLE_MISSED_CALL); + intent.setData(callUri); + return PendingIntent.getService(context, 0, intent, 0); + } + @Override protected void onHandleIntent(Intent intent) { if (intent == null) { - LogUtil.d("CallLogNotificationsService.onHandleIntent", "could not handle null intent"); + LogUtil.e("CallLogNotificationsService.onHandleIntent", "could not handle null intent"); return; } - if (!PermissionsUtil.hasPermission(this, android.Manifest.permission.READ_CALL_LOG)) { + if (!PermissionsUtil.hasPermission(this, android.Manifest.permission.READ_CALL_LOG) + || !PermissionsUtil.hasPermission(this, android.Manifest.permission.WRITE_CALL_LOG)) { + LogUtil.e("CallLogNotificationsService.onHandleIntent", "no READ_CALL_LOG permission"); return; } String action = intent.getAction(); + LogUtil.i("CallLogNotificationsService.onHandleIntent", "action: " + action); switch (action) { - case ACTION_MARK_NEW_VOICEMAILS_AS_OLD: - // VoicemailQueryHandler cannot be created on the IntentService worker thread. The completed - // callback might happen when the thread is dead. - Handler handler = new Handler(Looper.getMainLooper()); - handler.post( - () -> { - if (mVoicemailQueryHandler == null) { - mVoicemailQueryHandler = new VoicemailQueryHandler(this, getContentResolver()); - } - mVoicemailQueryHandler.markNewVoicemailsAsOld(intent.getData()); - }); + case ACTION_MARK_ALL_NEW_VOICEMAILS_AS_OLD: + VoicemailQueryHandler.markAllNewVoicemailsAsRead(this); + VisualVoicemailNotifier.cancelAllVoicemailNotifications(this); + break; + case ACTION_MARK_SINGLE_NEW_VOICEMAIL_AS_OLD: + Uri voicemailUri = intent.getData(); + VoicemailQueryHandler.markSingleNewVoicemailAsRead(this, voicemailUri); + VisualVoicemailNotifier.cancelSingleVoicemailNotification(this, voicemailUri); break; case ACTION_INCOMING_POST_CALL: String note = intent.getStringExtra(EXTRA_POST_CALL_NOTE); String phoneNumber = intent.getStringExtra(EXTRA_POST_CALL_NUMBER); MissedCallNotifier.getIstance(this).insertPostCallNotification(phoneNumber, note); break; - case ACTION_MARK_NEW_MISSED_CALLS_AS_OLD: - CallLogNotificationsQueryHelper.removeMissedCallNotifications(this, intent.getData()); + case ACTION_CANCEL_ALL_MISSED_CALLS: + CallLogNotificationsQueryHelper.markAllMissedCallsInCallLogAsRead(this); + MissedCallNotifier.cancelAllMissedCallNotifications(this); + TelecomUtil.cancelMissedCallsNotification(this); + break; + case ACTION_CANCEL_SINGLE_MISSED_CALL: + Uri callUri = intent.getData(); + CallLogNotificationsQueryHelper.markSingleMissedCallInCallLogAsRead(this, callUri); + MissedCallNotifier.cancelSingleMissedCallNotification(this, callUri); TelecomUtil.cancelMissedCallsNotification(this); break; case ACTION_CALL_BACK_FROM_MISSED_CALL_NOTIFICATION: @@ -145,7 +192,7 @@ public class CallLogNotificationsService extends IntentService { intent.getData()); break; default: - LogUtil.d("CallLogNotificationsService.onHandleIntent", "could not handle: " + intent); + LogUtil.e("CallLogNotificationsService.onHandleIntent", "no handler for action: " + action); break; } } diff --git a/java/com/android/dialer/app/calllog/CallLogReceiver.java b/java/com/android/dialer/app/calllog/CallLogReceiver.java index 172d00100..ce3132d12 100644 --- a/java/com/android/dialer/app/calllog/CallLogReceiver.java +++ b/java/com/android/dialer/app/calllog/CallLogReceiver.java @@ -39,10 +39,10 @@ public class CallLogReceiver extends BroadcastReceiver { if (VoicemailContract.ACTION_NEW_VOICEMAIL.equals(intent.getAction())) { checkVoicemailStatus(context); PendingResult pendingResult = goAsync(); - DefaultVoicemailNotifier.updateVoicemailNotifications(context, pendingResult::finish); + VisualVoicemailUpdateTask.scheduleTask(context, pendingResult::finish); } else if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) { PendingResult pendingResult = goAsync(); - DefaultVoicemailNotifier.updateVoicemailNotifications(context, pendingResult::finish); + VisualVoicemailUpdateTask.scheduleTask(context, pendingResult::finish); } else { LogUtil.w("CallLogReceiver.onReceive", "could not handle: " + intent); } diff --git a/java/com/android/dialer/app/calllog/ClearCallLogDialog.java b/java/com/android/dialer/app/calllog/ClearCallLogDialog.java index a01b89527..155a91618 100644 --- a/java/com/android/dialer/app/calllog/ClearCallLogDialog.java +++ b/java/com/android/dialer/app/calllog/ClearCallLogDialog.java @@ -54,7 +54,7 @@ public class ClearCallLogDialog extends DialogFragment { ProgressDialog.show( getActivity(), getString(R.string.clearCallLogProgress_title), "", true, false); progressDialog.setOwnerActivity(getActivity()); - CallLogNotificationsService.markNewMissedCallsAsOld(getContext(), null); + CallLogNotificationsService.cancelAllMissedCalls(getContext()); final AsyncTask task = new AsyncTask() { @Override diff --git a/java/com/android/dialer/app/calllog/DefaultVoicemailNotifier.java b/java/com/android/dialer/app/calllog/DefaultVoicemailNotifier.java deleted file mode 100644 index 58fe6fa2c..000000000 --- a/java/com/android/dialer/app/calllog/DefaultVoicemailNotifier.java +++ /dev/null @@ -1,446 +0,0 @@ -/* - * Copyright (C) 2011 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.calllog; - -import android.annotation.TargetApi; -import android.app.Notification; -import android.app.NotificationManager; -import android.app.PendingIntent; -import android.content.Context; -import android.content.Intent; -import android.content.res.Resources; -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.annotation.WorkerThread; -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; -import com.android.contacts.common.compat.TelephonyManagerCompat; -import com.android.contacts.common.util.ContactDisplayUtils; -import com.android.dialer.app.DialtactsActivity; -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.blocking.FilteredNumberAsyncQueryHandler; -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.common.concurrent.DialerExecutor.Worker; -import com.android.dialer.common.concurrent.DialerExecutors; -import com.android.dialer.logging.DialerImpression; -import com.android.dialer.logging.Logger; -import com.android.dialer.notification.NotificationChannelManager; -import com.android.dialer.notification.NotificationChannelManager.Channel; -import com.android.dialer.phonenumbercache.ContactInfo; -import com.android.dialer.telecom.TelecomUtil; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -/** Shows a voicemail notification in the status bar. */ -public class DefaultVoicemailNotifier implements Worker { - - public static final String TAG = "VoicemailNotifier"; - - /** The tag used to identify notifications from this class. */ - static final String VISUAL_VOICEMAIL_NOTIFICATION_TAG = "DefaultVoicemailNotifier"; - /** The identifier of the notification of new voicemails. */ - 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; - private final FilteredNumberAsyncQueryHandler filteredNumberAsyncQueryHandler; - - @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) - DefaultVoicemailNotifier( - Context context, - CallLogNotificationsQueryHelper queryHelper, - FilteredNumberAsyncQueryHandler filteredNumberAsyncQueryHandler) { - this.context = context; - this.queryHelper = queryHelper; - this.filteredNumberAsyncQueryHandler = filteredNumberAsyncQueryHandler; - } - - public DefaultVoicemailNotifier(Context context) { - this( - context, - CallLogNotificationsQueryHelper.getInstance(context), - new FilteredNumberAsyncQueryHandler(context)); - } - - @Nullable - @Override - public Void doInBackground(@Nullable Void input) throws Throwable { - updateNotification(); - return null; - } - - /** - * Updates the notification and notifies of the call with the given URI. - * - *

Clears the notification if there are no new voicemails, and notifies if the given URI - * corresponds to a new voicemail. - * - *

It is not safe to call this method from the main thread. - */ - @VisibleForTesting - @WorkerThread - void updateNotification() { - Assert.isWorkerThread(); - // Lookup the list of new voicemails to include in the notification. - final List newCalls = queryHelper.getNewVoicemails(); - - if (newCalls == null) { - // Query failed, just return. - return; - } - - Resources resources = context.getResources(); - - // This represents a list of names to include in the notification. - String callers = null; - - // Maps each number into a name: if a number is in the map, it has already left a more - // recent voicemail. - final Map contactInfos = new ArrayMap<>(); - - // Iterate over the new voicemails to determine all the information above. - Iterator itr = newCalls.iterator(); - while (itr.hasNext()) { - NewCall newCall = itr.next(); - - // Skip notifying for numbers which are blocked. - if (!FilteredNumbersUtil.hasRecentEmergencyCall(context) - && filteredNumberAsyncQueryHandler.getBlockedIdSynchronous( - newCall.number, newCall.countryIso) - != null) { - itr.remove(); - - if (newCall.voicemailUri != null) { - // Delete the voicemail. - CallLogAsyncTaskUtil.deleteVoicemailSynchronous(context, newCall.voicemailUri); - } - continue; - } - - // Check if we already know the name associated with this number. - ContactInfo contactInfo = contactInfos.get(newCall.number); - if (contactInfo == null) { - contactInfo = - queryHelper.getContactInfo( - newCall.number, newCall.numberPresentation, newCall.countryIso); - contactInfos.put(newCall.number, contactInfo); - // This is a new caller. Add it to the back of the list of callers. - if (TextUtils.isEmpty(callers)) { - callers = contactInfo.name; - } else { - callers = - resources.getString( - R.string.notification_voicemail_callers_list, callers, contactInfo.name); - } - } - } - - if (newCalls.isEmpty()) { - // No voicemails to notify about - return; - } - - Notification.Builder groupSummary = - createNotificationBuilder() - .setContentTitle( - resources.getQuantityString( - R.plurals.notification_voicemail_title, newCalls.size(), newCalls.size())) - .setContentText(callers) - .setDeleteIntent(createMarkNewVoicemailsAsOldIntent(null)) - .setGroupSummary(true) - .setContentIntent(newVoicemailIntent(null)); - - if (BuildCompat.isAtLeastO()) { - groupSummary.setGroupAlertBehavior(Notification.GROUP_ALERT_CHILDREN); - } - - NotificationChannelManager.applyChannel( - groupSummary, - context, - Channel.VOICEMAIL, - PhoneAccountHandles.getAccount(context, newCalls.get(0))); - - 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(), - 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. - */ - private Pair getNotificationInfo(@Nullable NewCall callToNotify) { - LogUtil.v(TAG, "getNotificationInfo"); - if (callToNotify == null) { - LogUtil.i(TAG, "callToNotify == null"); - return new Pair<>(null, 0); - } - PhoneAccountHandle accountHandle = PhoneAccountHandles.getAccount(context, callToNotify); - if (accountHandle == null) { - LogUtil.i(TAG, "No default phone account found, using default notification ringtone"); - return new Pair<>(null, Notification.DEFAULT_ALL); - } - return new Pair<>( - TelephonyManagerCompat.getVoicemailRingtoneUri(getTelephonyManager(), accountHandle), - getNotificationDefaults(accountHandle)); - } - - private int getNotificationDefaults(PhoneAccountHandle accountHandle) { - if (VERSION.SDK_INT >= VERSION_CODES.N) { - return TelephonyManagerCompat.isVoicemailVibrationEnabled( - getTelephonyManager(), accountHandle) - ? Notification.DEFAULT_VIBRATE - : 0; - } - return Notification.DEFAULT_ALL; - } - - /** Creates a pending intent that marks all new voicemails as old. */ - private PendingIntent createMarkNewVoicemailsAsOldIntent(@Nullable Uri voicemailUri) { - Intent intent = new Intent(context, CallLogNotificationsService.class); - intent.setAction(CallLogNotificationsService.ACTION_MARK_NEW_VOICEMAILS_AS_OLD); - intent.setData(voicemailUri); - return PendingIntent.getService(context, 0, intent, 0); - } - - private NotificationManager getNotificationManager() { - return (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); - } - - private TelephonyManager getTelephonyManager() { - return (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); - } - - private Notification createNotificationForVoicemail( - @NonNull NewCall voicemail, @NonNull Map contactInfos) { - Pair notificationInfo = getNotificationInfo(voicemail); - ContactInfo contactInfo = contactInfos.get(voicemail.number); - - Notification.Builder notificationBuilder = - createNotificationBuilder() - .setContentTitle( - context - .getResources() - .getQuantityString(R.plurals.notification_voicemail_title, 1, 1)) - .setContentText( - ContactDisplayUtils.getTtsSpannedPhoneNumber( - context.getResources(), - R.string.notification_new_voicemail_ticker, - contactInfo.name)) - .setWhen(voicemail.dateMs) - .setSound(notificationInfo.first) - .setDefaults(notificationInfo.second); - - if (voicemail.voicemailUri != null) { - notificationBuilder.setDeleteIntent( - createMarkNewVoicemailsAsOldIntent(voicemail.voicemailUri)); - } - - NotificationChannelManager.applyChannel( - notificationBuilder, - context, - Channel.VOICEMAIL, - PhoneAccountHandles.getAccount(context, voicemail)); - - ContactPhotoLoader loader = new ContactPhotoLoader(context, contactInfo); - Bitmap photoIcon = loader.loadPhotoIcon(); - if (photoIcon != null) { - notificationBuilder.setLargeIcon(photoIcon); - } - if (!TextUtils.isEmpty(voicemail.transcription)) { - Logger.get(context) - .logImpression(DialerImpression.Type.VVM_NOTIFICATION_CREATED_WITH_TRANSCRIPTION); - notificationBuilder.setStyle( - new Notification.BigTextStyle().bigText(voicemail.transcription)); - } - notificationBuilder.setContentIntent(newVoicemailIntent(voicemail)); - Logger.get(context).logImpression(DialerImpression.Type.VVM_NOTIFICATION_CREATED); - return notificationBuilder.build(); - } - - private Notification.Builder createNotificationBuilder() { - return new Notification.Builder(context) - .setSmallIcon(android.R.drawable.stat_notify_voicemail) - .setColor(context.getColor(R.color.dialer_theme_color)) - .setGroup(VISUAL_VOICEMAIL_NOTIFICATION_TAG) - .setOnlyAlertOnce(true) - .setAutoCancel(true); - } - - private PendingIntent newVoicemailIntent(@Nullable NewCall voicemail) { - Intent intent = - DialtactsActivity.getShowTabIntent(context, DialtactsPagerAdapter.TAB_INDEX_VOICEMAIL); - // TODO (b/35486204): scroll to this voicemail - if (voicemail != null) { - intent.setData(voicemail.voicemailUri); - } - intent.putExtra(DialtactsActivity.EXTRA_CLEAR_NEW_VOICEMAILS, true); - return PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); - } - - /** - * Updates the voicemail notifications displayed. - * - * @param runnable Called when the async update task completes no matter if it succeeds or fails. - * May be null. - */ - static void updateVoicemailNotifications(Context context, Runnable runnable) { - if (!TelecomUtil.isDefaultDialer(context)) { - LogUtil.i( - "DefaultVoicemailNotifier.updateVoicemailNotifications", - "not default dialer, not scheduling update to voicemail notifications"); - return; - } - - DialerExecutors.createNonUiTaskBuilder(new DefaultVoicemailNotifier(context)) - .onSuccess( - output -> { - LogUtil.i( - "DefaultVoicemailNotifier.updateVoicemailNotifications", - "update voicemail notifications successful"); - if (runnable != null) { - runnable.run(); - } - }) - .onFailure( - throwable -> { - LogUtil.i( - "DefaultVoicemailNotifier.updateVoicemailNotifications", - "update voicemail notifications failed"); - if (runnable != null) { - runnable.run(); - } - }) - .build() - .executeParallel(null); - } -} diff --git a/java/com/android/dialer/app/calllog/DialerQuickContactBadge.java b/java/com/android/dialer/app/calllog/DialerQuickContactBadge.java new file mode 100644 index 000000000..a3aac41fa --- /dev/null +++ b/java/com/android/dialer/app/calllog/DialerQuickContactBadge.java @@ -0,0 +1,63 @@ +/* + * 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.calllog; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; +import android.widget.QuickContactBadge; +import com.android.dialer.app.calllog.CallLogAdapter.OnActionModeStateChangedListener; +import com.android.dialer.logging.DialerImpression; +import com.android.dialer.logging.Logger; + +/** Allows us to click the contact badge for non multi select mode. */ +class DialerQuickContactBadge extends QuickContactBadge { + + private View.OnClickListener mExtraOnClickListener; + private OnActionModeStateChangedListener onActionModeStateChangeListener; + + public DialerQuickContactBadge(Context context) { + super(context); + } + + public DialerQuickContactBadge(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public DialerQuickContactBadge(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @Override + public void onClick(View v) { + if (mExtraOnClickListener != null + && onActionModeStateChangeListener.isActionModeStateEnabled()) { + Logger.get(v.getContext()) + .logImpression(DialerImpression.Type.MULTISELECT_SINGLE_PRESS_TAP_VIA_CONTACT_BADGE); + mExtraOnClickListener.onClick(v); + } else { + super.onClick(v); + } + } + + public void setMulitSelectListeners( + View.OnClickListener extraOnClickListener, + OnActionModeStateChangedListener actionModeStateChangeListener) { + mExtraOnClickListener = extraOnClickListener; + onActionModeStateChangeListener = actionModeStateChangeListener; + } +} diff --git a/java/com/android/dialer/app/calllog/IntentProvider.java b/java/com/android/dialer/app/calllog/IntentProvider.java index a94c6781e..e1ec9f509 100644 --- a/java/com/android/dialer/app/calllog/IntentProvider.java +++ b/java/com/android/dialer/app/calllog/IntentProvider.java @@ -24,12 +24,14 @@ 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.CallComposerContact; import com.android.dialer.calldetails.CallDetailsActivity; import com.android.dialer.calldetails.CallDetailsEntries; import com.android.dialer.callintent.CallInitiationType; import com.android.dialer.callintent.CallIntentBuilder; +import com.android.dialer.dialercontact.DialerContact; import com.android.dialer.lightbringer.LightbringerComponent; +import com.android.dialer.logging.DialerImpression; +import com.android.dialer.logging.Logger; import com.android.dialer.util.CallUtil; import com.android.dialer.util.IntentUtil; import java.util.ArrayList; @@ -68,6 +70,7 @@ public abstract class IntentProvider { return new IntentProvider() { @Override public Intent getIntent(Context context) { + Logger.get(context).logImpression(DialerImpression.Type.IMS_VIDEO_REQUESTED_FROM_CALL_LOG); return new CallIntentBuilder(number, CallInitiationType.Type.CALL_LOG) .setPhoneAccountHandle(accountHandle) .setIsVideoCall(true) @@ -80,6 +83,8 @@ public abstract class IntentProvider { return new IntentProvider() { @Override public Intent getIntent(Context context) { + Logger.get(context) + .logImpression(DialerImpression.Type.LIGHTBRINGER_VIDEO_REQUESTED_FROM_CALL_LOG); return LightbringerComponent.get(context).getLightbringer().getIntent(context, number); } }; @@ -112,11 +117,12 @@ public abstract class IntentProvider { * @return The call details intent provider. */ public static IntentProvider getCallDetailIntentProvider( - CallDetailsEntries callDetailsEntries, CallComposerContact contact) { + CallDetailsEntries callDetailsEntries, DialerContact contact, boolean canReportCallerId) { return new IntentProvider() { @Override public Intent getIntent(Context context) { - return CallDetailsActivity.newInstance(context, callDetailsEntries, contact); + return CallDetailsActivity.newInstance( + context, callDetailsEntries, contact, canReportCallerId); } }; } diff --git a/java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java b/java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java new file mode 100644 index 000000000..428c71677 --- /dev/null +++ b/java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java @@ -0,0 +1,156 @@ +/* + * 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.calllog; + +import android.annotation.TargetApi; +import android.app.Notification; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.os.Build.VERSION_CODES; +import android.support.annotation.NonNull; +import android.support.v4.os.BuildCompat; +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 com.android.dialer.app.R; +import com.android.dialer.calllogutils.PhoneAccountUtils; +import com.android.dialer.common.Assert; +import com.android.dialer.common.LogUtil; +import com.android.dialer.notification.NotificationChannelManager; + +/** Shows a notification in the status bar for legacy vociemail. */ +@TargetApi(VERSION_CODES.O) +public final class LegacyVoicemailNotifier { + private static final String NOTIFICATION_TAG = "LegacyVoicemail"; + private static final int NOTIFICATION_ID = 1; + + /** + * 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. + */ + public static void showNotification( + @NonNull Context context, + @NonNull PhoneAccountHandle handle, + int count, + String voicemailNumber, + PendingIntent callVoicemailIntent, + PendingIntent voicemailSettingsIntent, + boolean isRefresh) { + LogUtil.enterBlock("LegacyVoicemailNotifier.showNotification"); + Assert.isNotNull(handle); + Assert.checkArgument(BuildCompat.isAtLeastO()); + + TelephonyManager pinnedTelephonyManager = + context.getSystemService(TelephonyManager.class).createForPhoneAccountHandle(handle); + if (pinnedTelephonyManager == null) { + LogUtil.e("LegacyVoicemailNotifier.showNotification", "invalid PhoneAccountHandle"); + return; + } + + Notification notification = + createNotification( + context, + pinnedTelephonyManager, + handle, + count, + voicemailNumber, + callVoicemailIntent, + voicemailSettingsIntent, + isRefresh); + context + .getSystemService(NotificationManager.class) + .notify(NOTIFICATION_TAG, NOTIFICATION_ID, notification); + } + + @NonNull + private static Notification createNotification( + @NonNull Context context, + @NonNull TelephonyManager pinnedTelephonyManager, + @NonNull PhoneAccountHandle handle, + int count, + String voicemailNumber, + PendingIntent callVoicemailIntent, + PendingIntent voicemailSettingsIntent, + boolean isRefresh) { + String notificationTitle = + context + .getResources() + .getQuantityString(R.plurals.notification_voicemail_title, count, count); + boolean isOngoing = + pinnedTelephonyManager + .getCarrierConfig() + .getBoolean(CarrierConfigManager.KEY_VOICEMAIL_NOTIFICATION_PERSISTENT_BOOL); + + String contentText; + PendingIntent contentIntent; + if (!TextUtils.isEmpty(voicemailNumber) && callVoicemailIntent != null) { + contentText = getNotificationText(context, handle, voicemailNumber); + contentIntent = callVoicemailIntent; + } else { + contentText = context.getString(R.string.notification_voicemail_no_vm_number); + contentIntent = voicemailSettingsIntent; + } + + Notification.Builder builder = + new Notification.Builder(context) + .setSmallIcon(android.R.drawable.stat_notify_voicemail) + .setColor(context.getColor(R.color.dialer_theme_color)) + .setWhen(System.currentTimeMillis()) + .setContentTitle(notificationTitle) + .setContentText(contentText) + .setContentIntent(contentIntent) + .setSound(pinnedTelephonyManager.getVoicemailRingtoneUri(handle)) + .setOngoing(isOngoing) + .setOnlyAlertOnce(isRefresh) + .setChannelId(NotificationChannelManager.getVoicemailChannelId(context, handle)); + + if (pinnedTelephonyManager.isVoicemailVibrationEnabled(handle)) { + builder.setDefaults(Notification.DEFAULT_VIBRATE); + } + + return builder.build(); + } + + @NonNull + private static String getNotificationText( + @NonNull Context context, PhoneAccountHandle handle, String voicemailNumber) { + if (PhoneAccountUtils.getSubscriptionPhoneAccounts(context).size() > 1) { + TelecomManager telecomManager = context.getSystemService(TelecomManager.class); + PhoneAccount phoneAccount = telecomManager.getPhoneAccount(handle); + return phoneAccount.getShortDescription().toString(); + } else { + return String.format( + context.getString(R.string.notification_voicemail_text_format), + PhoneNumberUtils.formatNumber(voicemailNumber)); + } + } + + public static void cancelNotification(@NonNull Context context) { + LogUtil.enterBlock("LegacyVoicemailNotifier.cancelNotification"); + Assert.checkArgument(BuildCompat.isAtLeastO()); + NotificationManager notificationManager = context.getSystemService(NotificationManager.class); + notificationManager.cancel(NOTIFICATION_TAG, NOTIFICATION_ID); + } + + private LegacyVoicemailNotifier() {} +} diff --git a/java/com/android/dialer/app/calllog/MissedCallNotifier.java b/java/com/android/dialer/app/calllog/MissedCallNotifier.java index dd13298bc..e0e3fdf3f 100644 --- a/java/com/android/dialer/app/calllog/MissedCallNotifier.java +++ b/java/com/android/dialer/app/calllog/MissedCallNotifier.java @@ -30,11 +30,13 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.VisibleForTesting; import android.support.annotation.WorkerThread; +import android.support.v4.os.BuildCompat; import android.support.v4.os.UserManagerCompat; import android.support.v4.util.Pair; import android.text.BidiFormatter; import android.text.TextDirectionHeuristics; import android.text.TextUtils; +import android.util.ArraySet; import com.android.contacts.common.ContactsUtils; import com.android.contacts.common.compat.PhoneNumberUtilsCompat; import com.android.dialer.app.DialtactsActivity; @@ -46,23 +48,20 @@ import com.android.dialer.callintent.CallInitiationType; import com.android.dialer.callintent.CallIntentBuilder; import com.android.dialer.common.LogUtil; import com.android.dialer.common.concurrent.DialerExecutor.Worker; -import com.android.dialer.notification.NotificationChannelManager; -import com.android.dialer.notification.NotificationChannelManager.Channel; +import com.android.dialer.notification.NotificationChannelId; import com.android.dialer.phonenumbercache.ContactInfo; import com.android.dialer.phonenumberutil.PhoneNumberHelper; import com.android.dialer.util.DialerUtils; import com.android.dialer.util.IntentUtil; -import java.util.HashSet; import java.util.List; import java.util.Set; /** Creates a notification for calls that the user missed (neither answered nor rejected). */ public class MissedCallNotifier implements Worker, Void> { - /** The tag used to identify notifications from this class. */ - static final String NOTIFICATION_TAG = "MissedCallNotifier"; - /** The identifier of the notification of new missed calls. */ - private static final int NOTIFICATION_ID = R.id.notification_missed_call; + static final String NOTIFICATION_TAG_PREFIX = "MissedCall_"; + static final String NOTIFICATION_GROUP = "MissedCall"; + private static final int NOTIFICATION_ID = 1; private final Context context; private final CallLogNotificationsQueryHelper callLogNotificationsQueryHelper; @@ -104,7 +103,8 @@ public class MissedCallNotifier implements Worker, Void> { if ((newCalls != null && newCalls.isEmpty()) || count == 0) { // No calls to notify about: clear the notification. - CallLogNotificationsQueryHelper.removeMissedCallNotifications(context, null); + CallLogNotificationsQueryHelper.markAllMissedCallsInCallLogAsRead(context); + cancelAllMissedCallNotifications(context); return; } @@ -146,7 +146,7 @@ public class MissedCallNotifier implements Worker, Void> { null, System.currentTimeMillis()); - //TODO: look up caller ID that is not in contacts. + // TODO: look up caller ID that is not in contacts. ContactInfo contactInfo = callLogNotificationsQueryHelper.getContactInfo( call.number, call.numberPresentation, call.countryIso); @@ -181,36 +181,39 @@ public class MissedCallNotifier implements Worker, Void> { publicSummaryBuilder .setContentTitle(context.getText(titleResId)) .setContentIntent(createCallLogPendingIntent()) - .setDeleteIntent(createClearMissedCallsPendingIntent(null)); + .setDeleteIntent( + CallLogNotificationsService.createCancelAllMissedCallsPendingIntent(context)); // Create the notification summary suitable for display when sensitive information is showing. groupSummary .setContentTitle(context.getText(titleResId)) .setContentText(expandedText) .setContentIntent(createCallLogPendingIntent()) - .setDeleteIntent(createClearMissedCallsPendingIntent(null)) + .setDeleteIntent( + CallLogNotificationsService.createCancelAllMissedCallsPendingIntent(context)) .setGroupSummary(useCallList) .setOnlyAlertOnce(useCallList) .setPublicVersion(publicSummaryBuilder.build()); - - NotificationChannelManager.applyChannel(groupSummary, context, Channel.MISSED_CALL, null); + if (BuildCompat.isAtLeastO()) { + groupSummary.setChannelId(NotificationChannelId.MISSED_CALL); + } Notification notification = groupSummary.build(); configureLedOnNotification(notification); LogUtil.i("MissedCallNotifier.updateMissedCallNotification", "adding missed call notification"); - getNotificationMgr().notify(NOTIFICATION_TAG, NOTIFICATION_ID, notification); + getNotificationMgr().notify(getNotificationTagForGroupSummary(), NOTIFICATION_ID, notification); if (useCallList) { // Do not repost active notifications to prevent erasing post call notes. NotificationManager manager = getNotificationMgr(); - Set activeTags = new HashSet<>(); + Set activeTags = new ArraySet<>(); for (StatusBarNotification activeNotification : manager.getActiveNotifications()) { activeTags.add(activeNotification.getTag()); } for (NewCall call : newCalls) { - String callTag = call.callsUri.toString(); + String callTag = getNotificationTagForCall(call); if (!activeTags.contains(callTag)) { manager.notify(callTag, NOTIFICATION_ID, getNotificationForCall(call, null)); } @@ -218,6 +221,59 @@ public class MissedCallNotifier implements Worker, Void> { } } + public static void cancelAllMissedCallNotifications(@NonNull Context context) { + NotificationManager notificationManager = context.getSystemService(NotificationManager.class); + for (StatusBarNotification notification : notificationManager.getActiveNotifications()) { + String tag = notification.getTag(); + if (tag != null && tag.startsWith(NOTIFICATION_TAG_PREFIX)) { + notificationManager.cancel(tag, notification.getId()); + } + } + } + + public static void cancelSingleMissedCallNotification( + @NonNull Context context, @Nullable Uri callUri) { + if (callUri == null) { + LogUtil.e( + "MissedCallNotifier.cancelSingleMissedCallNotification", + "unable to cancel notification, uri is null"); + return; + } + NotificationManager notificationManager = context.getSystemService(NotificationManager.class); + String callTag = getNotificationTagForCallUri(callUri); + String summaryTag = getNotificationTagForGroupSummary(); + int notificationCount = 0; + + for (StatusBarNotification notification : notificationManager.getActiveNotifications()) { + String currentTag = notification.getTag(); + if (currentTag == null) { + continue; + } + if (currentTag.equals(callTag)) { + notificationManager.cancel(notification.getTag(), notification.getId()); + } else if (currentTag.startsWith(NOTIFICATION_TAG_PREFIX) && !currentTag.equals(summaryTag)) { + notificationCount++; + } + } + + if (notificationCount == 0) { + // There are no more missed call notifications. Remove the summary notification too. + notificationManager.cancel(summaryTag, NOTIFICATION_ID); + } + } + + private static String getNotificationTagForGroupSummary() { + return NOTIFICATION_TAG_PREFIX + "GroupSummary"; + } + + private static String getNotificationTagForCall(@NonNull NewCall call) { + return getNotificationTagForCallUri(call.callsUri); + } + + private static String getNotificationTagForCallUri(@NonNull Uri callUri) { + return NOTIFICATION_TAG_PREFIX + callUri; + } + public void insertPostCallNotification(@NonNull String number, @NonNull String note) { List newCalls = callLogNotificationsQueryHelper.getNewMissedCalls(); if (newCalls != null && !newCalls.isEmpty()) { @@ -226,7 +282,9 @@ public class MissedCallNotifier implements Worker, Void> { // Update the first notification that matches our post call note sender. getNotificationMgr() .notify( - call.callsUri.toString(), NOTIFICATION_ID, getNotificationForCall(call, note)); + getNotificationTagForCall(call), + NOTIFICATION_ID, + getNotificationForCall(call, note)); break; } } @@ -308,7 +366,7 @@ public class MissedCallNotifier implements Worker, Void> { private Notification.Builder createNotificationBuilder() { return new Notification.Builder(context) - .setGroup(NOTIFICATION_TAG) + .setGroup(NOTIFICATION_GROUP) .setSmallIcon(android.R.drawable.stat_notify_missed_call) .setColor(context.getResources().getColor(R.color.dialer_theme_color, null)) .setAutoCancel(true) @@ -321,10 +379,14 @@ public class MissedCallNotifier implements Worker, Void> { Builder builder = createNotificationBuilder() .setWhen(call.dateMs) - .setDeleteIntent(createClearMissedCallsPendingIntent(call.callsUri)) + .setDeleteIntent( + CallLogNotificationsService.createCancelSingleMissedCallPendingIntent( + context, call.callsUri)) .setContentIntent(createCallLogPendingIntent(call.callsUri)); + if (BuildCompat.isAtLeastO()) { + builder.setChannelId(NotificationChannelId.MISSED_CALL); + } - NotificationChannelManager.applyChannel(builder, context, Channel.MISSED_CALL, null); return builder; } @@ -332,7 +394,8 @@ public class MissedCallNotifier implements Worker, Void> { @WorkerThread public void callBackFromMissedCall(String number, Uri callUri) { closeSystemDialogs(context); - CallLogNotificationsQueryHelper.removeMissedCallNotifications(context, callUri); + CallLogNotificationsQueryHelper.markSingleMissedCallInCallLogAsRead(context, callUri); + cancelSingleMissedCallNotification(context, callUri); DialerUtils.startActivityWithErrorToast( context, new CallIntentBuilder(number, CallInitiationType.Type.MISSED_CALL_NOTIFICATION) @@ -343,7 +406,8 @@ public class MissedCallNotifier implements Worker, Void> { /** Trigger an intent to send an sms from a missed call number. */ public void sendSmsFromMissedCall(String number, Uri callUri) { closeSystemDialogs(context); - CallLogNotificationsQueryHelper.removeMissedCallNotifications(context, callUri); + CallLogNotificationsQueryHelper.markSingleMissedCallInCallLogAsRead(context, callUri); + cancelSingleMissedCallNotification(context, callUri); DialerUtils.startActivityWithErrorToast( context, IntentUtil.getSendSmsIntent(number).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); } @@ -371,14 +435,6 @@ public class MissedCallNotifier implements Worker, Void> { return PendingIntent.getActivity(context, 0, contentIntent, PendingIntent.FLAG_UPDATE_CURRENT); } - /** Creates a pending intent that marks all new missed calls as old. */ - private PendingIntent createClearMissedCallsPendingIntent(@Nullable Uri callUri) { - Intent intent = new Intent(context, CallLogNotificationsService.class); - intent.setAction(CallLogNotificationsService.ACTION_MARK_NEW_MISSED_CALLS_AS_OLD); - intent.setData(callUri); - return PendingIntent.getService(context, 0, intent, 0); - } - private PendingIntent createCallBackPendingIntent(String number, @NonNull Uri callUri) { Intent intent = new Intent(context, CallLogNotificationsService.class); intent.setAction(CallLogNotificationsService.ACTION_CALL_BACK_FROM_MISSED_CALL_NOTIFICATION); diff --git a/java/com/android/dialer/app/calllog/PhoneAccountHandles.java b/java/com/android/dialer/app/calllog/PhoneAccountHandles.java deleted file mode 100644 index acffffb1d..000000000 --- a/java/com/android/dialer/app/calllog/PhoneAccountHandles.java +++ /dev/null @@ -1,62 +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. - */ -package com.android.dialer.app.calllog; - -import android.content.ComponentName; -import android.content.Context; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.telecom.PhoneAccount; -import android.telecom.PhoneAccountHandle; -import com.android.dialer.app.calllog.CallLogNotificationsQueryHelper.NewCall; -import com.android.dialer.common.LogUtil; -import com.android.dialer.telecom.TelecomUtil; -import java.util.List; - -/** Methods to help extract {@link PhoneAccount} information from database and Telecomm sources. */ -class PhoneAccountHandles { - - @Nullable - public static PhoneAccountHandle getAccount(@NonNull Context context, @Nullable NewCall call) { - PhoneAccountHandle handle; - if (call == null || call.accountComponentName == null || call.accountId == null) { - LogUtil.v( - "PhoneAccountUtils.getAccount", - "accountComponentName == null || callToNotify.accountId == null"); - handle = TelecomUtil.getDefaultOutgoingPhoneAccount(context, PhoneAccount.SCHEME_TEL); - if (handle == null) { - List callCapablePhoneAccounts = - TelecomUtil.getCallCapablePhoneAccounts(context); - if (!callCapablePhoneAccounts.isEmpty()) { - return callCapablePhoneAccounts.get(0); - } - return null; - } - } else { - handle = - new PhoneAccountHandle( - ComponentName.unflattenFromString(call.accountComponentName), call.accountId); - } - if (handle.getComponentName() != null) { - LogUtil.v( - "PhoneAccountUtils.getAccount", - "PhoneAccountHandle.ComponentInfo:" + handle.getComponentName()); - } else { - LogUtil.i("PhoneAccountUtils.getAccount", "PhoneAccountHandle.ComponentInfo: null"); - } - return handle; - } -} diff --git a/java/com/android/dialer/app/calllog/VisualVoicemailNotifier.java b/java/com/android/dialer/app/calllog/VisualVoicemailNotifier.java new file mode 100644 index 000000000..99fe466d8 --- /dev/null +++ b/java/com/android/dialer/app/calllog/VisualVoicemailNotifier.java @@ -0,0 +1,291 @@ +/* + * 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.calllog; + +import android.app.Notification; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.net.Uri; +import android.os.Build.VERSION; +import android.os.Build.VERSION_CODES; +import android.service.notification.StatusBarNotification; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v4.os.BuildCompat; +import android.telecom.PhoneAccount; +import android.telecom.PhoneAccountHandle; +import android.telephony.TelephonyManager; +import android.text.TextUtils; +import com.android.contacts.common.util.ContactDisplayUtils; +import com.android.dialer.app.DialtactsActivity; +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.common.LogUtil; +import com.android.dialer.logging.DialerImpression; +import com.android.dialer.logging.Logger; +import com.android.dialer.notification.NotificationChannelManager; +import com.android.dialer.phonenumbercache.ContactInfo; +import com.android.dialer.telecom.TelecomUtil; +import java.util.List; +import java.util.Map; + +/** Shows a notification in the status bar for visual voicemail. */ +final class VisualVoicemailNotifier { + private static final String NOTIFICATION_TAG_PREFIX = "VisualVoicemail_"; + private static final String NOTIFICATION_GROUP = "VisualVoicemail"; + private static final int NOTIFICATION_ID = 1; + + public static void showNotifications( + @NonNull Context context, + @NonNull List newCalls, + @NonNull Map contactInfos, + @Nullable String callers) { + LogUtil.enterBlock("VisualVoicemailNotifier.showNotifications"); + PendingIntent deleteIntent = + CallLogNotificationsService.createMarkAllNewVoicemailsAsOldIntent(context); + String contentTitle = + context + .getResources() + .getQuantityString( + R.plurals.notification_voicemail_title, newCalls.size(), newCalls.size()); + Notification.Builder groupSummary = + createNotificationBuilder(context) + .setContentTitle(contentTitle) + .setContentText(callers) + .setDeleteIntent(deleteIntent) + .setGroupSummary(true) + .setContentIntent(newVoicemailIntent(context, null)); + + if (BuildCompat.isAtLeastO()) { + groupSummary.setGroupAlertBehavior(Notification.GROUP_ALERT_CHILDREN); + PhoneAccountHandle handle = getAccountForCall(context, newCalls.get(0)); + groupSummary.setChannelId(NotificationChannelManager.getVoicemailChannelId(context, handle)); + } + + NotificationManager notificationManager = context.getSystemService(NotificationManager.class); + notificationManager.notify( + getNotificationTagForGroupSummary(), NOTIFICATION_ID, groupSummary.build()); + + for (NewCall voicemail : newCalls) { + notificationManager.notify( + getNotificationTagForVoicemail(voicemail), + NOTIFICATION_ID, + createNotificationForVoicemail(context, voicemail, contactInfos)); + } + } + + public static void cancelAllVoicemailNotifications(@NonNull Context context) { + LogUtil.enterBlock("VisualVoicemailNotifier.cancelAllVoicemailNotifications"); + NotificationManager notificationManager = context.getSystemService(NotificationManager.class); + for (StatusBarNotification notification : notificationManager.getActiveNotifications()) { + String tag = notification.getTag(); + if (tag != null && tag.startsWith(NOTIFICATION_TAG_PREFIX)) { + notificationManager.cancel(tag, notification.getId()); + } + } + } + + public static void cancelSingleVoicemailNotification( + @NonNull Context context, @Nullable Uri voicemailUri) { + LogUtil.enterBlock("VisualVoicemailNotifier.cancelSingleVoicemailNotification"); + if (voicemailUri == null) { + LogUtil.e("VisualVoicemailNotifier.cancelSingleVoicemailNotification", "uri is null"); + return; + } + NotificationManager notificationManager = context.getSystemService(NotificationManager.class); + String voicemailTag = getNotificationTagForUri(voicemailUri); + String summaryTag = getNotificationTagForGroupSummary(); + int notificationCount = 0; + + for (StatusBarNotification notification : notificationManager.getActiveNotifications()) { + String currentTag = notification.getTag(); + if (currentTag == null) { + continue; + } + if (currentTag.equals(voicemailTag)) { + notificationManager.cancel(notification.getTag(), notification.getId()); + } else if (currentTag.startsWith(NOTIFICATION_TAG_PREFIX) && !currentTag.equals(summaryTag)) { + notificationCount++; + } + } + + if (notificationCount == 0) { + // There are no more visual voicemail notifications. Remove the summary notification too. + notificationManager.cancel(summaryTag, NOTIFICATION_ID); + } + } + + private static String getNotificationTagForVoicemail(@NonNull NewCall voicemail) { + return getNotificationTagForUri(voicemail.voicemailUri); + } + + private static String getNotificationTagForUri(@NonNull Uri voicemailUri) { + return NOTIFICATION_TAG_PREFIX + voicemailUri; + } + + private static String getNotificationTagForGroupSummary() { + return NOTIFICATION_TAG_PREFIX + "GroupSummary"; + } + + private static Notification.Builder createNotificationBuilder(@NonNull Context context) { + return new Notification.Builder(context) + .setSmallIcon(android.R.drawable.stat_notify_voicemail) + .setColor(context.getColor(R.color.dialer_theme_color)) + .setGroup(NOTIFICATION_GROUP) + .setOnlyAlertOnce(true) + .setAutoCancel(true); + } + + private static Notification createNotificationForVoicemail( + @NonNull Context context, + @NonNull NewCall voicemail, + @NonNull Map contactInfos) { + PhoneAccountHandle handle = getAccountForCall(context, voicemail); + ContactInfo contactInfo = contactInfos.get(voicemail.number); + + Notification.Builder builder = + createNotificationBuilder(context) + .setContentTitle( + context + .getResources() + .getQuantityString(R.plurals.notification_voicemail_title, 1, 1)) + .setContentText( + ContactDisplayUtils.getTtsSpannedPhoneNumber( + context.getResources(), + R.string.notification_new_voicemail_ticker, + contactInfo.name)) + .setWhen(voicemail.dateMs) + .setSound(getVoicemailRingtoneUri(context, handle)) + .setDefaults(getNotificationDefaultFlags(context, handle)); + + if (voicemail.voicemailUri != null) { + builder.setDeleteIntent( + CallLogNotificationsService.createMarkSingleNewVoicemailAsOldIntent( + context, voicemail.voicemailUri)); + } + + if (BuildCompat.isAtLeastO()) { + builder.setChannelId(NotificationChannelManager.getVoicemailChannelId(context, handle)); + } + + ContactPhotoLoader loader = new ContactPhotoLoader(context, contactInfo); + Bitmap photoIcon = loader.loadPhotoIcon(); + if (photoIcon != null) { + builder.setLargeIcon(photoIcon); + } + if (!TextUtils.isEmpty(voicemail.transcription)) { + Logger.get(context) + .logImpression(DialerImpression.Type.VVM_NOTIFICATION_CREATED_WITH_TRANSCRIPTION); + builder.setStyle(new Notification.BigTextStyle().bigText(voicemail.transcription)); + } + builder.setContentIntent(newVoicemailIntent(context, voicemail)); + Logger.get(context).logImpression(DialerImpression.Type.VVM_NOTIFICATION_CREATED); + return builder.build(); + } + + @Nullable + private static Uri getVoicemailRingtoneUri( + @NonNull Context context, @Nullable PhoneAccountHandle handle) { + if (VERSION.SDK_INT < VERSION_CODES.N) { + return null; + } + if (handle == null) { + LogUtil.i("VisualVoicemailNotifier.getVoicemailRingtoneUri", "null handle, getting fallback"); + handle = getFallbackAccount(context); + if (handle == null) { + LogUtil.i( + "VisualVoicemailNotifier.getVoicemailRingtoneUri", + "no fallback handle, using null (default) ringtone"); + return null; + } + } + return context.getSystemService(TelephonyManager.class).getVoicemailRingtoneUri(handle); + } + + private static int getNotificationDefaultFlags( + @NonNull Context context, @Nullable PhoneAccountHandle handle) { + if (VERSION.SDK_INT < VERSION_CODES.N) { + return Notification.DEFAULT_ALL; + } + if (handle == null) { + LogUtil.i( + "VisualVoicemailNotifier.getNotificationDefaultFlags", "null handle, getting fallback"); + handle = getFallbackAccount(context); + if (handle == null) { + LogUtil.i( + "VisualVoicemailNotifier.getNotificationDefaultFlags", + "no fallback handle, using default vibration"); + return Notification.DEFAULT_ALL; + } + } + if (context.getSystemService(TelephonyManager.class).isVoicemailVibrationEnabled(handle)) { + return Notification.DEFAULT_VIBRATE; + } + return 0; + } + + private static PendingIntent newVoicemailIntent( + @NonNull Context context, @Nullable NewCall voicemail) { + Intent intent = + DialtactsActivity.getShowTabIntent(context, DialtactsPagerAdapter.TAB_INDEX_VOICEMAIL); + // TODO (b/35486204): scroll to this voicemail + if (voicemail != null) { + intent.setData(voicemail.voicemailUri); + } + intent.putExtra(DialtactsActivity.EXTRA_CLEAR_NEW_VOICEMAILS, true); + return PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); + } + + /** + * Gets a phone account for the given call entry. This could be null if SIM associated with the + * entry is no longer in the device or for other reasons (for example, modem reboot). + */ + @Nullable + public static PhoneAccountHandle getAccountForCall( + @NonNull Context context, @Nullable NewCall call) { + if (call == null || call.accountComponentName == null || call.accountId == null) { + return null; + } + return new PhoneAccountHandle( + ComponentName.unflattenFromString(call.accountComponentName), call.accountId); + } + + /** + * Gets any available phone account that can be used to get sound settings for voicemail. This is + * only called if the phone account for the voicemail entry can't be found. + */ + @Nullable + public static PhoneAccountHandle getFallbackAccount(@NonNull Context context) { + PhoneAccountHandle handle = + TelecomUtil.getDefaultOutgoingPhoneAccount(context, PhoneAccount.SCHEME_TEL); + if (handle == null) { + List handles = TelecomUtil.getCallCapablePhoneAccounts(context); + if (!handles.isEmpty()) { + handle = handles.get(0); + } + } + return handle; + } + + private VisualVoicemailNotifier() {} +} diff --git a/java/com/android/dialer/app/calllog/VisualVoicemailUpdateTask.java b/java/com/android/dialer/app/calllog/VisualVoicemailUpdateTask.java new file mode 100644 index 000000000..d6601be36 --- /dev/null +++ b/java/com/android/dialer/app/calllog/VisualVoicemailUpdateTask.java @@ -0,0 +1,168 @@ +/* + * Copyright (C) 2011 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.calllog; + +import android.content.Context; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.annotation.WorkerThread; +import android.text.TextUtils; +import android.util.ArrayMap; +import com.android.dialer.app.R; +import com.android.dialer.app.calllog.CallLogNotificationsQueryHelper.NewCall; +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.common.concurrent.DialerExecutor.Worker; +import com.android.dialer.common.concurrent.DialerExecutors; +import com.android.dialer.phonenumbercache.ContactInfo; +import com.android.dialer.telecom.TelecomUtil; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** Updates voicemail notifications in the background. */ +class VisualVoicemailUpdateTask implements Worker { + @Nullable + @Override + public Void doInBackground(@NonNull Input input) throws Throwable { + updateNotification(input.context, input.queryHelper, input.queryHandler); + return null; + } + + /** + * Updates the notification and notifies of the call with the given URI. + * + *

Clears the notification if there are no new voicemails, and notifies if the given URI + * corresponds to a new voicemail. + */ + @WorkerThread + private static void updateNotification( + Context context, + CallLogNotificationsQueryHelper queryHelper, + FilteredNumberAsyncQueryHandler queryHandler) { + Assert.isWorkerThread(); + + List newCalls = queryHelper.getNewVoicemails(); + if (newCalls == null) { + return; + } + newCalls = filterBlockedNumbers(context, queryHandler, newCalls); + if (newCalls.isEmpty()) { + return; + } + + // This represents a list of names to include in the notification. + String callers = null; + + // Maps each number into a name: if a number is in the map, it has already left a more + // recent voicemail. + Map contactInfos = new ArrayMap<>(); + for (NewCall newCall : newCalls) { + if (!contactInfos.containsKey(newCall.number)) { + ContactInfo contactInfo = + queryHelper.getContactInfo( + newCall.number, newCall.numberPresentation, newCall.countryIso); + contactInfos.put(newCall.number, contactInfo); + + // This is a new caller. Add it to the back of the list of callers. + if (TextUtils.isEmpty(callers)) { + callers = contactInfo.name; + } else { + callers = + context.getString( + R.string.notification_voicemail_callers_list, callers, contactInfo.name); + } + } + } + VisualVoicemailNotifier.showNotifications(context, newCalls, contactInfos, callers); + } + + @WorkerThread + private static List filterBlockedNumbers( + Context context, FilteredNumberAsyncQueryHandler queryHandler, List newCalls) { + Assert.isWorkerThread(); + if (FilteredNumbersUtil.hasRecentEmergencyCall(context)) { + LogUtil.i( + "VisualVoicemailUpdateTask.filterBlockedNumbers", + "not filtering due to recent emergency call"); + return newCalls; + } + + List result = new ArrayList<>(); + for (NewCall newCall : newCalls) { + if (queryHandler.getBlockedIdSynchronous(newCall.number, newCall.countryIso) != null) { + LogUtil.i( + "VisualVoicemailUpdateTask.filterBlockedNumbers", + "found voicemail from blocked number, deleting"); + if (newCall.voicemailUri != null) { + // Delete the voicemail. + CallLogAsyncTaskUtil.deleteVoicemailSynchronous(context, newCall.voicemailUri); + } + } else { + result.add(newCall); + } + } + return result; + } + + /** Updates the voicemail notifications displayed. */ + static void scheduleTask(@NonNull Context context, @NonNull Runnable callback) { + Assert.isNotNull(context); + Assert.isNotNull(callback); + if (!TelecomUtil.isDefaultDialer(context)) { + LogUtil.i("VisualVoicemailUpdateTask.scheduleTask", "not default dialer, not running"); + callback.run(); + return; + } + + Input input = + new Input( + context, + CallLogNotificationsQueryHelper.getInstance(context), + new FilteredNumberAsyncQueryHandler(context)); + DialerExecutors.createNonUiTaskBuilder(new VisualVoicemailUpdateTask()) + .onSuccess( + output -> { + LogUtil.i("VisualVoicemailUpdateTask.scheduleTask", "update successful"); + callback.run(); + }) + .onFailure( + throwable -> { + LogUtil.i("VisualVoicemailUpdateTask.scheduleTask", "update failed: " + throwable); + callback.run(); + }) + .build() + .executeParallel(input); + } + + static class Input { + @NonNull final Context context; + @NonNull final CallLogNotificationsQueryHelper queryHelper; + @NonNull final FilteredNumberAsyncQueryHandler queryHandler; + + Input( + Context context, + CallLogNotificationsQueryHelper queryHelper, + FilteredNumberAsyncQueryHandler queryHandler) { + this.context = context; + this.queryHelper = queryHelper; + this.queryHandler = queryHandler; + } + } +} diff --git a/java/com/android/dialer/app/calllog/VoicemailQueryHandler.java b/java/com/android/dialer/app/calllog/VoicemailQueryHandler.java index 777f4c79f..2fbebdd30 100644 --- a/java/com/android/dialer/app/calllog/VoicemailQueryHandler.java +++ b/java/com/android/dialer/app/calllog/VoicemailQueryHandler.java @@ -15,7 +15,6 @@ */ package com.android.dialer.app.calllog; -import android.app.NotificationManager; import android.content.AsyncQueryHandler; import android.content.ContentResolver; import android.content.ContentValues; @@ -23,30 +22,49 @@ import android.content.Context; import android.net.Uri; import android.provider.CallLog.Calls; import android.support.annotation.MainThread; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import com.android.dialer.app.R; +import android.support.annotation.WorkerThread; import com.android.dialer.common.Assert; -import com.android.dialer.notification.GroupedNotificationUtil; +import com.android.dialer.common.LogUtil; +import com.android.dialer.common.concurrent.ThreadUtil; /** Handles asynchronous queries to the call log for voicemail. */ public class VoicemailQueryHandler extends AsyncQueryHandler { - private static final String TAG = "VoicemailQueryHandler"; - /** The token for the query to mark all new voicemails as old. */ private static final int UPDATE_MARK_VOICEMAILS_AS_OLD_TOKEN = 50; - private Context mContext; - @MainThread - public VoicemailQueryHandler(Context context, ContentResolver contentResolver) { + private VoicemailQueryHandler(ContentResolver contentResolver) { super(contentResolver); Assert.isMainThread(); - mContext = context; + } + + @WorkerThread + public static void markAllNewVoicemailsAsRead(final @NonNull Context context) { + ThreadUtil.postOnUiThread( + () -> { + new VoicemailQueryHandler(context.getContentResolver()).markNewVoicemailsAsOld(null); + }); + } + + @WorkerThread + public static void markSingleNewVoicemailAsRead( + final @NonNull Context context, final Uri voicemailUri) { + if (voicemailUri == null) { + LogUtil.e("VoicemailQueryHandler.markSingleNewVoicemailAsRead", "voicemail URI is null"); + return; + } + ThreadUtil.postOnUiThread( + () -> { + new VoicemailQueryHandler(context.getContentResolver()) + .markNewVoicemailsAsOld(voicemailUri); + }); } /** Updates all new voicemails to mark them as old. */ - public void markNewVoicemailsAsOld(@Nullable Uri voicemailUri) { + private void markNewVoicemailsAsOld(@Nullable Uri voicemailUri) { // Mark all "new" voicemails as not new anymore. StringBuilder where = new StringBuilder(); where.append(Calls.NEW); @@ -70,11 +88,5 @@ public class VoicemailQueryHandler extends AsyncQueryHandler { voicemailUri == null ? new String[] {Integer.toString(Calls.VOICEMAIL_TYPE)} : new String[] {Integer.toString(Calls.VOICEMAIL_TYPE), voicemailUri.toString()}); - - GroupedNotificationUtil.removeNotification( - mContext.getSystemService(NotificationManager.class), - voicemailUri != null ? voicemailUri.toString() : null, - R.id.notification_visual_voicemail, - DefaultVoicemailNotifier.VISUAL_VOICEMAIL_NOTIFICATION_TAG); } } diff --git a/java/com/android/dialer/app/calllog/calllogcache/CallLogCache.java b/java/com/android/dialer/app/calllog/calllogcache/CallLogCache.java index 7645a333e..6728dfb38 100644 --- a/java/com/android/dialer/app/calllog/calllogcache/CallLogCache.java +++ b/java/com/android/dialer/app/calllog/calllogcache/CallLogCache.java @@ -19,7 +19,6 @@ package com.android.dialer.app.calllog.calllogcache; import android.content.Context; import android.telecom.PhoneAccountHandle; import com.android.dialer.app.calllog.CallLogAdapter; -import com.android.dialer.compat.CompatUtils; import com.android.dialer.util.CallUtil; /** @@ -46,10 +45,7 @@ public abstract class CallLogCache { /** Return the most compatible version of the TelecomCallLogCache. */ public static CallLogCache getCallLogCache(Context context) { - if (CompatUtils.isClassAvailable("android.telecom.PhoneAccountHandle")) { - return new CallLogCacheLollipopMr1(context); - } - return new CallLogCacheLollipop(context); + return new CallLogCacheLollipopMr1(context); } public void reset() { diff --git a/java/com/android/dialer/app/calllog/calllogcache/CallLogCacheLollipop.java b/java/com/android/dialer/app/calllog/calllogcache/CallLogCacheLollipop.java deleted file mode 100644 index 78aaa4193..000000000 --- a/java/com/android/dialer/app/calllog/calllogcache/CallLogCacheLollipop.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2015 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.calllog.calllogcache; - -import android.content.Context; -import android.telecom.PhoneAccount; -import android.telecom.PhoneAccountHandle; -import android.telephony.PhoneNumberUtils; -import android.text.TextUtils; - -/** - * This is a compatibility class for the CallLogCache for versions of dialer before Lollipop Mr1 - * (the introduction of phone accounts). - * - *

This class should not be initialized directly and instead be acquired from {@link - * CallLogCache#getCallLogCache}. - */ -class CallLogCacheLollipop extends CallLogCache { - - private String mVoicemailNumber; - - /* package */ CallLogCacheLollipop(Context context) { - super(context); - } - - @Override - public boolean isVoicemailNumber(PhoneAccountHandle accountHandle, CharSequence number) { - if (TextUtils.isEmpty(number)) { - return false; - } - - String numberString = number.toString(); - - if (!TextUtils.isEmpty(mVoicemailNumber)) { - return PhoneNumberUtils.compare(numberString, mVoicemailNumber); - } - - if (PhoneNumberUtils.isVoiceMailNumber(numberString)) { - mVoicemailNumber = numberString; - return true; - } - - return false; - } - - @Override - public String getAccountLabel(PhoneAccountHandle accountHandle) { - return null; - } - - @Override - public int getAccountColor(PhoneAccountHandle accountHandle) { - return PhoneAccount.NO_HIGHLIGHT_COLOR; - } - - @Override - public boolean doesAccountSupportCallSubject(PhoneAccountHandle accountHandle) { - return false; - } -} diff --git a/java/com/android/dialer/app/calllog/calllogcache/CallLogCacheLollipopMr1.java b/java/com/android/dialer/app/calllog/calllogcache/CallLogCacheLollipopMr1.java index 039998780..f85680649 100644 --- a/java/com/android/dialer/app/calllog/calllogcache/CallLogCacheLollipopMr1.java +++ b/java/com/android/dialer/app/calllog/calllogcache/CallLogCacheLollipopMr1.java @@ -17,15 +17,11 @@ package com.android.dialer.app.calllog.calllogcache; import android.content.Context; -import android.support.annotation.VisibleForTesting; import android.telecom.PhoneAccountHandle; -import android.text.TextUtils; import android.util.ArrayMap; -import android.util.Pair; import com.android.dialer.calllogutils.PhoneAccountUtils; -import com.android.dialer.phonenumberutil.PhoneNumberHelper; +import com.android.dialer.telecom.TelecomUtil; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; /** * This is the CallLogCache for versions of dialer Lollipop Mr1 and above with support for multi-SIM @@ -36,15 +32,6 @@ import java.util.concurrent.ConcurrentHashMap; */ class CallLogCacheLollipopMr1 extends CallLogCache { - /* - * Maps from a phone-account/number pair to a boolean because multiple numbers could return true - * for the voicemail number if those numbers are not pre-normalized. Access must be synchronzied - * as it's used in the background thread in CallLogAdapter. {@see CallLogAdapter#loadData} - */ - @VisibleForTesting - final Map, Boolean> mVoicemailQueryCache = - new ConcurrentHashMap<>(); - private final Map mPhoneAccountLabelCache = new ArrayMap<>(); private final Map mPhoneAccountColorCache = new ArrayMap<>(); private final Map mPhoneAccountCallWithNoteCache = new ArrayMap<>(); @@ -55,7 +42,6 @@ class CallLogCacheLollipopMr1 extends CallLogCache { @Override public void reset() { - mVoicemailQueryCache.clear(); mPhoneAccountLabelCache.clear(); mPhoneAccountColorCache.clear(); mPhoneAccountCallWithNoteCache.clear(); @@ -65,19 +51,7 @@ class CallLogCacheLollipopMr1 extends CallLogCache { @Override public boolean isVoicemailNumber(PhoneAccountHandle accountHandle, CharSequence number) { - if (TextUtils.isEmpty(number)) { - return false; - } - - Pair key = new Pair<>(accountHandle, number); - Boolean value = mVoicemailQueryCache.get(key); - if (value != null) { - return value; - } - boolean isVoicemail = - PhoneNumberHelper.isVoicemailNumber(mContext, accountHandle, number.toString()); - mVoicemailQueryCache.put(key, isVoicemail); - return isVoicemail; + return TelecomUtil.isVoicemailNumber(mContext, accountHandle, number.toString()); } @Override diff --git a/java/com/android/dialer/app/contactinfo/ContactInfoCache.java b/java/com/android/dialer/app/contactinfo/ContactInfoCache.java index e561b5607..82fc229af 100644 --- a/java/com/android/dialer/app/contactinfo/ContactInfoCache.java +++ b/java/com/android/dialer/app/contactinfo/ContactInfoCache.java @@ -24,6 +24,7 @@ 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.oem.CequintCallerIdManager; import com.android.dialer.phonenumbercache.ContactInfo; import com.android.dialer.phonenumbercache.ContactInfoHelper; import com.android.dialer.util.ExpirableCache; @@ -55,6 +56,7 @@ public class ContactInfoCache { private final OnContactInfoChangedListener mOnContactInfoChangedListener; private final BlockingQueue mUpdateRequests; private final Handler mHandler; + private CequintCallerIdManager mCequintCallerIdManager; private QueryThread mContactInfoQueryThread; private volatile boolean mRequestProcessingDisabled = false; @@ -95,6 +97,10 @@ public class ContactInfoCache { mHandler = new InnerHandler(new WeakReference<>(this)); } + public void setCequintCallerIdManager(CequintCallerIdManager cequintCallerIdManager) { + mCequintCallerIdManager = cequintCallerIdManager; + } + public ContactInfo getValue( String number, String countryIso, @@ -156,11 +162,11 @@ public class ContactInfoCache { ContactInfo info; if (request.isLocalRequest()) { info = mContactInfoHelper.lookupNumber(request.number, request.countryIso); - if (!info.contactExists) { + if (info != null && !info.contactExists) { // TODO: Maybe skip look up if it's already available in cached number lookup // service. long start = SystemClock.elapsedRealtime(); - mContactInfoHelper.updateFromCequintCallerId(info, request.number); + mContactInfoHelper.updateFromCequintCallerId(mCequintCallerIdManager, info, request.number); long time = SystemClock.elapsedRealtime() - start; LogUtil.d( "ContactInfoCache.queryContactInfo", "Cequint Caller Id look up takes %d ms", time); diff --git a/java/com/android/dialer/app/dialpad/DialpadFragment.java b/java/com/android/dialer/app/dialpad/DialpadFragment.java index e9d57b399..d33943773 100644 --- a/java/com/android/dialer/app/dialpad/DialpadFragment.java +++ b/java/com/android/dialer/app/dialpad/DialpadFragment.java @@ -29,6 +29,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; +import android.content.res.Resources; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; @@ -84,6 +85,9 @@ import com.android.dialer.common.LogUtil; import com.android.dialer.dialpadview.DialpadKeyButton; import com.android.dialer.dialpadview.DialpadView; import com.android.dialer.location.GeoUtil; +import com.android.dialer.logging.UiAction; +import com.android.dialer.oem.MotorolaUtils; +import com.android.dialer.performancereport.PerformanceReport; import com.android.dialer.proguard.UsedByReflection; import com.android.dialer.telecom.TelecomUtil; import com.android.dialer.util.CallUtil; @@ -626,6 +630,14 @@ public class DialpadFragment extends Fragment Trace.beginSection(TAG + " onResume"); super.onResume(); + Resources res = getResources(); + int iconId = R.drawable.quantum_ic_call_vd_theme_24; + if (MotorolaUtils.isWifiCallingAvailable(getContext())) { + iconId = R.drawable.ic_wifi_calling; + } + mFloatingActionButtonController.changeIcon( + res.getDrawable(iconId, null), res.getString(R.string.description_dial_button)); + final DialtactsActivity activity = (DialtactsActivity) getActivity(); mDialpadQueryListener = activity; @@ -1005,6 +1017,8 @@ public class DialpadFragment extends Fragment */ private void handleDialButtonPressed() { if (isDigitsEmpty()) { // No number entered. + // No real call made, so treat it as a click + PerformanceReport.recordClick(UiAction.Type.PRESS_CALL_BUTTON_WITHOUT_CALLING); handleDialButtonClickWithEmptyDigits(); } else { final String number = mDigits.getText().toString(); @@ -1015,6 +1029,7 @@ public class DialpadFragment extends Fragment if (number != null && !TextUtils.isEmpty(mProhibitedPhoneNumberRegexp) && number.matches(mProhibitedPhoneNumberRegexp)) { + PerformanceReport.recordClick(UiAction.Type.PRESS_CALL_BUTTON_WITHOUT_CALLING); LogUtil.i( "DialpadFragment.handleDialButtonPressed", "The phone number is prohibited explicitly by a rule."); @@ -1051,6 +1066,10 @@ public class DialpadFragment extends Fragment startActivity(newFlashIntent()); } else { if (!TextUtils.isEmpty(mLastNumberDialed)) { + // Dialpad will be filled with last called number, + // but we don't want to record it as user action + PerformanceReport.setIgnoreActionOnce(UiAction.Type.TEXT_CHANGE_WITH_INPUT); + // Recall the last number dialed. mDigits.setText(mLastNumberDialed); diff --git a/java/com/android/dialer/app/filterednumber/NumbersAdapter.java b/java/com/android/dialer/app/filterednumber/NumbersAdapter.java index f71517a44..d98395ec7 100644 --- a/java/com/android/dialer/app/filterednumber/NumbersAdapter.java +++ b/java/com/android/dialer/app/filterednumber/NumbersAdapter.java @@ -28,6 +28,7 @@ import android.widget.SimpleCursorAdapter; import android.widget.TextView; import com.android.contacts.common.ContactPhotoManager; import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest; +import com.android.contacts.common.lettertiles.LetterTileDrawable; import com.android.contacts.common.util.UriUtils; import com.android.dialer.app.R; import com.android.dialer.compat.CompatUtils; @@ -98,8 +99,8 @@ public class NumbersAdapter extends SimpleCursorAdapter { info.lookupUri == null ? null : UriUtils.getLookupKeyFromUri(info.lookupUri); final int contactType = mContactInfoHelper.isBusiness(info.sourceType) - ? ContactPhotoManager.TYPE_BUSINESS - : ContactPhotoManager.TYPE_DEFAULT; + ? LetterTileDrawable.TYPE_BUSINESS + : LetterTileDrawable.TYPE_DEFAULT; final DefaultImageRequest request = new DefaultImageRequest(displayName, lookupKey, contactType, true /* isCircular */); badge.assignContactUri(info.lookupUri); diff --git a/java/com/android/dialer/app/legacybindings/DialerLegacyBindings.java b/java/com/android/dialer/app/legacybindings/DialerLegacyBindings.java index 1cdeb2175..a483af9e9 100644 --- a/java/com/android/dialer/app/legacybindings/DialerLegacyBindings.java +++ b/java/com/android/dialer/app/legacybindings/DialerLegacyBindings.java @@ -40,6 +40,8 @@ public interface DialerLegacyBindings { Activity activity, ViewGroup alertContainer, CallLogAdapter.CallFetcher callFetcher, + CallLogAdapter.MultiSelectRemoveView multiSelectRemoveView, + CallLogAdapter.OnActionModeStateChangedListener actionModeStateChangedListener, CallLogCache callLogCache, ContactInfoCache contactInfoCache, VoicemailPlaybackPresenter voicemailPlaybackPresenter, diff --git a/java/com/android/dialer/app/legacybindings/DialerLegacyBindingsStub.java b/java/com/android/dialer/app/legacybindings/DialerLegacyBindingsStub.java index 6e32843ba..488fbad68 100644 --- a/java/com/android/dialer/app/legacybindings/DialerLegacyBindingsStub.java +++ b/java/com/android/dialer/app/legacybindings/DialerLegacyBindingsStub.java @@ -34,6 +34,8 @@ public class DialerLegacyBindingsStub implements DialerLegacyBindings { Activity activity, ViewGroup alertContainer, CallLogAdapter.CallFetcher callFetcher, + CallLogAdapter.MultiSelectRemoveView multiSelectRemoveView, + CallLogAdapter.OnActionModeStateChangedListener actionModeStateChangedListener, CallLogCache callLogCache, ContactInfoCache contactInfoCache, VoicemailPlaybackPresenter voicemailPlaybackPresenter, @@ -43,6 +45,8 @@ public class DialerLegacyBindingsStub implements DialerLegacyBindings { activity, alertContainer, callFetcher, + multiSelectRemoveView, + actionModeStateChangedListener, callLogCache, contactInfoCache, voicemailPlaybackPresenter, diff --git a/java/com/android/dialer/app/list/AllContactsFragment.java b/java/com/android/dialer/app/list/AllContactsFragment.java index 04609970a..32a99e795 100644 --- a/java/com/android/dialer/app/list/AllContactsFragment.java +++ b/java/com/android/dialer/app/list/AllContactsFragment.java @@ -38,12 +38,16 @@ import com.android.contacts.common.list.ContactEntryListFragment; import com.android.contacts.common.list.ContactListFilter; import com.android.contacts.common.list.DefaultContactListAdapter; 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.common.LogUtil; import com.android.dialer.compat.CompatUtils; +import com.android.dialer.logging.InteractionEvent; +import com.android.dialer.logging.Logger; import com.android.dialer.util.DialerUtils; import com.android.dialer.util.IntentUtil; import com.android.dialer.util.PermissionsUtil; +import com.android.dialer.widget.EmptyContentView; +import com.android.dialer.widget.EmptyContentView.OnEmptyViewActionButtonClickedListener; +import java.util.Arrays; /** Fragments to show all contacts with phone numbers. */ public class AllContactsFragment extends ContactEntryListFragment @@ -149,6 +153,8 @@ public class AllContactsFragment extends ContactEntryListFragment parent, View view, int position, long id) { final Uri uri = (Uri) view.getTag(); if (uri != null) { + Logger.get(getContext()) + .logInteraction(InteractionEvent.Type.OPEN_QUICK_CONTACT_FROM_ALL_CONTACTS_GENERAL); if (CompatUtils.hasPrioritizedMimeType()) { QuickContact.showQuickContact(getContext(), view, uri, null, Phone.CONTENT_ITEM_TYPE); } else { @@ -169,9 +175,15 @@ public class AllContactsFragment extends ContactEntryListFragment 0) { + LogUtil.i( + "AllContactsFragment.onEmptyViewActionButtonClicked", + "Requesting permissions: " + Arrays.toString(deniedPermissions)); FragmentCompat.requestPermissions( - this, new String[] {READ_CONTACTS}, READ_CONTACTS_PERMISSION_REQUEST_CODE); + this, deniedPermissions, READ_CONTACTS_PERMISSION_REQUEST_CODE); } else { // Add new contact DialerUtils.startActivityWithErrorToast( diff --git a/java/com/android/dialer/app/list/DialerPhoneNumberListAdapter.java b/java/com/android/dialer/app/list/DialerPhoneNumberListAdapter.java index 537f488d5..fc0bd3ccf 100644 --- a/java/com/android/dialer/app/list/DialerPhoneNumberListAdapter.java +++ b/java/com/android/dialer/app/list/DialerPhoneNumberListAdapter.java @@ -19,6 +19,8 @@ package com.android.dialer.app.list; import android.content.Context; import android.content.res.Resources; import android.database.Cursor; +import android.graphics.drawable.Drawable; +import android.support.v4.content.ContextCompat; import android.telephony.PhoneNumberUtils; import android.text.BidiFormatter; import android.text.TextDirectionHeuristics; @@ -29,7 +31,6 @@ import com.android.contacts.common.list.PhoneNumberListAdapter; import com.android.contacts.common.util.ContactDisplayUtils; import com.android.dialer.app.R; import com.android.dialer.location.GeoUtil; -import com.android.dialer.util.CallUtil; /** * {@link PhoneNumberListAdapter} with the following added shortcuts, that are displayed as list @@ -50,7 +51,6 @@ public class DialerPhoneNumberListAdapter extends PhoneNumberListAdapter { private final boolean[] mShortcutEnabled = new boolean[SHORTCUT_COUNT]; private final BidiFormatter mBidiFormatter = BidiFormatter.getInstance(); - private final boolean mVideoCallingEnabled; private final String mCountryIso; private String mFormattedQueryString; @@ -59,7 +59,6 @@ public class DialerPhoneNumberListAdapter extends PhoneNumberListAdapter { super(context); mCountryIso = GeoUtil.getCurrentCountryIso(context); - mVideoCallingEnabled = CallUtil.isVideoEnabled(context); } @Override @@ -110,8 +109,7 @@ public class DialerPhoneNumberListAdapter extends PhoneNumberListAdapter { return convertView; } else { final ContactListItemView v = - new ContactListItemView( - getContext(), null, mVideoCallingEnabled, isCallAndShareEnabled()); + new ContactListItemView(getContext(), null, mIsImsVideoEnabled); assignShortcutToView(v, shortcutType); return v; } @@ -125,8 +123,7 @@ public class DialerPhoneNumberListAdapter extends PhoneNumberListAdapter { Context context, int partition, Cursor cursor, int position, ViewGroup parent) { final ContactListItemView view = super.newView(context, partition, cursor, position, parent); - view.setSupportVideoCallIcon(mVideoCallingEnabled); - view.setSupportCallAndShareIcon(isCallAndShareEnabled()); + view.setSupportVideoCallIcon(mIsImsVideoEnabled); return view; } @@ -171,7 +168,7 @@ public class DialerPhoneNumberListAdapter extends PhoneNumberListAdapter { private void assignShortcutToView(ContactListItemView v, int shortcutType) { final CharSequence text; - final int drawableId; + final Drawable drawable; final Resources resources = getContext().getResources(); final String number = getFormattedQueryString(); switch (shortcutType) { @@ -181,34 +178,39 @@ public class DialerPhoneNumberListAdapter extends PhoneNumberListAdapter { resources, R.string.search_shortcut_call_number, mBidiFormatter.unicodeWrap(number, TextDirectionHeuristics.LTR)); - drawableId = R.drawable.ic_search_phone; + drawable = ContextCompat.getDrawable(getContext(), R.drawable.quantum_ic_call_vd_theme_24); break; case SHORTCUT_CREATE_NEW_CONTACT: text = resources.getString(R.string.search_shortcut_create_new_contact); - drawableId = R.drawable.ic_search_add_contact; + drawable = + ContextCompat.getDrawable(getContext(), R.drawable.quantum_ic_person_add_vd_theme_24); + drawable.setAutoMirrored(true); break; case SHORTCUT_ADD_TO_EXISTING_CONTACT: text = resources.getString(R.string.search_shortcut_add_to_contact); - drawableId = R.drawable.quantum_ic_person_white_24; + drawable = + ContextCompat.getDrawable(getContext(), R.drawable.quantum_ic_person_add_vd_theme_24); break; case SHORTCUT_SEND_SMS_MESSAGE: text = resources.getString(R.string.search_shortcut_send_sms_message); - drawableId = R.drawable.quantum_ic_message_white_24; + drawable = + ContextCompat.getDrawable(getContext(), R.drawable.quantum_ic_message_vd_theme_24); break; case SHORTCUT_MAKE_VIDEO_CALL: text = resources.getString(R.string.search_shortcut_make_video_call); - drawableId = R.drawable.quantum_ic_videocam_white_24; + drawable = + ContextCompat.getDrawable(getContext(), R.drawable.quantum_ic_videocam_vd_theme_24); break; case SHORTCUT_BLOCK_NUMBER: text = resources.getString(R.string.search_shortcut_block_number); - drawableId = R.drawable.ic_not_interested_googblue_24dp; + drawable = + ContextCompat.getDrawable(getContext(), R.drawable.ic_not_interested_googblue_24dp); break; default: throw new IllegalArgumentException("Invalid shortcut type"); } - v.setDrawableResource(drawableId); + v.setDrawable(drawable); v.setDisplayName(text); - v.setPhotoPosition(super.getPhotoPosition()); v.setAdjustSelectionBoundsEnabled(false); } diff --git a/java/com/android/dialer/app/list/DialerViewPager.java b/java/com/android/dialer/app/list/DialerViewPager.java new file mode 100644 index 000000000..ae99f0521 --- /dev/null +++ b/java/com/android/dialer/app/list/DialerViewPager.java @@ -0,0 +1,55 @@ +/* + * 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.list; + +import android.content.Context; +import android.support.v4.view.ViewPager; +import android.util.AttributeSet; +import android.view.MotionEvent; + +/** Class that handles enabling/disabling swiping between @{ViewPagerTabs}. */ +public class DialerViewPager extends ViewPager { + + private boolean enableSwipingPages; + + public DialerViewPager(Context context, AttributeSet attributeSet) { + super(context, attributeSet); + enableSwipingPages = true; + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent event) { + if (enableSwipingPages) { + return super.onInterceptTouchEvent(event); + } + + return false; + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + if (enableSwipingPages) { + return super.onTouchEvent(event); + } + + return false; + } + + public void setEnableSwipingPages(boolean enabled) { + enableSwipingPages = enabled; + } +} diff --git a/java/com/android/dialer/app/list/DialtactsPagerAdapter.java b/java/com/android/dialer/app/list/DialtactsPagerAdapter.java index dba3d3a93..822aa789f 100644 --- a/java/com/android/dialer/app/list/DialtactsPagerAdapter.java +++ b/java/com/android/dialer/app/list/DialtactsPagerAdapter.java @@ -28,8 +28,8 @@ 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.configprovider.ConfigProviderBindings; import com.android.dialer.contactsfragment.ContactsFragment; import com.android.dialer.database.CallLogQueryHandler; import com.android.dialer.speeddial.SpeedDialFragment; @@ -78,7 +78,7 @@ public class DialtactsPagerAdapter extends FragmentPagerAdapter { CallLogFramework callLogFramework = CallLogComponent.get(context).callLogFramework(); useNewCallLogTab = callLogFramework.isNewCallLogEnabled(context); useNewContactsTab = - ConfigProviderBindings.get(context).getBoolean("enable_new_contacts_tab", false); + ConfigProviderBindings.get(context).getBoolean("enable_new_contacts_tab", true); this.tabTitles = tabTitles; hasActiveVoicemailProvider = hasVoicemailProvider; fragments.addAll(Collections.nCopies(TAB_COUNT_WITH_VOICEMAIL, null)); diff --git a/java/com/android/dialer/app/list/ListsFragment.java b/java/com/android/dialer/app/list/ListsFragment.java index 8dd52a9d4..3f03db1e8 100644 --- a/java/com/android/dialer/app/list/ListsFragment.java +++ b/java/com/android/dialer/app/list/ListsFragment.java @@ -31,7 +31,6 @@ import android.os.Handler; import android.os.Trace; import android.preference.PreferenceManager; import android.provider.VoicemailContract; -import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.LayoutInflater; import android.view.View; @@ -44,9 +43,12 @@ 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.database.CallLogQueryHandler.Listener; import com.android.dialer.logging.DialerImpression; import com.android.dialer.logging.Logger; import com.android.dialer.logging.ScreenEvent; +import com.android.dialer.logging.UiAction; +import com.android.dialer.performancereport.PerformanceReport; import com.android.dialer.speeddial.SpeedDialFragment; import com.android.dialer.util.PermissionsUtil; import com.android.dialer.voicemailstatus.VisualVoicemailEnabledChecker; @@ -60,11 +62,11 @@ import java.util.ArrayList; * Contacts list. This will also eventually contain the logic that allows sliding the ViewPager * containing the lists up above the search bar and pin it against the top of the screen. */ -public class ListsFragment extends Fragment - implements ViewPager.OnPageChangeListener, CallLogQueryHandler.Listener { +public class ListsFragment extends Fragment implements OnPageChangeListener, Listener { private static final String TAG = "ListsFragment"; - private ViewPager mViewPager; + + private DialerViewPager mViewPager; private ViewPagerTabs mViewPagerTabs; private DialtactsPagerAdapter mAdapter; private RemoveView mRemoveView; @@ -77,10 +79,12 @@ public class ListsFragment extends Fragment private final ArrayList mOnPageChangeListeners = new ArrayList<>(); /** The position of the currently selected tab. */ private int mTabIndex = TAB_INDEX_SPEED_DIAL; - private boolean mPaused; + private boolean mPaused; private CallLogQueryHandler mCallLogQueryHandler; + private UiAction.Type[] actionTypeList; + private final ContentObserver mVoicemailStatusObserver = new ContentObserver(new Handler()) { @Override @@ -151,6 +155,12 @@ public class ListsFragment extends Fragment Trace.endSection(); Trace.beginSection(TAG + " setup views"); + actionTypeList = new UiAction.Type[TAB_COUNT_WITH_VOICEMAIL]; + actionTypeList[TAB_INDEX_SPEED_DIAL] = UiAction.Type.CHANGE_TAB_TO_FAVORITE; + actionTypeList[TAB_INDEX_HISTORY] = UiAction.Type.CHANGE_TAB_TO_CALL_LOG; + actionTypeList[TAB_INDEX_ALL_CONTACTS] = UiAction.Type.CHANGE_TAB_TO_CONTACTS; + actionTypeList[TAB_INDEX_VOICEMAIL] = UiAction.Type.CHANGE_TAB_TO_VOICEMAIL; + String[] tabTitles = new String[TAB_COUNT_WITH_VOICEMAIL]; tabTitles[TAB_INDEX_SPEED_DIAL] = getResources().getString(R.string.tab_speed_dial); tabTitles[TAB_INDEX_HISTORY] = getResources().getString(R.string.tab_history); @@ -163,7 +173,7 @@ public class ListsFragment extends Fragment tabIcons[TAB_INDEX_ALL_CONTACTS] = R.drawable.quantum_ic_people_white_24; tabIcons[TAB_INDEX_VOICEMAIL] = R.drawable.quantum_ic_voicemail_white_24; - mViewPager = (ViewPager) parentView.findViewById(R.id.lists_pager); + mViewPager = (DialerViewPager) parentView.findViewById(R.id.lists_pager); mAdapter = new DialtactsPagerAdapter( getContext(), @@ -180,7 +190,6 @@ public class ListsFragment extends Fragment mViewPagerTabs.configureTabIcons(tabIcons); mViewPagerTabs.setViewPager(mViewPager); addOnPageChangeListener(mViewPagerTabs); - mRemoveView = (RemoveView) parentView.findViewById(R.id.remove_view); mRemoveViewContent = parentView.findViewById(R.id.remove_view_content); @@ -191,7 +200,7 @@ public class ListsFragment extends Fragment .registerContentObserver( VoicemailContract.Status.CONTENT_URI, true, mVoicemailStatusObserver); } else { - LogUtil.w("ListsFragment.onCreateView", "no voicemail read/add permissions"); + LogUtil.w("ListsFragment.onCreateView", "no voicemail read permissions"); } Trace.endSection(); @@ -213,8 +222,8 @@ public class ListsFragment extends Fragment /** * Shows the tab with the specified index. If the voicemail tab index is specified, but the - * voicemail status hasn't been fetched, it will try to show the tab after the voicemail status - * has been fetched. + * voicemail status hasn't been fetched, it will show the speed dial tab and try to show the + * voicemail tab after the voicemail status has been fetched. */ public void showTab(int index) { if (index == TAB_INDEX_VOICEMAIL) { @@ -241,6 +250,8 @@ public class ListsFragment extends Fragment @Override public void onPageSelected(int position) { + PerformanceReport.recordClick(actionTypeList[position]); + LogUtil.i("ListsFragment.onPageSelected", "position: %d", position); mTabIndex = mAdapter.getRtlPosition(position); @@ -375,7 +386,7 @@ public class ListsFragment extends Fragment public void markMissedCallsAsReadAndRemoveNotifications() { if (mCallLogQueryHandler != null) { mCallLogQueryHandler.markMissedCallsAsRead(); - CallLogNotificationsService.markNewMissedCallsAsOld(getContext(), null); + CallLogNotificationsService.cancelAllMissedCalls(getContext()); } } @@ -385,6 +396,11 @@ public class ListsFragment extends Fragment mRemoveView.animate().alpha(show ? 1 : 0).start(); } + public void showMultiSelectRemoveView(boolean show) { + mViewPagerTabs.setVisibility(show ? View.GONE : View.VISIBLE); + mViewPager.setEnableSwipingPages(!show); + } + public boolean hasFrequents() { Fragment page = mAdapter.getItem(mAdapter.getRtlPosition(TAB_INDEX_SPEED_DIAL)); return page instanceof OldSpeedDialFragment diff --git a/java/com/android/dialer/app/list/OldSpeedDialFragment.java b/java/com/android/dialer/app/list/OldSpeedDialFragment.java index 40fe74565..05d017b28 100644 --- a/java/com/android/dialer/app/list/OldSpeedDialFragment.java +++ b/java/com/android/dialer/app/list/OldSpeedDialFragment.java @@ -50,13 +50,13 @@ import com.android.contacts.common.ContactTileLoaderFactory; 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.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; +import com.android.dialer.widget.EmptyContentView; import java.util.ArrayList; +import java.util.Arrays; /** This fragment displays the user's favorite/frequent contacts in a grid. */ public class OldSpeedDialFragment extends Fragment @@ -404,9 +404,15 @@ public class OldSpeedDialFragment extends Fragment return; } - if (!PermissionsUtil.hasPermission(activity, READ_CONTACTS)) { + String[] deniedPermissions = + PermissionsUtil.getPermissionsCurrentlyDenied( + getContext(), PermissionsUtil.allContactsGroupPermissionsUsedInDialer); + if (deniedPermissions.length > 0) { + LogUtil.i( + "OldSpeedDialFragment.onEmptyViewActionButtonClicked", + "Requesting permissions: " + Arrays.toString(deniedPermissions)); FragmentCompat.requestPermissions( - this, new String[] {READ_CONTACTS}, READ_CONTACTS_PERMISSION_REQUEST_CODE); + this, deniedPermissions, READ_CONTACTS_PERMISSION_REQUEST_CODE); } else { // Switch tabs ((HostInterface) activity).showAllContactsTab(); @@ -430,7 +436,7 @@ public class OldSpeedDialFragment extends Fragment void showAllContactsTab(); } - private class ContactTileLoaderListener implements LoaderManager.LoaderCallbacks { + class ContactTileLoaderListener implements LoaderManager.LoaderCallbacks { @Override public CursorLoader onCreateLoader(int id, Bundle args) { @@ -460,24 +466,17 @@ public class OldSpeedDialFragment extends Fragment private class ContactTileAdapterListener implements ContactTileView.Listener { @Override - public void onContactSelected(Uri contactUri, Rect targetRect) { + public void onContactSelected( + Uri contactUri, Rect targetRect, CallSpecificAppData callSpecificAppData) { if (mPhoneNumberPickerActionListener != null) { - CallSpecificAppData callSpecificAppData = - CallSpecificAppData.newBuilder() - .setCallInitiationType(CallInitiationType.Type.SPEED_DIAL) - .build(); mPhoneNumberPickerActionListener.onPickDataUri( contactUri, false /* isVideoCall */, callSpecificAppData); } } @Override - public void onCallNumberDirectly(String phoneNumber) { + public void onCallNumberDirectly(String phoneNumber, CallSpecificAppData callSpecificAppData) { if (mPhoneNumberPickerActionListener != null) { - 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/PhoneFavoriteListView.java b/java/com/android/dialer/app/list/PhoneFavoriteListView.java index 9516f0611..f4f395ff0 100644 --- a/java/com/android/dialer/app/list/PhoneFavoriteListView.java +++ b/java/com/android/dialer/app/list/PhoneFavoriteListView.java @@ -1,6 +1,5 @@ /* - * Copyright (C) 2012 Google Inc. - * Licensed to 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. @@ -24,7 +23,6 @@ import android.content.res.Configuration; import android.graphics.Bitmap; import android.os.Handler; import android.util.AttributeSet; -import android.util.Log; import android.view.DragEvent; import android.view.MotionEvent; import android.view.View; @@ -33,6 +31,7 @@ import android.widget.GridView; import android.widget.ImageView; import com.android.dialer.app.R; import com.android.dialer.app.list.DragDropController.DragItemContainer; +import com.android.dialer.common.LogUtil; /** Viewgroup that presents the user's speed dial contacts in a grid. */ public class PhoneFavoriteListView extends GridView @@ -40,14 +39,14 @@ public class PhoneFavoriteListView extends GridView public static final String LOG_TAG = PhoneFavoriteListView.class.getSimpleName(); final int[] mLocationOnScreen = new int[2]; - private final long SCROLL_HANDLER_DELAY_MILLIS = 5; - private final int DRAG_SCROLL_PX_UNIT = 25; - private final float DRAG_SHADOW_ALPHA = 0.7f; + private static final long SCROLL_HANDLER_DELAY_MILLIS = 5; + private static final int DRAG_SCROLL_PX_UNIT = 25; + private static final float DRAG_SHADOW_ALPHA = 0.7f; /** * {@link #mTopScrollBound} and {@link mBottomScrollBound} will be offseted to the top / bottom by * {@link #getHeight} * {@link #BOUND_GAP_RATIO} pixels. */ - private final float BOUND_GAP_RATIO = 0.2f; + private static final float BOUND_GAP_RATIO = 0.2f; private float mTouchSlop; private int mTopScrollBound; @@ -67,7 +66,6 @@ public class PhoneFavoriteListView extends GridView } }; private boolean mIsDragScrollerRunning = false; - private int mTouchDownForDragStartX; private int mTouchDownForDragStartY; private Bitmap mDragShadowBitmap; private ImageView mDragShadowOverlay; @@ -98,7 +96,7 @@ public class PhoneFavoriteListView extends GridView } public PhoneFavoriteListView(Context context, AttributeSet attrs) { - this(context, attrs, -1); + this(context, attrs, 0); } public PhoneFavoriteListView(Context context, AttributeSet attrs, int defStyle) { @@ -121,7 +119,6 @@ public class PhoneFavoriteListView extends GridView @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { - mTouchDownForDragStartX = (int) ev.getX(); mTouchDownForDragStartY = (int) ev.getY(); } @@ -287,7 +284,7 @@ public class PhoneFavoriteListView extends GridView try { bitmap = cache.copy(Bitmap.Config.ARGB_8888, false); } catch (final OutOfMemoryError e) { - Log.w(LOG_TAG, "Failed to copy bitmap from Drawing cache", e); + LogUtil.w(LOG_TAG, "Failed to copy bitmap from Drawing cache", e); bitmap = null; } } diff --git a/java/com/android/dialer/app/list/PhoneFavoriteSquareTileView.java b/java/com/android/dialer/app/list/PhoneFavoriteSquareTileView.java index 5a18d039b..40f23ea6f 100644 --- a/java/com/android/dialer/app/list/PhoneFavoriteSquareTileView.java +++ b/java/com/android/dialer/app/list/PhoneFavoriteSquareTileView.java @@ -26,6 +26,8 @@ import android.widget.TextView; import com.android.contacts.common.list.ContactEntry; import com.android.dialer.app.R; import com.android.dialer.compat.CompatUtils; +import com.android.dialer.logging.InteractionEvent; +import com.android.dialer.logging.Logger; /** Displays the contact's picture overlaid with their name and number type in a tile. */ public class PhoneFavoriteSquareTileView extends PhoneFavoriteTileView { @@ -87,6 +89,8 @@ public class PhoneFavoriteSquareTileView extends PhoneFavoriteTileView { new OnClickListener() { @Override public void onClick(View v) { + Logger.get(getContext()) + .logInteraction(InteractionEvent.Type.SPEED_DIAL_OPEN_CONTACT_CARD); launchQuickContact(); } }); diff --git a/java/com/android/dialer/app/list/PhoneFavoriteTileView.java b/java/com/android/dialer/app/list/PhoneFavoriteTileView.java index db89cf3dc..eb4f8e967 100644 --- a/java/com/android/dialer/app/list/PhoneFavoriteTileView.java +++ b/java/com/android/dialer/app/list/PhoneFavoriteTileView.java @@ -18,16 +18,22 @@ package com.android.dialer.app.list; import android.content.ClipData; import android.content.Context; +import android.provider.ContactsContract.PinnedPositions; import android.text.TextUtils; import android.util.AttributeSet; import android.view.View; import android.widget.ImageView; -import com.android.contacts.common.ContactPhotoManager; import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest; import com.android.contacts.common.MoreContactUtils; +import com.android.contacts.common.lettertiles.LetterTileDrawable; import com.android.contacts.common.list.ContactEntry; import com.android.contacts.common.list.ContactTileView; import com.android.dialer.app.R; +import com.android.dialer.callintent.CallInitiationType; +import com.android.dialer.callintent.CallSpecificAppData; +import com.android.dialer.callintent.SpeedDialContactType; +import com.android.dialer.logging.InteractionEvent; +import com.android.dialer.logging.Logger; /** * A light version of the {@link com.android.contacts.common.list.ContactTileView} that is used in @@ -42,7 +48,6 @@ public abstract class PhoneFavoriteTileView extends ContactTileView { // tile is long pressed. static final String DRAG_PHONE_FAVORITE_TILE = "PHONE_FAVORITE_TILE"; private static final String TAG = PhoneFavoriteTileView.class.getSimpleName(); - private static final boolean DEBUG = false; // These parameters instruct the photo manager to display the default image/letter at 70% of // its normal size, and vertically offset upwards 12% towards the top of the letter tile, to // make room for the contact name and number label at the bottom of the image. @@ -55,6 +60,8 @@ public abstract class PhoneFavoriteTileView extends ContactTileView { private View mShadowOverlay; /** Users' most frequent phone number. */ private String mPhoneNumberString; + private boolean isPinned; + private boolean isStarred; public PhoneFavoriteTileView(Context context, AttributeSet attrs) { super(context, attrs); @@ -83,6 +90,8 @@ public abstract class PhoneFavoriteTileView extends ContactTileView { super.loadFromContact(entry); // Set phone number to null in case we're reusing the view. mPhoneNumberString = null; + isPinned = (entry.pinned != PinnedPositions.UNPINNED); + isStarred = entry.isFavorite; if (entry != null) { // Grab the phone-number to call directly. See {@link onClick()}. mPhoneNumberString = entry.phoneNumber; @@ -113,16 +122,37 @@ public abstract class PhoneFavoriteTileView extends ContactTileView { if (mListener == null) { return; } + + CallSpecificAppData.Builder callSpecificAppData = + CallSpecificAppData.newBuilder() + .setCallInitiationType(CallInitiationType.Type.SPEED_DIAL) + .setSpeedDialContactPosition( + ((PhoneFavoriteListView) v.getParent()).getPositionForView(v)); + if (isStarred) { + callSpecificAppData.addSpeedDialContactType(SpeedDialContactType.Type.STARRED_CONTACT); + } else { + callSpecificAppData.addSpeedDialContactType(SpeedDialContactType.Type.FREQUENT_CONTACT); + } + if (isPinned) { + callSpecificAppData.addSpeedDialContactType(SpeedDialContactType.Type.PINNED_CONTACT); + } + if (TextUtils.isEmpty(mPhoneNumberString)) { + // Don't set performance report now, since user may spend some time on picking a number + // Copy "superclass" implementation + Logger.get(getContext()) + .logInteraction(InteractionEvent.Type.SPEED_DIAL_CLICK_CONTACT_WITH_AMBIGUOUS_NUMBER); mListener.onContactSelected( - getLookupUri(), MoreContactUtils.getTargetRectFromView(PhoneFavoriteTileView.this)); + getLookupUri(), + MoreContactUtils.getTargetRectFromView(PhoneFavoriteTileView.this), + callSpecificAppData.build()); } else { // When you tap a frequently-called contact, you want to // call them at the number that you usually talk to them // at (i.e. the one displayed in the UI), regardless of // whether that's their default number. - mListener.onCallNumberDirectly(mPhoneNumberString); + mListener.onCallNumberDirectly(mPhoneNumberString, callSpecificAppData.build()); } } }; @@ -133,7 +163,7 @@ public abstract class PhoneFavoriteTileView extends ContactTileView { return new DefaultImageRequest( displayName, lookupKey, - ContactPhotoManager.TYPE_DEFAULT, + LetterTileDrawable.TYPE_DEFAULT, DEFAULT_IMAGE_LETTER_SCALE, DEFAULT_IMAGE_LETTER_OFFSET, false); diff --git a/java/com/android/dialer/app/list/PhoneFavoritesTileAdapter.java b/java/com/android/dialer/app/list/PhoneFavoritesTileAdapter.java index c692ecac7..876fbf146 100644 --- a/java/com/android/dialer/app/list/PhoneFavoritesTileAdapter.java +++ b/java/com/android/dialer/app/list/PhoneFavoritesTileAdapter.java @@ -30,7 +30,6 @@ import android.provider.ContactsContract.Contacts; import android.provider.ContactsContract.PinnedPositions; import android.support.annotation.VisibleForTesting; import android.text.TextUtils; -import android.util.Log; import android.util.LongSparseArray; import android.view.View; import android.view.ViewGroup; @@ -41,6 +40,11 @@ import com.android.contacts.common.list.ContactEntry; import com.android.contacts.common.list.ContactTileView; import com.android.contacts.common.preference.ContactsPreferences; import com.android.dialer.app.R; +import com.android.dialer.common.LogUtil; +import com.android.dialer.lightbringer.Lightbringer; +import com.android.dialer.lightbringer.LightbringerComponent; +import com.android.dialer.logging.InteractionEvent; +import com.android.dialer.logging.Logger; import com.android.dialer.shortcuts.ShortcutRefresher; import com.google.common.collect.ComparisonChain; import java.util.ArrayList; @@ -190,6 +194,14 @@ public class PhoneFavoritesTileAdapter extends BaseAdapter implements OnDragDrop // Track the length of {@link #mContactEntries} and compare to {@link #TILES_SOFT_LIMIT}. int counter = 0; + // Data for logging + int starredContactsCount = 0; + int pinnedContactsCount = 0; + int multipleNumbersContactsCount = 0; + int contactsWithPhotoCount = 0; + int contactsWithNameCount = 0; + int lightbringerReachableContactsCount = 0; + // The cursor should not be closed since this is invoked from a CursorLoader. if (cursor.moveToFirst()) { int starredColumn = cursor.getColumnIndexOrThrow(Contacts.STARRED); @@ -262,6 +274,22 @@ public class PhoneFavoritesTileAdapter extends BaseAdapter implements OnDragDrop contact.pinned = pinned; mContactEntries.add(contact); + // Set counts for logging + if (isStarred) { + // mNumStarred might be larger than the number of visible starred contact, + // since it includes invisible ones (starred contact with no phone number). + starredContactsCount++; + } + if (pinned != PinnedPositions.UNPINNED) { + pinnedContactsCount++; + } + if (!TextUtils.isEmpty(name)) { + contactsWithNameCount++; + } + if (photoUri != null) { + contactsWithPhotoCount++; + } + duplicates.put(id, contact); counter++; @@ -274,6 +302,47 @@ public class PhoneFavoritesTileAdapter extends BaseAdapter implements OnDragDrop ShortcutRefresher.refresh(mContext, mContactEntries); notifyDataSetChanged(); + + Lightbringer lightbringer = LightbringerComponent.get(mContext).getLightbringer(); + for (ContactEntry contact : mContactEntries) { + if (contact.phoneNumber == null) { + multipleNumbersContactsCount++; + } else if (lightbringer.isReachable(mContext, contact.phoneNumber)) { + lightbringerReachableContactsCount++; + } + } + + Logger.get(mContext) + .logSpeedDialContactComposition( + counter, + starredContactsCount, + pinnedContactsCount, + multipleNumbersContactsCount, + contactsWithPhotoCount, + contactsWithNameCount, + lightbringerReachableContactsCount); + // Logs for manual testing + LogUtil.v("PhoneFavoritesTileAdapter.saveCursorToCache", "counter: %d", counter); + LogUtil.v( + "PhoneFavoritesTileAdapter.saveCursorToCache", + "starredContactsCount: %d", + starredContactsCount); + LogUtil.v( + "PhoneFavoritesTileAdapter.saveCursorToCache", + "pinnedContactsCount: %d", + pinnedContactsCount); + LogUtil.v( + "PhoneFavoritesTileAdapter.saveCursorToCache", + "multipleNumbersContactsCount: %d", + multipleNumbersContactsCount); + LogUtil.v( + "PhoneFavoritesTileAdapter.saveCursorToCache", + "contactsWithPhotoCount: %d", + contactsWithPhotoCount); + LogUtil.v( + "PhoneFavoritesTileAdapter.saveCursorToCache", + "contactsWithNameCount: %d", + contactsWithNameCount); } /** Iterates over the {@link Cursor} Returns position of the first NON Starred Contact */ @@ -347,7 +416,7 @@ public class PhoneFavoritesTileAdapter extends BaseAdapter implements OnDragDrop @Override public void notifyDataSetChanged() { if (DEBUG) { - Log.v(TAG, "notifyDataSetChanged"); + LogUtil.v(TAG, "notifyDataSetChanged"); } super.notifyDataSetChanged(); } @@ -355,7 +424,7 @@ public class PhoneFavoritesTileAdapter extends BaseAdapter implements OnDragDrop @Override public View getView(int position, View convertView, ViewGroup parent) { if (DEBUG) { - Log.v(TAG, "get view for " + String.valueOf(position)); + LogUtil.v(TAG, "get view for " + position); } PhoneFavoriteTileView tileView = null; @@ -455,8 +524,9 @@ public class PhoneFavoritesTileAdapter extends BaseAdapter implements OnDragDrop // update the database here with the new pinned positions try { mContext.getContentResolver().applyBatch(ContactsContract.AUTHORITY, operations); + Logger.get(mContext).logInteraction(InteractionEvent.Type.SPEED_DIAL_PIN_CONTACT); } catch (RemoteException | OperationApplicationException e) { - Log.e(TAG, "Exception thrown when pinning contacts", e); + LogUtil.e(TAG, "Exception thrown when pinning contacts", e); } } } @@ -609,6 +679,7 @@ public class PhoneFavoritesTileAdapter extends BaseAdapter implements OnDragDrop if (mDraggedEntry != null) { unstarAndUnpinContact(mDraggedEntry.lookupUri); mAwaitingRemove = true; + Logger.get(mContext).logInteraction(InteractionEvent.Type.SPEED_DIAL_REMOVE_CONTACT); } } diff --git a/java/com/android/dialer/app/list/RegularSearchFragment.java b/java/com/android/dialer/app/list/RegularSearchFragment.java index 02896793b..728948bfc 100644 --- a/java/com/android/dialer/app/list/RegularSearchFragment.java +++ b/java/com/android/dialer/app/list/RegularSearchFragment.java @@ -25,12 +25,14 @@ import android.view.ViewGroup; import com.android.contacts.common.list.ContactEntryListAdapter; 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.CallInitiationType; +import com.android.dialer.common.LogUtil; import com.android.dialer.phonenumbercache.CachedNumberLookupService; import com.android.dialer.phonenumbercache.PhoneNumberCache; import com.android.dialer.util.PermissionsUtil; +import com.android.dialer.widget.EmptyContentView; +import com.android.dialer.widget.EmptyContentView.OnEmptyViewActionButtonClickedListener; +import java.util.Arrays; public class RegularSearchFragment extends SearchFragment implements OnEmptyViewActionButtonClickedListener, @@ -114,8 +116,15 @@ public class RegularSearchFragment extends SearchFragment } if (READ_CONTACTS.equals(mPermissionToRequest)) { - FragmentCompat.requestPermissions( - this, new String[] {mPermissionToRequest}, PERMISSION_REQUEST_CODE); + String[] deniedPermissions = + PermissionsUtil.getPermissionsCurrentlyDenied( + getContext(), PermissionsUtil.allContactsGroupPermissionsUsedInDialer); + if (deniedPermissions.length > 0) { + LogUtil.i( + "RegularSearchFragment.onEmptyViewActionButtonClicked", + "Requesting permissions: " + Arrays.toString(deniedPermissions)); + FragmentCompat.requestPermissions(this, deniedPermissions, PERMISSION_REQUEST_CODE); + } } } diff --git a/java/com/android/dialer/app/list/RemoveView.java b/java/com/android/dialer/app/list/RemoveView.java index 3b917db43..1d566c5a0 100644 --- a/java/com/android/dialer/app/list/RemoveView.java +++ b/java/com/android/dialer/app/list/RemoveView.java @@ -41,7 +41,7 @@ public class RemoveView extends FrameLayout { } public RemoveView(Context context, AttributeSet attrs) { - this(context, attrs, -1); + this(context, attrs, 0); } public RemoveView(Context context, AttributeSet attrs, int defStyle) { diff --git a/java/com/android/dialer/app/list/SearchFragment.java b/java/com/android/dialer/app/list/SearchFragment.java index fcf8236e3..00a2708a1 100644 --- a/java/com/android/dialer/app/list/SearchFragment.java +++ b/java/com/android/dialer/app/list/SearchFragment.java @@ -34,19 +34,20 @@ import android.widget.LinearLayout; import android.widget.ListView; import android.widget.Space; import com.android.contacts.common.list.ContactEntryListAdapter; -import com.android.contacts.common.list.ContactListItemView; import com.android.contacts.common.list.OnPhoneNumberPickerActionListener; import com.android.contacts.common.list.PhoneNumberPickerFragment; import com.android.dialer.animation.AnimUtils; 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.CallSpecificAppData; import com.android.dialer.common.LogUtil; +import com.android.dialer.logging.DialerImpression; +import com.android.dialer.logging.Logger; import com.android.dialer.util.DialerUtils; import com.android.dialer.util.IntentUtil; import com.android.dialer.util.PermissionsUtil; +import com.android.dialer.widget.EmptyContentView; public class SearchFragment extends PhoneNumberPickerFragment { @@ -80,7 +81,6 @@ public class SearchFragment extends PhoneNumberPickerFragment { setQuickContactEnabled(true); setAdjustSelectionBoundsEnabled(false); setDarkTheme(false); - setPhotoPosition(ContactListItemView.getDefaultPhotoPosition(false /* opposite */)); setUseCallableUri(true); try { @@ -98,9 +98,6 @@ public class SearchFragment extends PhoneNumberPickerFragment { public void onStart() { LogUtil.d("SearchFragment.onStart", ""); super.onStart(); - if (isSearchMode()) { - getAdapter().setHasHeader(0, false); - } mActivity = (HostInterface) getActivity(); @@ -172,16 +169,6 @@ public class SearchFragment extends PhoneNumberPickerFragment { return animator; } - @Override - protected void setSearchMode(boolean flag) { - super.setSearchMode(flag); - // This hides the "All contacts with phone numbers" header in the search fragment - final ContactEntryListAdapter adapter = getAdapter(); - if (adapter != null) { - adapter.setHasHeader(0, false); - } - } - public void setAddToContactNumber(String addToContactNumber) { mAddToContactNumber = addToContactNumber; } @@ -249,6 +236,10 @@ public class SearchFragment extends PhoneNumberPickerFragment { } break; case DialerPhoneNumberListAdapter.SHORTCUT_CREATE_NEW_CONTACT: + if (this instanceof SmartDialSearchFragment) { + Logger.get(getContext()) + .logImpression(DialerImpression.Type.CREATE_NEW_CONTACT_FROM_DIALPAD); + } number = TextUtils.isEmpty(mAddToContactNumber) ? adapter.getFormattedQueryString() @@ -257,6 +248,10 @@ public class SearchFragment extends PhoneNumberPickerFragment { DialerUtils.startActivityWithErrorToast(getActivity(), intent); break; case DialerPhoneNumberListAdapter.SHORTCUT_ADD_TO_EXISTING_CONTACT: + if (this instanceof SmartDialSearchFragment) { + Logger.get(getContext()) + .logImpression(DialerImpression.Type.ADD_TO_A_CONTACT_FROM_DIALPAD); + } number = TextUtils.isEmpty(mAddToContactNumber) ? adapter.getFormattedQueryString() diff --git a/java/com/android/dialer/app/list/SmartDialSearchFragment.java b/java/com/android/dialer/app/list/SmartDialSearchFragment.java index eb1508c72..2ebc06bc3 100644 --- a/java/com/android/dialer/app/list/SmartDialSearchFragment.java +++ b/java/com/android/dialer/app/list/SmartDialSearchFragment.java @@ -29,11 +29,12 @@ import android.support.v13.app.FragmentCompat; 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.CallInitiationType; import com.android.dialer.common.LogUtil; import com.android.dialer.database.DialerDatabaseHelper; import com.android.dialer.util.PermissionsUtil; +import com.android.dialer.widget.EmptyContentView; +import java.util.Arrays; /** Implements a fragment to load and display SmartDial search results. */ public class SmartDialSearchFragment extends SearchFragment @@ -79,6 +80,11 @@ public class SmartDialSearchFragment extends SearchFragment } } + @Override + public boolean getShowEmptyListForNullQuery() { + return true; + } + @Override protected void setupEmptyView() { if (mEmptyView != null && getActivity() != null) { @@ -123,8 +129,16 @@ public class SmartDialSearchFragment extends SearchFragment return; } - FragmentCompat.requestPermissions( - this, new String[] {CALL_PHONE}, CALL_PHONE_PERMISSION_REQUEST_CODE); + String[] deniedPermissions = + PermissionsUtil.getPermissionsCurrentlyDenied( + getContext(), PermissionsUtil.allPhoneGroupPermissionsUsedInDialer); + if (deniedPermissions.length > 0) { + LogUtil.i( + "SmartDialSearchFragment.onEmptyViewActionButtonClicked", + "Requesting permissions: " + Arrays.toString(deniedPermissions)); + FragmentCompat.requestPermissions( + this, deniedPermissions, CALL_PHONE_PERMISSION_REQUEST_CODE); + } } @Override diff --git a/java/com/android/dialer/app/manifests/activities/AndroidManifest.xml b/java/com/android/dialer/app/manifests/activities/AndroidManifest.xml index ca93da0de..0729d7293 100644 --- a/java/com/android/dialer/app/manifests/activities/AndroidManifest.xml +++ b/java/com/android/dialer/app/manifests/activities/AndroidManifest.xml @@ -19,7 +19,7 @@ - + + @@ -106,6 +107,7 @@ + - - - diff --git a/java/com/android/dialer/app/res/drawable/ic_wifi_calling.xml b/java/com/android/dialer/app/res/drawable/ic_wifi_calling.xml new file mode 100644 index 000000000..968713376 --- /dev/null +++ b/java/com/android/dialer/app/res/drawable/ic_wifi_calling.xml @@ -0,0 +1,29 @@ + + + + + + + \ No newline at end of file diff --git a/java/com/android/dialer/app/res/layout-land/empty_content_view_dialpad_search.xml b/java/com/android/dialer/app/res/layout-land/empty_content_view_dialpad_search.xml index 5f8068067..59d13636a 100644 --- a/java/com/android/dialer/app/res/layout-land/empty_content_view_dialpad_search.xml +++ b/java/com/android/dialer/app/res/layout-land/empty_content_view_dialpad_search.xml @@ -26,14 +26,14 @@ android:layout_height="0dp" android:layout_weight="1"/> + + + + + 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 17a45208d..422c52991 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 @@ -45,7 +45,7 @@ android:cropToPadding="false" android:clipToPadding="false"/> - + + + + + + - - + android:src="@drawable/ic_check_mark_48dp" /> diff --git a/java/com/android/dialer/app/res/layout/call_log_list_item_actions.xml b/java/com/android/dialer/app/res/layout/call_log_list_item_actions.xml index d3a553130..504638348 100644 --- a/java/com/android/dialer/app/res/layout/call_log_list_item_actions.xml +++ b/java/com/android/dialer/app/res/layout/call_log_list_item_actions.xml @@ -50,7 +50,7 @@ + android:text="@string/call"/> + android:src="@drawable/ic_phone_attach"/> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + android:id="@+id/spacer" + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1" + android:background="#00000000"/> + android:layout_width="match_parent" + android:layout_height="@dimen/shadow_length" + android:background="@drawable/shadow_fade_up"/> + android:id="@+id/dialpadChooser" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@color/background_dialer_light" + android:visibility="gone"/> + android:id="@+id/dialpad_floating_action_button_margin_bottom" + android:layout_width="match_parent" + android:layout_height="@dimen/floating_action_button_margin_bottom" + android:layout_alignParentBottom="true"/> + android:src="@drawable/quantum_ic_call_vd_theme_24" + app:backgroundTint="@color/dialpad_fab_green" + app:colorControlNormal="#ffffff" + app:elevation="@dimen/floating_action_button_translation_z"/> diff --git a/java/com/android/dialer/app/res/layout/empty_content_view.xml b/java/com/android/dialer/app/res/layout/empty_content_view.xml deleted file mode 100644 index 96a6a0262..000000000 --- a/java/com/android/dialer/app/res/layout/empty_content_view.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - diff --git a/java/com/android/dialer/app/res/layout/empty_content_view_dialpad_search.xml b/java/com/android/dialer/app/res/layout/empty_content_view_dialpad_search.xml index e245aaca0..1d2047982 100644 --- a/java/com/android/dialer/app/res/layout/empty_content_view_dialpad_search.xml +++ b/java/com/android/dialer/app/res/layout/empty_content_view_dialpad_search.xml @@ -16,7 +16,7 @@ - - + android:animateLayoutChanges="true"> + + + android:layout_width="match_parent" + android:layout_height="@dimen/action_bar_height_large" + android:background="@color/actionbar_background_color" + android:elevation="@dimen/tab_elevation"/> - - + android:id="@+id/lists_pager_header" + style="@style/DialtactsActionBarTabTextStyle" + android:layout_width="match_parent" + android:layout_height="@dimen/tab_height" + android:layout_gravity="top" + android:elevation="@dimen/tab_elevation" + android:orientation="horizontal" + android:textAllCaps="true"/> + + @@ -58,38 +58,38 @@ This is required since drag and drop event is only sent to views are visible when drag starts. --> + android:id="@+id/remove_view" + android:layout_width="match_parent" + android:layout_height="@dimen/tab_height" + android:layout_marginTop="@dimen/action_bar_height_large" + android:contentDescription="@string/remove_contact" + android:importantForAccessibility="no"> + android:id="@+id/remove_view_content" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@color/actionbar_background_color" + android:gravity="center" + android:orientation="horizontal" + android:visibility="gone"> + android:id="@+id/remove_view_icon" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="8dp" + android:layout_marginBottom="8dp" + android:src="@drawable/ic_remove" + android:tint="@color/remove_text_color"/> + android:id="@+id/remove_view_text" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/remove_contact" + android:textColor="@color/remove_text_color" + android:textSize="@dimen/remove_text_size"/> diff --git a/java/com/android/dialer/app/res/layout/search_edittext.xml b/java/com/android/dialer/app/res/layout/search_edittext.xml index c02512d80..bb6a5f7de 100644 --- a/java/com/android/dialer/app/res/layout/search_edittext.xml +++ b/java/com/android/dialer/app/res/layout/search_edittext.xml @@ -29,7 +29,7 @@ android:padding="@dimen/search_box_search_icon_padding" android:importantForAccessibility="no" android:scaleType="center" - android:src="@drawable/quantum_ic_search_white_24" + android:src="@drawable/quantum_ic_search_vd_theme_24" android:tint="@color/searchbox_icon_tint"/> - + 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 2eb462b1c..40e297386 100644 --- a/java/com/android/dialer/app/res/values-af/strings.xml +++ b/java/com/android/dialer/app/res/values-af/strings.xml @@ -80,11 +80,16 @@ "Voeg wagtyd by" "Instellings" "Nabootser" + "Skep nuwe UI-kortpad" "Alle kontakte" "Gebruik raak-nommerbord" "Keer terug na oproep wat besig is" "Voeg oproep by" "Inkomende oproepe" + "Gaan tans grootmaathandelingmodus in" + "Het grootmaathandelingmodus verlaat" + "Het %1$s gekies" + "Het %1$s ontkies" "Speel stemboodskap" "Bekyk kontak %1$s" "Bel %1$s" @@ -99,11 +104,15 @@ "Stemboodskap" "%s sek." "%s min. %s sek." - "stemboodskap" - "stemboodskappe" - "Ja" - "Nee" + "Kanselleer grootmaathandelingmodus" + "Vee uit" + "Kanselleer" "Vee geselekteerde %1$s uit?" + "%1$s gekies" + + ""Vee hierdie stemboodskappe uit? "" + ""Vee hierdie stemboodskap uit? "" + @string/call_log_header_today "%1$s om %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Laai tans van SIM-kaart af…" "SIM-kaartkontakte" - "Geen kontakte-program beskikbaar nie" "Stemsoektog is nie beskikbaar nie" "Kan nie \'n foonoproep maak nie want die Foon-program is gedeaktiveer." "Deursoek kontakte" @@ -145,10 +153,9 @@ "%s nuwe gemiste oproepe" "Daar is nog niemand op jou spoedbel nie" "Voeg \'n gunsteling by" - "Jy het nog nie enige kontakte nie" - "Voeg \'n kontak by" "Raak aan prent om al die nommers te sien of raak en hou om te herorganiseer" "Verwyder" + "Kies alles" "Video-oproep" "Stuur \'n boodskap" "Oproepbesonderhede" @@ -213,11 +220,9 @@ "Geblokkeerde nommers" "%1$s is reeds geblokkeer." "Oproeprekeninge" - "Skakel aan" "Stel toestemmings" "Skakel die kontaktetoestemming aan om spoedbel te aktiveer." "Skakel die foontoestemming aan om jou oproeprekord te sien." - "Skakel die kontaktetoestemming aan om jou kontakte te sien." "Skakel die foontoestemming aan om na jou stemboodskapdiens te gaan." "Skakel die Kontakte-toestemmings aan om jou kontakte te deursoek." "Skakel die foontoestemming aan om \'n oproep te maak." 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 82303019c..08b52a6ee 100644 --- a/java/com/android/dialer/app/res/values-am/strings.xml +++ b/java/com/android/dialer/app/res/values-am/strings.xml @@ -80,11 +80,16 @@ "መጠበቅ አክል" "ቅንብሮች" "ማስመሰያ" + "አዲስ የዩአይ አቋራጭ ፍጠር" "ሁሉም እውቅያዎች" "የድምፅ ቁልፍ ሰሌዳን ንካ" "በመካሄድ ላይ ወዳለው ጥሪ ተመለስ" "ጥሪ ያክሉ" "ገቢ ጥሪዎች" + "ወደ የጅምላ እርምጃ ሁነታ በመግባት ላይ" + "ከጅምላ እርምጃ ሁነታ ለቀው ወጥተዋል" + "%1$s ተመርጧል" + "%1$s አልተመረጠም" "የድምፅ መልዕክት አጫውት" "ዕውቂያ %1$s ዕይ" "ጥሪ %1$s" @@ -99,11 +104,15 @@ "የድምፅ መልዕክት" "%s ሰከንድ" "%s ደቂቃ %s ሴከ" - "የድምፅ መልዕክት" - "የድምፅ መልዕክቶች" - "አዎ" - "አይ" + "የጅምላ እርምጃ ሁነታ ይቅር" + "ሰርዝ" + "ይቅር" "የተመረጠው %1$s ይሰረዝ?" + "%1$s ተመርጠዋል" + + ""እነዚህ የድምፅ መልዕክቶች ይሰረዙ? "" + ""እነዚህ የድምፅ መልዕክቶች ይሰረዙ? "" + @string/call_log_header_today "%1$s %2$s ላይ" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "ከSIM ካርድ ላይ በመጫን ላይ..." "የSIM ካርድ ዕውቂያዎች" - "ምንም የእውቂያዎች መተግበሪያ አይገኝም" "የድምጽ ፍለጋ አይገኝም" "የስልክ መተግበሪያው ስለተሰናከለ የስልክ ጥሪ ማድረግ አይቻልም።" "ዕውቅያዎችን ፈልግ" @@ -145,10 +153,9 @@ "%s አዲስ ያልተመለሱ ጥሪዎች" "በፈጥኖ መደወያ ላይ ገና ማንም የለዎትም" "ተወዳጅ አክል" - "ገና ምንም እውቂያዎች የሉዎትም" - "ዕውቂያ አክል" "ሁሉንም ቁጥሮች ለማየት ምስል ይንኩ ወይም ዳግም ለመደርደር ነክተው ይያዙት" "አስወግድ" + "ሁሉንም ምረጥ" "የቪዲዮ ጥሪ" "መልእክት ላክ" "የጥሪ ዝርዝሮች" @@ -213,11 +220,9 @@ "የታገዱ ቁጥሮች" "%1$s ቀድሞውኑ ታግዷል።" "የመደወያ መለያዎች" - "አብራ" "ፍቃዶችን አዋቅር" "ፈጥኖ መደወያን ለማንቃት የእውቂያዎች ፍቃዱን ያብሩ።" "የጥሪ ምዝግብ ማስታወአሽዎን ለማየት የስልክ ፍቃዱን ያብሩ።" - "የእርስዎን እውቂያዎች ለማየት የእውቂያዎች ፍቃዱን ያብሩ።" "የድምፅ መልዕክትዎን ለመድረስ የስልክ ፍቃዱን ያብሩ።" "የእርስዎን እውቂያዎች ለመከታተል የእውቂያዎች ፍቃዶችን ያብሩ።" "ስልክ ለመደወል የስልክ ፍቃዱን ያብሩ።" 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 e4dfb4d9e..fe84a66ab 100644 --- a/java/com/android/dialer/app/res/values-ar/strings.xml +++ b/java/com/android/dialer/app/res/values-ar/strings.xml @@ -84,11 +84,16 @@ "إضافة انتظار" "الإعدادات" "المحاكي" + "إنشاء اختصار للواجهة الجديدة" "جميع جهات الاتصال" "استخدام لوحة مفاتيح نغمات باللمس" "عودة إلى المكالمة الجارية" "إضافة مكالمة" "المكالمات الواردة" + "يتم الدخول إلى وضع الإجراء المجمَّع" + "تمت مغادرة وضع الإجراء المجمَّع" + "تم تحديد %1$s" + "تم إلغاء تحديد %1$s" "تشغيل البريد الصوتي" "عرض جهة الاتصال %1$s" "الاتصال بـ %1$s" @@ -103,11 +108,19 @@ "البريد الصوتي" "%s ثانية" "%s دقيقة %s ثانية" - "البريد الصوتي" - "رسائل البريد الصوتي" - "نعم" - "لا" + "إلغاء وضع الإجراءات المجمَّع" + "حذف" + "إلغاء" "حذف رسائل %1$s المحددة؟" + "تم تحديد %1$s" + + ""حذف رسائل البريد الصوتي هذه؟ "" + ""حذف رسالتي البريد الصوتي هاتين؟ "" + ""حذف رسائل البريد الصوتي هذه؟ "" + ""حذف رسائل البريد الصوتي هذه؟ "" + ""حذف رسائل البريد الصوتي هذه؟ "" + ""حذف رسالة البريد الصوتي هذه؟ "" + @string/call_log_header_today "%1$s في %2$s" "%1$02d:%2$02d" @@ -120,7 +133,6 @@ "MEID" "‏جارٍ التحميل من شريحة SIM…" "‏شريحة SIM وجهات الاتصال" - "لا يتوفر تطبيق لجهات الاتصال" "البحث الصوتي غير متاح" "يتعذر إجراء مكالمة هاتفية نظرًا لأنه تم تعطيل تطبيق الهاتف." "البحث في جهات الاتصال" @@ -149,10 +161,9 @@ "%s من المكالمات الجديدة الفائتة" "لم تتم إضافة أية جهة اتصال إلى قائمة الاتصال السريع حتى الآن" "إضافة مفضلة" - "ليست لديك أية جهات اتصال حتى الآن" - "إضافة جهة اتصال" "المس الصورة للاطلاع على جميع الأرقام أو المس مع الاستمرار لإعادة الترتيب" "إزالة" + "تحديد الكل" "مكالمة فيديو" "إرسال رسالة" "تفاصيل المكالمة" @@ -221,11 +232,9 @@ "الأرقام المحظورة" "تم حظر %1$s." "حسابات الاتصال" - "تشغيل" "تعيين الأذونات" "لتمكين الاتصال السريع، شغِّل إذن جهات الاتصال." "للاطلاع على سجل المكالمات، شغِّل إذن الهاتف." - "للاطلاع على جهات الاتصال، شغِّل إذن جهات الاتصال." "للوصول إلى البريد الصوتي، شغِّل إذن الهاتف." "للبحث عن جهات الاتصال، عليك تشغيل أذونات جهات الاتصال." "لإجراء مكالمة، شغِّل إذن الهاتف." 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 62bc117ba..f2b0cf35d 100644 --- a/java/com/android/dialer/app/res/values-az/strings.xml +++ b/java/com/android/dialer/app/res/values-az/strings.xml @@ -80,11 +80,16 @@ "Gözləmə əlavə edin" "Ayarlar" "Stimulyator" + "Yeni İİ Qısayolu yaradın" "Bütün kontaktlar" "Toxunma ton klaviaturasını istifadə edin" "Davam edən zəngə qayıdın" "Zəng əlavə edin" "Gələn zənglər" + "Toplu əməliyyat rejiminə daxil olunur" + "Toplu əməliyyat rejimi tərk edilir" + "%1$s seçildi" + "%1$s seçilmədi" "Səsli məktubu oxudun" "%1$s adlı kontakta baxın" "Zəng %1$s" @@ -99,11 +104,15 @@ "Səsli poçt" "%s san" "%s dəq %s san" - "səsli e-məktub" - "səsli e-məktublar" - "Bəli" - "Xeyr" + "Qrup əməliyyatları rejimini ləğv edin" + "Silin" + "Ləğv edin" "Seçilmiş %1$s silinsin?" + "%1$s seçilib" + + ""Bu səsli e-məktub silinsin? "" + ""Bu səsli e-məktub silinsin? "" + @string/call_log_header_today "%1$s tarixində %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "SIM kartdan yüklənir..." "SIM kart kontaktları" - "Əlaqələr proqramı mövcud deyil" "Səsli axtarış mövcud deyil" "Telefon tətbiqi deaktiv edildiyinə görə telefon zəngi etmək mümkün deyil." "Kontakt axtarın" @@ -145,10 +153,9 @@ "%s yeni buraxılmış zəng" "Hələ sürətli zəng siyahınızda hec kim yoxdur" "Sevimlilərə əlavə edin" - "Hələ heç bir kontaktınız yoxdur" - "Kontakt əlavə edin" "Bütün nömrələri görmək üçün təsvirə toxunun və ya yenidən qaydaya salmaq üçün basıb saxlayın" "Yığışdır" + "Hamısını seçin" "Video zəng" "Mesaj göndərin" "Zəng detalları" @@ -213,11 +220,9 @@ "Bloklanmış nömrələr" "%1$s artıq bloklanıb." "Hesabların çağrılması" - "Aktiv edin" "İcazələri quraşdırın" "Sürətli yığımı aktivləşdirmək üçün, Kontakt icazələrini aktivləşdirin." "Çağrı jurnalınızı görmək üçün Telefon icazəsini aktivləşdirin." - "Kontaktlarınızı görmək üçün Kontakt icazəsini aktivləşdirin." "Səsli poçta daxil olmaq üçün, Telefon icazəsini aktivləşdirin." "Kontaktlarınızı axtarmaq üçün, Kontakt icazələrini aktiv edin." "Zəng etmək üçün, Telefon icazəsini aktivləşdirin." 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 index 9df729108..b011f7866 100644 --- 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 @@ -81,11 +81,16 @@ "Dodaj čekanje" "Podešavanja" "Simulator" + "Napravite prečicu za novi UI" "Svi kontakti" "Upotrebite brojčanik za tonsko biranje" "Vrati se na poziv koji je u toku" "Dodaj poziv" "Dolazni pozivi" + "Ulazite u režim grupnih radnji" + "Izašli ste iz režima grupnih radnji" + "Izabrano je %1$s" + "Opozvan je izbor %1$s" "Puštanje govorne pošte" "Prikaži kontakt %1$s" "Pozovi %1$s" @@ -100,11 +105,16 @@ "Govorna pošta" "%s sek" "%s min %s sek" - "govornu poruku" - "govorne poruke" - "Da" - "Ne" + "Otkažite režim grupnih radnji" + "Izbriši" + "Otkaži" "Želite li da izbrišete izabranu(e) %1$s?" + "Izabranih: %1$s" + + ""Želite li da izbrišete ove govorne poruke? "" + ""Želite li da izbrišete ove govorne poruke? "" + ""Želite li da izbrišete ove govorne poruke? "" + @string/call_log_header_today "%1$s u %2$s" "%1$02d:%2$02d" @@ -117,7 +127,6 @@ "MEID" "Učitava se sa SIM kartice…" "Kontakti na SIM kartici" - "Nema dostupne aplikacije za kontakte" "Glasovna pretraga nije dostupna" "Nije moguće uputiti telefonski poziv jer je aplikacija Telefon onemogućena." "Pretraži kontakte" @@ -146,10 +155,9 @@ "Novih propuštenih poziva: %s" "Nemate nijedan kontakt na brzom biranju" "Dodaj omiljen kontakt" - "Još uvek nemate nijedan kontakt" - "Dodaj kontakt" "Dodirnite sliku da biste videli sve brojeve ili dodirnite i zadržite da biste im promenili raspored" "Ukloni" + "Izaberi sve" "Video poziv" "Pošalji poruku" "Detalji poziva" @@ -215,11 +223,9 @@ "Blokirani brojevi" "%1$s je već blokiran." "Nalozi za pozivanje" - "Uključi" "Podesi dozvole" "Da biste omogućili brzo biranje, uključite dozvolu za Kontakte." "Da biste videli evidenciju poziva, uključite dozvolu za Telefon." - "Da biste videli kontakte, uključite dozvolu za Kontakte." "Da biste pristupili govornoj pošti, uključite dozvolu za Telefon." "Da biste pretražili kontakte, uključite dozvole za Kontakte." "Da biste uputili poziv, uključite dozvolu za Telefon." 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 aac3df2bd..f9b083747 100644 --- a/java/com/android/dialer/app/res/values-be/strings.xml +++ b/java/com/android/dialer/app/res/values-be/strings.xml @@ -82,11 +82,16 @@ "Дадаць чаканне" "Налады" "Сродак мадэліравання" + "Ярлык новага карыст. інтэрфейсу" "Усе кантакты" "Выкарыстанне тонавай клавіятуры" "Звярнуцца да бягучага выкліку" "Дадаць выклік" "Уваходныя выклікі" + "Уваход у рэжым групавога дзеяння" + "Выхад з рэжыму групавога дзеяння" + "Выбрана: %1$s" + "Выбар скасаваны: %1$s" "Прайграць паведамленне галасавой пошты" "Прагледзець кантакт %1$s" "Выклікаць карыстальнiка %1$s" @@ -101,11 +106,17 @@ "Галасавая пошта" "%s с" "%s хв %s с" - "галасавая пошта" - "галасавая пошта" - "Так" - "Не" + "Скасаваць рэжым пакетных дзеянняў" + "Выдаліць" + "Скасаваць" "Выдаліць вылучанае: %1$s?" + "Выбрана: %1$s" + + ""Выдаліць гэтыя паведамленні галасавой пошты? "" + ""Выдаліць гэтыя паведамленні галасавой пошты? "" + ""Выдаліць гэтыя паведамленні галасавой пошты? "" + ""Выдаліць гэтыя паведамленні галасавой пошты? "" + @string/call_log_header_today "%1$s у %2$s" "%1$02d:%2$02d" @@ -118,7 +129,6 @@ "MEID" "Загрузка з SIM-карты..." "Кантакты SIM-карты" - "Праграмы для аперацый з кантактамі няма" "Галасавы пошук недаступны" "Немагчыма зрабіць выклік па тэлефоне, таму што праграма Тэлефон была адключана." "Пошук кантактаў" @@ -147,10 +157,9 @@ "Новых прапушчаных выклікаў: %s" "У вас пакуль нікога няма на хуткім наборы" "Дадаць улюбёны" - "У вас пакуль няма ніякіх кантактаў" - "Дадаць кантакт" "Дакраніцеся да відарыса, каб прагледзець усе нумары, або дакраніцеся і ўтрымлівайце, каб змяніць парадак" "Выдаліць" + "Выбраць усё" "Відэавыклік" "Адправiць паведамленне" "Падрабязнасці выкліку" @@ -217,11 +226,9 @@ "Заблакіраваныя нумары" "%1$s ужо заблакіраваны." "Уліковыя запісы для выклікаў" - "Уключыць" "Задаць дазволы" "Каб уключыць хуткі набор, уключыце дазвол для Кантактаў." "Каб прагледзець свой журнал выклікаў, уключыце дазволы Тэлефона." - "Каб бачыць свае кантакты, уключыце дазвол для Кантактаў." "Каб атрымаць доступ да галасавой пошты, уключыце дазвол для Тэлефона." "Каб шукаць свае кантакты, уключыце дазвол для Кантактаў." "Каб зрабіць выклік, уключыце дазвол для Тэлефона." 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 7bab71f3b..8b1105cb3 100644 --- a/java/com/android/dialer/app/res/values-bg/strings.xml +++ b/java/com/android/dialer/app/res/values-bg/strings.xml @@ -80,11 +80,16 @@ "Добавяне на изчакване" "Настройки" "Симулатор" + "Пряк път към новия ПИ" "Всички контакти" "Използване на тонова клавиатура" "Назад към текущото обаждане" "Добавяне на обаждане" "Вх. обаждания" + "Влизате в режима на групови действия" + "Излязохте от режима на групови действия" + "Избрахте %1$s" + "Премахнахте избора от %1$s" "Пускане на гласовата поща" "Преглед на контактa %1$s" "Обаждане на %1$s" @@ -99,11 +104,15 @@ "Гласова поща" "%s сек" "%s мин %s сек" - "гласово съобщение" - "гласови съобщения" - "Да" - "Не" + "Анулиране на режима на групови действия" + "Изтриване" + "Отказ" "Избрахте %1$s – да се изтрие ли избраното?" + "Избрахте %1$s" + + ""Да се изтрият ли тези гласови съобщения? "" + ""Да се изтрие ли това гласово съобщение? "" + @string/call_log_header_today "%1$s в %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Зарежда се от SIM карта..." "Контакти от SIM карта" - "Няма налично приложение за контакти" "Гласовото търсене не е налице" "Не може да се осъществи телефонно обаждане, защото приложението Телефон е деактивирано." "Търсене в контактите" @@ -145,10 +153,9 @@ "%s нови пропуснати обаждания" "Още нямате контакти за бързо набиране" "Добавяне на любим контакт" - "Още нямате контакти" - "Добавяне на контакт" "Докоснете изображението, за да видите всички номера, или го натиснете и задръжте за пренареждане" "Премахване" + "Избиране на всички" "Видеообаждане" "Изпращане на съобщение" "Подробности за обаждането" @@ -213,11 +220,9 @@ "Блокирани номера" "Номер %1$s вече е блокиран." "Профили за обаждане" - "Включване" "Задаване на разрешенията" "За да активирате бързото набиране, включете разрешението за Контакти." "За да видите списъка с обажданията си, включете разрешението за Телефон." - "За да видите контактите си, включете разрешението за Контакти." "За да осъществите достъп до гласовата си поща, включете разрешението за Телефон." "За да търсите в контактите си, включете разрешенията за тях." "За да извършите обаждане, включете разрешението за Телефон." 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 271247be3..2ec362685 100644 --- a/java/com/android/dialer/app/res/values-bn/strings.xml +++ b/java/com/android/dialer/app/res/values-bn/strings.xml @@ -80,11 +80,16 @@ "অপেক্ষা যোগ করুন" "সেটিংস" "সিমুলেটার" + "নতুন UI শর্টকাট তৈরি করুন" "সকল পরিচিতি" "স্পর্শ স্বর কীপ্যাড ব্যবহার করুন" "প্রগতিতে থাকা কলে প্রত্যাবর্তন" "কল যোগ করুন" "ইনকামিং কলগুলি" + "বাল্ক অ্যাকশন মোডে প্রবেশ করা হচ্ছে" + "বাল্ক অ্যাকশন মোড ত্যাগ করুন" + "%1$s নির্বাচন করা হয়েছে" + "%1$s অনির্বাচন করা হয়েছে" "ভয়েসমেল প্লে করুন" "%1$s পরিচিতি দেখুন" "%1$s কে কল করুন" @@ -99,11 +104,15 @@ "ভয়েসমেল" "%s সেকেন্ড" "%s মিনিট %s সেকেন্ড" - "ভয়েসমেল" - "ভয়েসমেলগুলি" - "হ্যাঁ" - "না" + "ব্যাচ অ্যাকশন মোড বাতিল করুন" + "মুছুন" + "বাতিল করুন" "নির্বাচিত %1$s মুছে ফেলতে চান?" + "%1$sটি নির্বাচিত" + + ""এই ভয়েসমেলগুলি মুছবেন? "" + ""এই ভয়েসমেলগুলি মুছবেন? "" + @string/call_log_header_today "%1$s তারিখে %2$s\'টায়" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "সিম কার্ড থেকে লোড করা হচ্ছে…" "সিম কার্ডের পরিচিতিগুলি" - "কোনো পরিচিতি অ্যাপ্লিকেশান উপলব্ধ নয়" "ভয়েস অনুসন্ধান অনুপলব্ধ" "কোনো ফোন কল করা যাবে না কারণ ফোন অ্যাপ্লিকেশানটি অক্ষম করা হয়েছে৷" "পরিচিতিগুলি খুঁজুন" @@ -145,10 +153,9 @@ "%sটি নতুন মিসড কল" "আপনার স্পীড ডায়ালে এখনও পর্যন্ত কেউ নেই" "একটি পছন্দসই যোগ করুন" - "আপনার এখনও পর্যন্ত কোনো পরিচিতি নেই" - "একটি পরিচিতি যোগ করুন" "সমস্ত নম্বর দেখতে ছবিতে স্পর্শ করুন বা রেকর্ড করতে স্পর্শ করে ধরে রাখুন" "সরান" + "সবগুলি নির্বাচন করুন" "ভিডিও কল" "একটি বার্তা পাঠান" "কলের বিশদ বিবরণ" @@ -213,11 +220,9 @@ "ব্লক করা নাম্বারগুলি" "%1$s ইতিমধ্যেই অববোধ করা রয়েছে৷" "কলিং অ্যাকাউন্টগুলি" - "চালু করুন" "অনুমতিগুলি সেট করুন" "স্পীড ডায়াল সক্ষম করতে, পরিচিতিগুলির অনুমতি চালু করুন।" "আপনার কল লগ দেখতে, ফোনের অনুমতি চালু করুন।" - "আপনার পরিচিতিগুলি দেখতে, পরিচিতিগুলির অনুমতি চালু করুন।" "আপনার ভয়েসমেল অ্যাক্সেস করতে, ফোনের অনুমতি চালু করুন।" "আপনার পরিচিতিগুলি অনুসন্ধান করতে, পরিচিতির অনুমতিগুলি চালু করুন।" "একটি কল করতে, ফোনের অনুমতি চালু করুন।" 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 92c9c14e0..087db1274 100644 --- a/java/com/android/dialer/app/res/values-bs/strings.xml +++ b/java/com/android/dialer/app/res/values-bs/strings.xml @@ -81,11 +81,16 @@ "Dodaj čekanje" "Postavke" "Simulator" + "Kreiraj prečicu za novi UI" "Svi kontakti" "Koristi tastaturu za tonsko biranje" "Povratak na poziv u toku" "Dodaj poziv" "Dolazni pozivi" + "Ulazak u način rada za skupnu radnju" + "Napuštanje načina rada za skupnu radnju" + "Odabrano %1$s" + "Poništen odabir %1$s" "Pokretanje govorne pošte" "Prikaži kontakt %1$s" "Pozovi kontakt %1$s" @@ -100,11 +105,16 @@ "Govorna pošta" "%s sek." "%s min. %s sek." - "poruka govorne pošte" - "poruke govorne pošte" - "Da" - "Ne" + "Otkaži način rada za grupnu radnju" + "Izbriši" + "Otkaži" "Izbrisati izabranu/e %1$s?" + "Odabrano %1$s" + + ""Izbrisati ove govorne poruke? "" + ""Izbrisati ove govorne poruke? "" + ""Izbrisati ove govorne poruke? "" + @string/call_log_header_today "%1$s u %2$s" "%1$02d:%2$02d" @@ -117,7 +127,6 @@ "MEID" "Učitavanje sa SIM kartice…" "Kontakti sa SIM kartice" - "Nije dostupna nijedna aplikacija za kontakte" "Glasovna pretraga nije dostupna" "Nije moguće uputiti poziv jer je aplikacija Telefon onemogućena." "Traži kontakte" @@ -146,10 +155,9 @@ "Broj novih propuštenih poziva: %s" "Nemate nikog na brzom biranju" "Dodaj u favorite" - "Još nemate nijedan kontakt" - "Dodaj kontakt" "Dodirnite sliku da vidite sve brojeve ili dodirnite i držite da promijenite raspored." "Ukloni" + "Izaberi sve" "Videopoziv" "Pošalji poruku" "Detalji o pozivu" @@ -215,11 +223,9 @@ "Blokirani brojevi" "%1$s je već blokiran." "Računi za pozivanje" - "Uključi" "Postavi dozvole" "Da omogućite brzo biranje, uključite dozvolu za Kontakte." "Da vidite popis poziva, uključite dozvolu za Telefon." - "Da vidite kontakte, uključite dozvolu za Kontakte." "Da pristupite govornoj pošti,uključite dozvolu za telefon." "Da pretražujete kontakte, uključite dozvole za Kontakte." "Da uputite poziv, uključite dozvolu za Telefon." 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 fa04dd980..71385805a 100644 --- a/java/com/android/dialer/app/res/values-ca/strings.xml +++ b/java/com/android/dialer/app/res/values-ca/strings.xml @@ -80,11 +80,16 @@ "Afegeix espera" "Configuració" "Simulador" + "Crea drecera per a la nova IU" "Tots els contactes" "Utilitza el teclat de tons" "Torna a la trucada en curs" "Afegeix una trucada" "Trucades entrants" + "S\'està accedint al mode d\'acció massiva" + "S\'ha sortit del mode d\'acció massiva" + "S\'ha seleccionat %1$s" + "S\'ha desseleccionat %1$s" "Reprodueix el missatge de veu" "Visualitza el contacte %1$s" "Truca a %1$s" @@ -99,24 +104,27 @@ "Bústia de veu" "%s s" "%s min %s s" - "missatge de veu" - "missatges de veu" - "Sí" - "No" + "Cancel·la el mode d\'accions en lot" + "Suprimeix" + "Cancel·la" "Vols suprimir l\'element o elements seleccionats (%1$s)?" + "%1$s seleccionades" + + ""Vols suprimir aquests missatges de veu? "" + ""Vols suprimir aquest missatge de veu? "" + @string/call_log_header_today "%1$s a les %2$s" "%1$02d:%2$02d" "%1$s%2$s" "No es pot trucar a aquest número." - "Per configurar els missatges de veu, vés a Menú > Configuració." + "Per configurar els missatges de veu, ves a Menú > Configuració." "Per trucar a la bústia de veu, primer has de desactivar el mode d\'avió." "S\'està carregant…" "IMEI" "MEID" "S\'està carregant des de la targeta SIM..." "Contactes de la targeta SIM" - "No hi ha cap contacte disponible." "La cerca per veu no està disponible." "No es pot fer una trucada telefònica perquè s\'ha desactivat l\'aplicació de telèfon." "Cerca als contactes" @@ -145,10 +153,9 @@ "%s trucades perdudes noves" "Encara no tens cap contacte al marcatge ràpid" "Afegeix un preferit" - "Encara no tens cap contacte" - "Afegeix un contacte" "Toca la imatge per veure\'n tots els números o bé mantén-la premuda per canviar-ne l\'ordre" "Suprimeix" + "Selecciona-ho tot" "Videotrucada" "Envia un missatge" "Detalls de la trucada" @@ -213,11 +220,9 @@ "Números bloquejats" "%1$s ja està bloquejat." "Comptes de trucades" - "Activa" "Defineix els permisos" "Activa el permís Contactes per activar el marcatge ràpid." "Activa el permís Telèfon per veure el teu registre de trucades." - "Activa el permís Contactes per veure els teus contactes." "Activa el permís Telèfon per accedir a la bústia de veu." "Per cercar els teus contactes, activa els permisos de Contactes." "Activa el permís Telèfon per fer una trucada." @@ -227,7 +232,7 @@ "Bloqueja el número" "No és una trucada brossa" "Desbloqueja el número" - "Contingut brossa" + "Trucada brossa" "%1$s no té connexió i no s\'hi pot contactar" "Informació" 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 5a3e42913..dbff467c0 100644 --- a/java/com/android/dialer/app/res/values-cs/strings.xml +++ b/java/com/android/dialer/app/res/values-cs/strings.xml @@ -82,11 +82,16 @@ "Přidat čekání" "Nastavení" "Simulátor" + "Vytv. zkratku na nové rozhraní" "Všechny kontakty" "Použít dotykovou tónovou klávesnici" "Návrat k probíhajícímu hovoru" "Přidat hovor" "Příchozí volání" + "Vstupování do režimu hromadných akcí" + "Opustili jste režim hromadných akcí" + "Položka %1$s je vybrána" + "Položka %1$s není vybrána" "Přehrát hlasovou schránku" "Zobrazit kontakt %1$s" "Volat kontakt %1$s" @@ -101,11 +106,17 @@ "Hlasová schránka" "%s s" "%s min %s s" - "vybranou hlasovou zprávu" - "vybrané hlasové zprávy" - "Ano" - "Ne" + "Zrušit režim hromadných akcí" + "Smazat" + "Zrušit" "Smazat %1$s?" + "Vybráno: %1$s" + + ""Smazat tyto hlasové zprávy? "" + ""Smazat tyto hlasové zprávy? "" + ""Smazat tyto hlasové zprávy? "" + ""Smazat tuto hlasovou zprávu? "" + @string/call_log_header_today "%1$s%2$s" "%1$02d:%2$02d" @@ -118,7 +129,6 @@ "MEID" "Načítání ze SIM karty..." "Kontakty na SIM kartě" - "Není k dispozici žádná aplikace pro práci s kontakty." "Hlasové vyhledávání není k dispozici." "Telefonický hovor nelze uskutečnit, protože aplikace Telefon byla zakázána." "Vyhledat kontakty" @@ -147,10 +157,9 @@ "Nové zmeškané hovory: %s" "V rychlém vytáčení zatím nemáte žádný kontakt." "Přidat oblíbený kontakt" - "Zatím nemáte žádné kontakty" - "Přidat kontakt" "Klepnutím na obrázek zobrazíte všechna čísla. Podržením můžete změnit pořadí." "Odstranit" + "Vybrat všechny" "Videohovor" "Odeslat zprávu" "Podrobnosti hovoru" @@ -217,11 +226,9 @@ "Blokovaná čísla" "Číslo %1$s je již blokováno." "Účty pro volání" - "Zapnout" "Nastavit oprávnění" "Chcete-li povolit rychlé vytáčení, aktivujte oprávnění Kontakty." "Chcete-li zobrazit seznam hovorů, aktivujte oprávnění Telefon." - "Chcete-li zobrazit kontakty, aktivujte oprávnění Kontakty." "Chcete-li přejít do hlasové schránky, aktivujte oprávnění Telefon." "Chcete-li vyhledat kontakty, zapněte oprávnění Kontakty." "Chcete-li uskutečnit hovor, aktivujte oprávnění Telefon." 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 42aa66378..72f5a2835 100644 --- a/java/com/android/dialer/app/res/values-da/strings.xml +++ b/java/com/android/dialer/app/res/values-da/strings.xml @@ -80,11 +80,16 @@ "Tilføj ventetid" "Indstillinger" "Simulator" + "Opret ny brugerfladegenvej" "Alle kontakter" "Brug numerisk tastatur" "Vend tilbage til igangværende opkald" "Tilføj opkald" "Indgående opkald" + "Massehandlingstilstanden startes" + "Massehandlingstilstanden blev afsluttet" + "Vælg %1$s" + "Fravalgt %1$s" "Afspil telefonsvarerbesked" "Vis kontaktpersonen %1$s" "Ring til %1$s" @@ -99,11 +104,15 @@ "Telefonsvarer" "%s sek." "%s min. %s sek." - "talebesked" - "talebeskeder" - "Ja" - "Nej" + "Annuller massehandlingstilstand" + "Slet" + "Annuller" "Vil du slette de valgte %1$s?" + "%1$s er valgt" + + ""Vil du slette denne talebesked? "" + ""Vil du slette disse talebeskeder? "" + @string/call_log_header_today "%1$s kl. %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Indlæser fra SIM-kort ..." "Kontakter på SIM-kort" - "Der er ingen app til kontaktpersoner" "Talesøgning er ikke tilgængelig" "Det er ikke muligt at foretage et telefonopkald, fordi applikationen Telefon er deaktiveret." "Søg i kontakter" @@ -145,10 +153,9 @@ "%s nye ubesvarede opkald" "Der er endnu ingen kontaktpersoner i Hurtigopkald" "Angiv en kontaktperson som foretrukken" - "Du har endnu ikke nogen kontaktpersoner" - "Tilføj en kontaktperson" "Tryk på billedet for at se alle numre, eller tryk og hold nede på billedet for at omarrangere" "Fjern" + "Vælg alt" "Videoopkald" "Send en sms-besked" "Opkaldsinfo" @@ -213,11 +220,9 @@ "Blokerede telefonnumre" "%1$s er allerede blokeret." "Opkaldskonti" - "Aktivér" "Angiv tilladelser" "Slå tilladelsen Kontaktpersoner til for at aktivere hurtigopkald." "Slå tilladelsen Telefon til for at se din opkaldsliste." - "Slå tilladelsen Kontaktpersoner til for at se dine kontaktpersoner." "Slå tilladelsen Telefon til for at få adgang til din telefonsvarer," "Hvis du vil søge i dine kontaktpersoner, skal du slå tilladelserne Kontaktpersoner til." "Slå tilladelsen Telefon til for at foretage et opkald." 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 5653e0f12..a7efd53a3 100644 --- a/java/com/android/dialer/app/res/values-de/strings.xml +++ b/java/com/android/dialer/app/res/values-de/strings.xml @@ -80,11 +80,16 @@ "Warten hinzufügen" "Einstellungen" "Simulator" + "Verknüpfung für neue Benutzeroberfläche erstellen" "Alle Kontakte" "Telefontastatur verwenden" "Zurück zum aktuellen Anruf" "Anruf hinzufügen" "Eingehende Anrufe" + "Es wird in den Modus für Bulk-Aktionen gewechselt" + "Der Modus für Bulk-Aktionen wurde verlassen" + "%1$s ausgewählt" + "Auswahl für %1$s aufgehoben" "Mailbox abhören" "Kontakt %1$s anzeigen" "%1$s anrufen" @@ -99,11 +104,15 @@ "Mailbox" "%s s" "%s min %s s" - "Mailboxnachricht" - "Mailboxnachrichten" - "Ja" - "Nein" + "Modus für Batch-Aktionen abbrechen" + "Löschen" + "Abbrechen" "Ausgewählte %1$s löschen?" + "%1$s ausgewählt" + + ""Diese Mailboxnachrichten löschen? "" + ""Diese Mailboxnachricht löschen? "" + @string/call_log_header_today "%1$s um %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Ladevorgang von SIM-Karte läuft..." "Kontakte auf SIM-Karte" - "Keine Kontakte-App verfügbar" "Sprachsuche nicht verfügbar" "Es kann kein Anruf getätigt werden, da die App \"Telefon\" deaktiviert wurde." "In Kontakten suchen" @@ -145,10 +153,9 @@ "%s neue entgangene Anrufe" "Du hast für noch niemanden eine Kurzwahl festgelegt" "Favoriten hinzufügen" - "Du hast noch keine Kontakte." - "Kontakt hinzufügen" "Tippe auf das Bild, um alle Nummern zu sehen, oder halte das Bild länger gedrückt, um sie neu anzuordnen" "Entfernen" + "Alle auswählen" "Videoanruf" "SMS senden" "Anrufdetails" @@ -213,11 +220,9 @@ "Blockierte Nummern" "%1$s ist bereits blockiert." "Anrufkonten" - "Aktivieren" "Berechtigungen festlegen" "Aktiviere die Berechtigung \"Kontakte\", um die Kurzwahlfunktion zu verwenden." "Aktiviere die Berechtigung \"Telefon\", um dein Anrufprotokoll abzurufen." - "Aktiviere die Berechtigung \"Kontakte\", um deine Kontakte abzurufen." "Aktiviere die Berechtigung \"Telefon\", um auf deine Mailbox zuzugreifen." "Aktiviere die Berechtigungen \"Kontakte\", um deine Kontakte zu suchen." "Aktiviere die Berechtigung \"Telefon\", um einen Anruf zu tätigen." 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 847f60a26..7080e5e50 100644 --- a/java/com/android/dialer/app/res/values-el/strings.xml +++ b/java/com/android/dialer/app/res/values-el/strings.xml @@ -80,11 +80,16 @@ "Προσθήκη αναμονής" "Ρυθμίσεις" "Προσομοιωτής" + "Δημ. νέας συντόμ. διεπαφής" "Όλες οι επαφές" "Χρησιμοποιήστε το πληκτρολόγιο αφής ηχητικών τόνων" "Επιστροφή στην κλήση που βρίσκεται σε εξέλιξη" "Προσθήκη κλήσης" "Εισερχόμενες κλήσεις" + "Εισαγωγή στη λειτουργία μαζικών ενεργειών" + "Αποχώρηση από τη λειτουργία μαζικών ενεργειών" + "Έγινε επιλογή %1$s" + "Καταργήθηκε η επιλογή %1$s" "Αναπαραγωγή μηνύματος αυτόματου τηλεφωνητή" "Προβολή επαφής %1$s" "Κλήση %1$s" @@ -99,11 +104,15 @@ "Αυτόματος τηλεφωνητής" "%s δευτερόλεπτα" "%s λεπτά %s δευτερόλεπτα" - "φωνητικού μηνύματος αυτόματου τηλεφωνητή" - "φωνητικών μηνυμάτων αυτόματου τηλεφωνητή" - "Ναι" - "Όχι" + "Ακύρωση λειτουργίας μαζικών ενεργειών" + "Διαγραφή" + "Ακύρωση" "Διαγραφή επιλεγμ. %1$s;" + "Έχουν επιλεγεί %1$s" + + ""Διαγραφή αυτών των μηνυμάτων αυτόματου τηλεφωνητή; "" + ""Διαγραφή αυτού του μηνύματος αυτόματου τηλεφωνητή; "" + @string/call_log_header_today "%1$s στις %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Φόρτωση από κάρτα SIM…" "Επαφές στην κάρτα SIM" - "Δεν υπάρχουν διαθέσιμες εφαρμογές επαφών" "Η φωνητική αναζήτηση δεν είναι διαθέσιμη" "Δεν είναι δυνατή η πραγματοποίηση τηλεφωνικής κλήσης επειδή η εφαρμογή \"Τηλέφωνο\" έχει απενεργοποιηθεί." "Αναζήτηση επαφών" @@ -145,10 +153,9 @@ "%s νέες αναπάντητες κλήσεις" "Δεν έχετε ορίσει ακόμη κάποια επαφή στις ταχείες κλήσεις" "Προσθέστε ένα αγαπημένο" - "Δεν έχετε επαφές ακόμη" - "Προσθήκη επαφής" "Αγγίξτε την εικόνα για να δείτε όλους τους αριθμούς ή αγγίξτε παρατεταμένα για αναδιάταξη" "Κατάργηση" + "Επιλογή όλων" "Βιντεοκλήση" "Αποστολή μηνύματος" "Λεπτομέρειες κλήσης" @@ -213,11 +220,9 @@ "Αποκλεισμένοι αριθμοί" "Ο αριθμός %1$s αποκλείστηκε ήδη." "Λογαριασμοί κλήσης" - "Ενεργοποίηση" "Ορισμός αδειών" "Για να ενεργοποιήσετε την ταχεία κλήση, ενεργοποιήστε την άδεια επαφών." "Για να δείτε το αρχείο καταγραφής κλήσεών σας, ενεργοποιήστε την άδεια τηλεφώνου." - "Για να δείτε τις επαφές σας, ενεργοποιήστε την άδεια επαφών." "Για να αποκτήσετε πρόσβαση στον τηλεφωνητή σας, ενεργοποιήστε την άδεια τηλεφώνου." "Για να κάνετε αναζήτηση στις επαφές σας, ενεργοποιήστε τις άδειες \"Επαφές\"." "Για να πραγματοποιήσετε μια κλήση, ενεργοποιήστε την άδεια τηλεφώνου." 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 28eea8b4d..999f7dab0 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 @@ -80,11 +80,16 @@ "Add wait" "Settings" "Simulator" + "Create new UI shortcut" "All contacts" "Use touch tone keypad" "Return to call in progress" "Add call" "Incoming calls" + "Entering bulk action mode" + "Left bulk action mode" + "Selected %1$s" + "Unselected %1$s" "Play voicemail" "View contact %1$s" "Call %1$s" @@ -99,11 +104,15 @@ "Voicemail" "%s sec" "%s min %s sec" - "voicemail" - "voicemails" - "Yes" - "No" + "Cancel batch actions mode" + "Delete" + "Cancel" "Delete selected %1$s?" + "%1$s selected" + + ""Delete these voicemails? "" + ""Delete this voicemail? "" + @string/call_log_header_today "%1$s at %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Loading from SIM card…" "SIM card contacts" - "No contacts app available" "Voice search not available" "Cannot make a phone call because the Phone application has been disabled." "Search contacts" @@ -145,10 +153,9 @@ "%s new missed calls" "No one is on your speed dial yet" "Add a favourite" - "You don\'t have any contacts yet" - "Add a contact" "Touch image to see all numbers, or touch & hold to re-arrange" "Remove" + "Select all" "Video call" "Send a message" "Call details" @@ -213,11 +220,9 @@ "Blocked numbers" "%1$s is already blocked." "Calling accounts" - "Turn on" "Set permissions" "To enable speed dial, turn on the Contacts permission." "To see your call log, turn on the Phone permission." - "To see your contacts, turn on the Contacts permission." "To access your voicemail, turn on the Phone permission." "To search your contacts, turn on the Contacts permissions." "To place a call, turn on the Phone permission." 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 28eea8b4d..999f7dab0 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 @@ -80,11 +80,16 @@ "Add wait" "Settings" "Simulator" + "Create new UI shortcut" "All contacts" "Use touch tone keypad" "Return to call in progress" "Add call" "Incoming calls" + "Entering bulk action mode" + "Left bulk action mode" + "Selected %1$s" + "Unselected %1$s" "Play voicemail" "View contact %1$s" "Call %1$s" @@ -99,11 +104,15 @@ "Voicemail" "%s sec" "%s min %s sec" - "voicemail" - "voicemails" - "Yes" - "No" + "Cancel batch actions mode" + "Delete" + "Cancel" "Delete selected %1$s?" + "%1$s selected" + + ""Delete these voicemails? "" + ""Delete this voicemail? "" + @string/call_log_header_today "%1$s at %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Loading from SIM card…" "SIM card contacts" - "No contacts app available" "Voice search not available" "Cannot make a phone call because the Phone application has been disabled." "Search contacts" @@ -145,10 +153,9 @@ "%s new missed calls" "No one is on your speed dial yet" "Add a favourite" - "You don\'t have any contacts yet" - "Add a contact" "Touch image to see all numbers, or touch & hold to re-arrange" "Remove" + "Select all" "Video call" "Send a message" "Call details" @@ -213,11 +220,9 @@ "Blocked numbers" "%1$s is already blocked." "Calling accounts" - "Turn on" "Set permissions" "To enable speed dial, turn on the Contacts permission." "To see your call log, turn on the Phone permission." - "To see your contacts, turn on the Contacts permission." "To access your voicemail, turn on the Phone permission." "To search your contacts, turn on the Contacts permissions." "To place a call, turn on the Phone permission." 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 28eea8b4d..999f7dab0 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 @@ -80,11 +80,16 @@ "Add wait" "Settings" "Simulator" + "Create new UI shortcut" "All contacts" "Use touch tone keypad" "Return to call in progress" "Add call" "Incoming calls" + "Entering bulk action mode" + "Left bulk action mode" + "Selected %1$s" + "Unselected %1$s" "Play voicemail" "View contact %1$s" "Call %1$s" @@ -99,11 +104,15 @@ "Voicemail" "%s sec" "%s min %s sec" - "voicemail" - "voicemails" - "Yes" - "No" + "Cancel batch actions mode" + "Delete" + "Cancel" "Delete selected %1$s?" + "%1$s selected" + + ""Delete these voicemails? "" + ""Delete this voicemail? "" + @string/call_log_header_today "%1$s at %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Loading from SIM card…" "SIM card contacts" - "No contacts app available" "Voice search not available" "Cannot make a phone call because the Phone application has been disabled." "Search contacts" @@ -145,10 +153,9 @@ "%s new missed calls" "No one is on your speed dial yet" "Add a favourite" - "You don\'t have any contacts yet" - "Add a contact" "Touch image to see all numbers, or touch & hold to re-arrange" "Remove" + "Select all" "Video call" "Send a message" "Call details" @@ -213,11 +220,9 @@ "Blocked numbers" "%1$s is already blocked." "Calling accounts" - "Turn on" "Set permissions" "To enable speed dial, turn on the Contacts permission." "To see your call log, turn on the Phone permission." - "To see your contacts, turn on the Contacts permission." "To access your voicemail, turn on the Phone permission." "To search your contacts, turn on the Contacts permissions." "To place a call, turn on the Phone permission." 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 9d80bc9e2..701d74ebc 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 @@ -80,11 +80,16 @@ "Agregar espera" "Configuración" "Simulador" + "Crear acceso a la nueva IU" "Todos los contactos" "Usar teclado numérico" "Regresar a la llamada en curso" "Agregar llamada" "Llamadas entrantes" + "Entrando al modo de acción masiva" + "Saliendo del modo de acción masiva" + "Se seleccionó %1$s" + "Se anuló la selección de %1$s" "Reproducir mensaje de voz" "Ver contacto %1$s" "Llamar a %1$s" @@ -99,11 +104,15 @@ "Correo de voz" "%s s" "%s min %s s" - "el mensaje de voz" - "los mensajes de voz" - "Sí" - "No" + "Cancelar el modo de acción masiva" + "Borrar" + "Cancelar" "¿Deseas borrar %1$s que seleccionaste?" + "%1$s seleccionada(s)" + + ""¿Deseas borrar estos mensajes de voz? "" + ""¿Deseas borrar este mensaje de voz? "" + @string/call_log_header_today "El %1$s a la hora %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Cargando desde tarjeta SIM..." "Contactos de tarjeta SIM" - "No hay aplicaciones de contactos disponibles." "Búsqueda por voz no disponible" "No se pueden realizar llamadas porque se inhabilitó la aplicación Teléfono." "Buscar contactos" @@ -145,10 +153,9 @@ "%s llamadas perdidas nuevas" "Aún no tienes contactos en la opción de marcado rápido" "Agregar un favorito" - "Aún no tienes contactos" - "Agregar un contacto" "Toca la imagen para ver todos los números o mantenla presionada para reorganizar" "Eliminar" + "Seleccionar todo" "Videollamada" "Enviar un mensaje" "Detalles de la llamada" @@ -213,11 +220,9 @@ "Números bloqueados" "%1$s ya está bloqueado." "Cuentas telefónicas" - "Activar" "Configurar permisos" "Para habilitar el marcado rápido, activa el permiso Contactos." "Para ver el registro de llamadas, activa el permiso Teléfono." - "Para ver los contactos, activa el permiso Contactos." "Para acceder al buzón de voz, activa el permiso Teléfono." "Para buscar contactos, activa el permiso Contactos." "Para realizar una llamada, activa el permiso Teléfono." 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 b7383d970..8cf47f554 100644 --- a/java/com/android/dialer/app/res/values-es/strings.xml +++ b/java/com/android/dialer/app/res/values-es/strings.xml @@ -80,11 +80,16 @@ "Añadir espera" "Ajustes" "Simulador" + "Crear acceso a la interfaz" "Todos los contactos" "Usar teclado táctil" "Volver a la llamada" "Añadir llamada" "Llamadas entrantes" + "Entrando en el modo de acción en bloque" + "Se ha salido del modo de acción en bloque" + "%1$s seleccionado" + "Selección de %1$s anulada" "Reproducir mensaje de voz" "Ver contacto %1$s" "Llamar a %1$s" @@ -99,11 +104,15 @@ "Buzón de voz" "%s s" "%s min y %s s" - "mensaje de voz" - "mensajes de voz" - "Sí" - "No" + "Cancelar el modo de acciones en lote" + "Eliminar" + "Cancelar" "¿Eliminar la selección de %1$s?" + "Se han seleccionado %1$s" + + ""¿Eliminar estos mensajes de voz? "" + ""¿Eliminar este mensaje de voz? "" + @string/call_log_header_today "%1$s a las %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Cargando desde tarjeta SIM…" "Contactos de tarjeta SIM" - "No hay aplicaciones de contactos disponibles" "La búsqueda por voz no está disponible" "No se puede hacer llamadas porque se ha inhabilitado la aplicación Teléfono." "Buscar contactos" @@ -145,10 +153,9 @@ "%s llamadas perdidas nuevas" "Aún no tienes contactos en la función de marcación rápida" "Añadir un favorito" - "Aún no tienes contactos" - "Añadir un contacto" "Tocar la imagen para ver todos los números o mantenerla pulsada para cambiar el orden" "Eliminar" + "Seleccionar todo" "Videollamada" "Enviar un mensaje" "Detalles de la llamada" @@ -213,11 +220,9 @@ "Números bloqueados" "%1$s ya está bloqueado." "Cuentas de llamadas" - "Activar" "Establecer permisos" "Para habilitar la marcación rápida, activa el permiso la aplicación Contactos." "Para ver el registro de llamadas, activa el permiso de la aplicación Teléfono." - "Para ver tus contactos, activa el permiso de la aplicación Contactos." "Para acceder al buzón de voz, activa el permiso de la aplicación Teléfono." "Para poder buscar tus contactos, activa los permisos de contactos." "Para hacer una llamada, activa el permiso de la aplicación Teléfono." 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 d4e4faa59..da043bf3c 100644 --- a/java/com/android/dialer/app/res/values-et/strings.xml +++ b/java/com/android/dialer/app/res/values-et/strings.xml @@ -80,11 +80,16 @@ "Lisa ootamine" "Seaded" "Simulaator" + "Loo uue kasutajaliid. otsetee" "Kõik kontaktid" "Kasuta puutetooniga klahvistikku" "Tagasi käimasolevale kõnele" "Lisa kõne" "Sissetulevad kõned" + "Sisenemine hulgitoimingute režiimi" + "Lahkumine hulgitoimingute režiimist" + "%1$s on valitud" + "%1$s on valimata" "Esita kõnepostisõnum" "Kuva kontakt %1$s" "Helista kasutajale %1$s" @@ -99,11 +104,15 @@ "Kõnepost" "%s s" "%s min %s s" - "kõnepostisõnum" - "kõnepostisõnumid" - "Jah" - "Ei" + "Mitme toimigu režiimi tühistamine" + "Kustuta" + "Tühista" "Kas kustutada valitud kõnepostisõnumid %1$s?" + "%1$s on valitud" + + ""Kas kustutada need kõnepostisõnumid? "" + ""Kas kustutada see kõnepostisõnum? "" + @string/call_log_header_today "%1$s kell %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Laadimine SIM-kaardilt ..." "SIM-kaardi kontaktid" - "Kontaktide rakendus pole saadaval" "Häälotsing ei ole saadaval" "Helistada ei saa, sest telefonirakendus on keelatud." "Otsige kontakte" @@ -145,10 +153,9 @@ "%s uus/uut vastamata kõne(t)" "Te pole veel kedagi kiirvalimisse lisanud" "Lisa lemmik" - "Teil pole veel kontakte" - "Lisa kontakt" "Puudutage kujutist kõigi numbrite nägemiseks või puudutage pikalt järjestuse muutmiseks" "Eemalda" + "Vali kõik" "Videokõne" "Saada sõnum" "Kõne üksikasjad" @@ -213,11 +220,9 @@ "Blokeeritud numbrid" "%1$s on juba blokeeritud." "Helistamiskontod" - "Lülita sisse" "Määra load" "Kiirvalimise lubamiseks lülitage sisse kontaktiluba." "Kõnelogi vaatamiseks lülitage sisse telefoniluba." - "Kontaktide vaatamiseks lülitage sisse kontaktiluba." "Kõnepostile juurdepääsemiseks lülitage sisse telefoniluba." "Kontaktide otsimiseks lülitage sisse kontaktiload." "Helistamiseks lülitage sisse telefoniluba." 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 95f4621a4..071c6f3f0 100644 --- a/java/com/android/dialer/app/res/values-eu/strings.xml +++ b/java/com/android/dialer/app/res/values-eu/strings.xml @@ -80,11 +80,16 @@ "Gehitu itxaronaldia" "Ezarpenak" "Simulagailua" + "Sortu interfazerako esteka" "Kontaktu guztiak" "Erabili ukipen-tonuak dituen teklatua" "Itzuli abian den deira" "Gehitu deia" "Sarrerako deiak" + "Ekintzak multzoka gauzatzeko modua aktibatzen" + "Ekintzak multzoka gauzatzeko modua desaktibatu da" + "%1$s hautatu da" + "%1$s desautatu da" "Erreproduzitu erantzungailuko ahots-mezuak" "Ikusi %1$s kontaktua" "Deitu %1$s erabiltzaileari" @@ -99,11 +104,15 @@ "Erantzungailua" "%s s" "%s min %s s" - "ahots-mezua" - "ahots-mezuak" - "Bai" - "Ez" + "Utzi bertan behera ekintzak multzoka gauzatzeko modua" + "Ezabatu" + "Utzi" "Hautatutako %1$s ezabatu?" + "%1$s hautatu dira" + + ""Ahots-mezu hauek ezabatu nahi dituzu? "" + ""Ahots-mezu hau ezabatu nahi duzu? "" + @string/call_log_header_today "%1$s (%2$s)" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "SIM txarteletik kargatzen…" "SIM txarteleko kontaktuak" - "Ez dago kontaktuen aplikaziorik erabilgarri" "Ahozko bilaketa ez dago erabilgarri" "Ezin da telefono-deirik egin Telefonoa aplikazioa desgaitu egin delako." "Bilatu kontaktuetan" @@ -145,10 +153,9 @@ "%s dei galdu berri" "Ez duzu inor markatze bizkorrean oraindik" "Gehitu gogokoak" - "Ez duzu kontakturik oraindik" - "Gehitu kontaktua" "Ukitu irudia zenbaki guztiak ikusteko, edo eduki ezazu sakatuta berrantolatzeko" "Kendu" + "Hautatu guztiak" "Bideo-deia" "Bidali mezua" "Deiaren xehetasunak" @@ -213,11 +220,9 @@ "Blokeatutako zenbakiak" "%1$s blokeatuta dago dagoeneko." "Deiak egiteko kontuak" - "Aktibatu" "Ezarri baimenak" "Markatze bizkorra gaitzeko, aktibatu Kontaktuak erabiltzeko baimena." "Deien erregistroa ikusteko, aktibatu Telefonoa erabiltzeko baimena." - "Kontaktuak ikusteko, aktibatu Kontaktuak erabiltzeko baimena." "Erantzungailuan sartzeko, aktibatu Telefonoa erabiltzeko baimena." "Kontaktuak bilatzeko, aktibatu kontaktuak atzitzeko baimenak." "Deiak egiteko, aktibatu Telefonoa erabiltzeko baimena." 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 9c8c01b64..6c588747e 100644 --- a/java/com/android/dialer/app/res/values-fa/strings.xml +++ b/java/com/android/dialer/app/res/values-fa/strings.xml @@ -80,11 +80,16 @@ "افزودن انتظار" "تنظیمات" "شبیه‌ساز" + "ایجاد میان‌بر رابط کاربری جدید" "همه مخاطبین" "استفاده از صفحه‌کلید لمسی" "برگشت به تماس درحال انجام" "افزودن تماس" "تماس‌های ورودی" + "درحال ورود به حالت اقدام انبوه" + "خروج از حالت اقدام انبوه" + "%1$s انتخاب شد" + "%1$s از حالت انتخاب خارج شد" "پخش پست صوتی" "مشاهده مخاطب %1$s" "تماس با %1$s" @@ -99,11 +104,15 @@ "پست صوتی" "%s ثانیه" "%s دقیقه %s ثانیه" - "پست صوتی" - "پست‌های صوتی" - "بله" - "نه" + "لغو حالت اقدام‌ دسته‌ای" + "حذف" + "لغو" "%1$s انتخاب‌شده حذف شود؟" + "%1$s مورد انتخاب شد" + + ""این پست‌های صوتی حذف شوند؟ "" + ""این پست‌های صوتی حذف شوند؟ "" + @string/call_log_header_today "%1$s ساعت %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "در حال بارگیری سیم کارت..." "مخاطبین سیم کارت" - "هیچ برنامه مخاطبی در دسترس نیست" "جستجوی گفتاری در دسترس نیست" "برقراری تماس تلفنی ممکن نیست، زیرا برنامه تلفن غیرفعال شده است." "جستجوی مخاطبین" @@ -145,10 +153,9 @@ "%s تماس‌ بی‌پاسخ جدید" "هنوز کسی در فهرست شماره‌گیری سریع شما نیست" "افزودن مورد دلخواه" - "هنوز هیچ مخاطبی ندارید" - "افزودن مخاطب" "برای مشاهده همه شماره‌ها، تصویر را لمس کنید، یا برای ترتیب مجدد، لمس کنید و نگه‌دارید" "حذف" + "انتخاب همه" "تماس ویدئویی" "ارسال پیام" "جزئیات تماس" @@ -213,11 +220,9 @@ "شماره‌های مسدود‌شده" "%1$s درحال‌حاضر مسدود شده است." "حساب‌های تماس" - "روشن کردن" "تنظیم مجوزها" "برای فعال کردن شماره‌گیری سریع، مجوز «مخاطبین» را روشن کنید." "برای دیدن گزارش تماستان، مجوز «تلفن» را روشن کنید." - "برای دیدن مخاطبینتان، مجوز «مخاطبین» را روشن کنید." "برای دسترسی به پست صوتی‌تان، مجوز «تلفن» را روشن کنید." "برای جستجوی مخاطبینتان، مجوزهای مخاطبین را روشن کنید." "برای برقراری تماس، مجوز «تلفن» را روشن کنید." 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 c5a103d48..55865d44a 100644 --- a/java/com/android/dialer/app/res/values-fi/strings.xml +++ b/java/com/android/dialer/app/res/values-fi/strings.xml @@ -80,11 +80,16 @@ "Lisää tauko" "Asetukset" "Simulaattori" + "Luo uusi UI-pikakuvake" "Kaikki yhteystiedot" "Käytä näppäimistöä" "Palaa käynnissä olevaan puheluun" "Lisää puhelu" "Saapuvat puhelut" + "Siirrytään joukkotoimintotilaan." + "Poistuttiin joukkotoimintotilasta." + "%1$s valittiin." + "%1$s ei ole enää valittuna." "Toista vastaajaviesti" "Näytä yhteystieto %1$s" "Soita: %1$s" @@ -99,11 +104,15 @@ "Vastaaja" "%s s" "%s min %s s" - "vastaajaviesti" - "vastaajaviestit" - "Kyllä" - "Ei" + "Peruuta joukkotoimintotila." + "Poista" + "Peruuta" "Poistetaanko %1$s?" + "%1$s valittu" + + ""Poistetaanko nämä vastaajaviestit? "" + ""Poistetaanko tämä vastaajaviesti? "" + @string/call_log_header_today "%1$s klo %2$s" "%1$02d.%2$02d" @@ -116,7 +125,6 @@ "MEID" "Ladataan SIM-kortilta…" "SIM-kortin yhteystiedot" - "Ei käytettävissä olevaa yhteystietosovellusta" "Puhehaku ei ole käytettävissä" "Puhelua ei voi soittaa, koska Puhelin-sovellus on poistettu käytöstä." "Hae yhteystiedoista" @@ -145,10 +153,9 @@ "%s uutta vastaamatonta puhelua" "Pikavalinnassa ei ole vielä yhtään yhteystietoa." "Lisää suosikki" - "Sinulla ei ole yhteystietoja." - "Lisää yhteystieto" "Katso kaikki numerot koskettamalla kuvaa tai järjestele tietoja koskettamalla kuvaa pitkään." "Poista" + "Valitse kaikki" "Videopuhelu" "Lähetä viesti" "Puhelun tiedot" @@ -213,11 +220,9 @@ "Estetyt numerot" "%1$s on jo estetty." "Puhelutilit" - "Ota käyttöön" "Määritä käyttöoikeudet" "Jos haluat käyttää pikavalintaa, ota Yhteystiedot-käyttöoikeus käyttöön." "Jos haluat katsella puhelulokiasi, ota Puhelin-käyttöoikeus käyttöön." - "Jos haluat katsella yhteystietojasi, ota Yhteystiedot-käyttöoikeus käyttöön." "Jos haluat käyttää puhelinvastaajaa, ota Puhelin-käyttöoikeus käyttöön." "Jos haluat hakea kontaktejasi, ota käyttöön kontaktien käyttöoikeudet." "Jos haluat soittaa puheluja, ota Puhelin-käyttöoikeus käyttöön." 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 d557d7442..f10b121d5 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 @@ -80,11 +80,16 @@ "Ajouter Attendre" "Paramètres" "Simulateur" + "Créer un raccourci vers l\'IU" "Tous les contacts" "Utiliser le clavier DTMF" "Reprendre l\'appel en cours" "Autre appel" "Appels entrants" + "Entrée du mode d\'action groupée en cours…" + "Mode d\'action groupée quitté" + "Sélection : %1$s" + "Désélection : %1$s" "Écouter le message vocal" "Afficher le contact %1$s" "Appeler %1$s" @@ -99,11 +104,15 @@ "Messagerie vocale" "%s s" "%s min et %s sec" - "message vocal" - "messages vocaux" - "Oui" - "Non" + "Annuler le mode d\'action par lots" + "Supprimer" + "Annuler" "Supprimer la sélection (%1$s)?" + "%1$s sélection(s)" + + ""Supprimer ce message vocal? "" + ""Supprimer ces messages vocaux? "" + @string/call_log_header_today "%1$s à %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Chargement depuis la carte SIM..." "Contacts de carte SIM" - "Aucune application de gestion des contacts n\'est disponible" "Recherche vocale non disponible" "Impossible d\'effectuer un appel téléphonique, car l\'application Téléphone a été désactivée." "Rechercher des contacts" @@ -145,10 +153,9 @@ "%s nouveaux appels manqués" "Aucun contact ne figure dans vos numéros de composition abrégée" "Ajouter un favori" - "Vous n\'avez pas encore de contacts" - "Ajouter un contact" "Touchez l\'image pour afficher tous les numéros, ou maintenez le doigt dessus pour les réorganiser" "Supprimer" + "Tout sélectionner" "Appel vidéo" "Envoyer un message" "Détails de l\'appel" @@ -213,11 +220,9 @@ "Numéros bloqués" "Le numéro %1$s est déjà bloqué." "Comptes d\'appel" - "Activer" "Définir les autorisations" "Pour activer la composition abrégée, activez l\'autorisation Contacts." "Pour consulter votre journal d\'appels, activez l\'autorisation Téléphone." - "Pour consulter vos contacts, activez l\'autorisation Contacts." "Pour accéder à votre messagerie vocale, activez l\'autorisation Téléphone." "Pour rechercher vos contacts et les lieux à proximité, activez les autorisations Contacts." "Pour faire un appel, activez l\'autorisation Téléphone." 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 d8a59395b..2ce930af5 100644 --- a/java/com/android/dialer/app/res/values-fr/strings.xml +++ b/java/com/android/dialer/app/res/values-fr/strings.xml @@ -80,11 +80,16 @@ "Ajouter une attente" "Paramètres" "Simulateur" + "Créer un raccourci vers la nouvelle interface" "Tous les contacts" "Utiliser le clavier DTMF" "Reprendre l\'appel en cours" "Autre appel" "Appels entrants" + "Activation du mode d\'action groupée" + "Désactivation du mode d\'action groupée" + "%1$s sélectionné" + "%1$s désélectionné" "Écouter le message vocal" "Afficher le contact %1$s" "Appeler %1$s" @@ -99,11 +104,15 @@ "Messagerie vocale" "%s secondes" "%s min et %s s" - "message vocal" - "messages vocaux" - "Oui" - "Non" + "Annuler le mode d\'actions groupées" + "Supprimer" + "Annuler" "Supprimer les messages vocaux sélectionnés (%1$s) ?" + "%1$s sélectionnés" + + ""Supprimer ce message vocal ? "" + ""Supprimer ces message vocaux ? "" + @string/call_log_header_today "%1$s à %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Chargement depuis la carte SIM..." "Contacts de carte SIM" - "Aucune application de gestion des contacts n\'est disponible." "Recherche vocale non disponible" "Impossible d\'effectuer un appel téléphonique, car l\'application Téléphone a été désactivée." "Rech. des contacts" @@ -145,10 +153,9 @@ "Nouveaux appels manqués : %s" "Aucun contact pour la numérotation abrégée" "Ajouter un favori" - "Vous n\'avez pas encore de contacts." - "Ajouter un contact" "Appuyer sur l\'image pour afficher tous les numéros, ou appuyer dessus de manière prolongée pour réorganiser ces derniers" "Supprimer" + "Tout sélectionner" "Appel vidéo" "Envoyer un message" "Informations sur l\'appel" @@ -213,11 +220,9 @@ "Numéros bloqués" "Le numéro \"%1$s\" est déjà bloqué." "Comptes téléphoniques" - "Activer" "Définir les autorisations" "Pour activer la numérotation abrégée, activez l\'autorisation Contacts." "Pour consulter votre journal d\'appels, activez l\'autorisation Téléphone." - "Pour consulter vos contacts, activez l\'autorisation Contacts." "Pour accéder à votre messagerie vocale, activez l\'autorisation Téléphone." "Pour rechercher vos contacts, activez l\'autorisation Contacts." "Pour passer un appel, activez l\'autorisation Téléphone." 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 33b55a740..b9e540750 100644 --- a/java/com/android/dialer/app/res/values-gl/strings.xml +++ b/java/com/android/dialer/app/res/values-gl/strings.xml @@ -80,11 +80,16 @@ "Engadir espera" "Configuración" "Simulador" + "Crear atallo para a nova IU" "Todos os contactos" "Usar teclado de tons táctiles" "Volver á chamada en curso" "Engadir chamada" "Chamadas entrantes" + "Entrando no modo de acción masiva" + "Saíu do modo de acción masiva" + "Seleccionouse: %1$s" + "Anulouse a selección de: %1$s" "Reproducir correo de voz" "Ver contacto %1$s" "Chamar a %1$s" @@ -99,11 +104,15 @@ "Correo de voz" "%s s" "%s min %s s" - "correo de voz" - "correos de voz" - "Si" - "Non" + "Cancela o modo de accións en lote" + "Eliminar" + "Cancelar" "Queres eliminar a selección (%1$s)?" + "Cantidade seleccionada: %1$s" + + ""Queres eliminar estes correos de voz? "" + ""Queres eliminar este correo de voz? "" + @string/call_log_header_today "%1$s ás %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Cargando da tarxeta SIM..." "Contactos da tarxeta SIM" - "Non hai aplicacións de contactos dispoñibles" "Busca por voz non dispoñible" "Non se pode facer unha chamada telefónica porque se desactivou a aplicación de teléfono." "Buscar contactos" @@ -145,10 +153,9 @@ "%s chamadas perdidas novas" "Aínda non tes ningún contacto na marcación directa" "Engade un favorito para a marcación directa" - "Aínda non tes contactos" - "Engade un contacto" "Toca a imaxe para ver todos os números ou mantena premida para reordenalos" "Eliminar" + "Seleccionar todos" "Videochamada" "Enviar unha mensaxe" "Detalles da chamada" @@ -213,11 +220,9 @@ "Números bloqueados" "O %1$s xa está bloqueado." "Contas de chamadas" - "Activar" "Establecer permisos" "Para activar a marcación rápida, activa o permiso de Contactos." "Para ver o teu rexistro de chamadas, activa o permiso de Teléfono." - "Para ver os teus contactos, activa o permiso de Contactos." "Para acceder ao correo de voz, activa o permiso de Teléfono." "Para buscar os teus contactos, activa os permisos de Contactos." "Para facer unha chamada, activa o permiso de Teléfono." 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 1df18269e..ca8749ad3 100644 --- a/java/com/android/dialer/app/res/values-gu/strings.xml +++ b/java/com/android/dialer/app/res/values-gu/strings.xml @@ -80,11 +80,16 @@ "પ્રતીક્ષા ઉમેરો" "સેટિંગ્સ" "સિમ્યુલેટર" + "નવું UI શૉર્ટકટ્સ બનાવો" "તમામ સંપર્કો" "ટચ ટોન કીપેડનો ઉપયોગ કરો" "કૉલ પર પાછા આવવું પ્રગતિ પર છે" "કૉલ ઉમેરો" "ઇનકમિંગ કૉલ્સ" + "બલ્ક ક્રિયા મોડમાં દાખલ થઈ રહ્યાં છે" + "બલ્ક ક્રિયા મોડ છોડી દીધો" + "%1$s પસંદ કર્યો" + "%1$s પસંદગીમાંથી દૂર કર્યો" "વૉઇસમેઇલ ચલાવો" "%1$s સંપર્ક જુઓ" "%1$s ને કૉલ કરો" @@ -99,11 +104,15 @@ "વૉઇસમેઇલ" "%s સેકંડ" "%s મિ %s સે" - "વૉઇસમેઇલ" - "વૉઇસમેઇલ" - "હા" - "નહીં" + "બૅચ ક્રિયા મોડ રદ કરો" + "કાઢી નાખો" + "રદ કરો" "પસંદ કરેલ %1$sને કાઢી નાખીએ?" + "%1$s પસંદ કરી" + + ""આ વૉઇસમેઇલ કાઢી નાખીએ? "" + ""આ વૉઇસમેઇલ કાઢી નાખીએ? "" + @string/call_log_header_today "%1$s નાં રોજ %2$s વાગ્યે" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "SIM કાર્ડમાંથી લોડ કરી રહ્યું છે…" "SIM કાર્ડ સંપર્કો" - "કોઈ સંપર્કો ઍપ્લિકેશન ઉપલબ્ધ નથી" "વૉઇસ શોધ ઉપલબ્ધ નથી" "ફોન કૉલ કરી શકાતો નથી કારણ કે ફોન ઍપ્લિકેશન અક્ષમ કરવામાં આવી છે." "સંપર્કો શોધો" @@ -145,10 +153,9 @@ "%s નવા છૂટેલા કૉલ્સ" "તમારા ઝડપી ડાયલ પર હજી સુધી કોઇ નથી" "એક મનપસંદ ઉમેરો" - "તમે હજી સુધી કોઇપણ સંપર્કો ધરાવતાં નથી" - "સંપર્ક ઉમેરો" "બધા નંબર્સ જોવા માટે છબી ટચ કરો અથવા પુનઃક્રમાંકિત કરવા માટે ટચ કરો અને પકડી રાખો" "દૂર કરો" + "તમામ પસંદ કરો" "વિડિઓ કૉલ" "એક સંદેશ મોકલો" "કૉલની વિગતો" @@ -213,11 +220,9 @@ "અવરોધિત નંબરો" "%1$s ને પહેલેથી અવરોધિત કરવામાં આવ્યો છે." "કૉલિંગ એકાઉન્ટ્સ" - "ચાલુ કરો" "પરવાનગીઓ સેટ કરો" "ઝડપી ડાયલ સક્ષમ કરવા માટે, સંપર્કોની પરવાનગી ચાલુ કરો." "તમારો કૉલ લૉગ જોવા માટે, ફોન પરવાનગી ચાલુ કરો." - "તમારા સંપર્કો જોવા માટે, સંપર્કોની પરવાનગી ચાલુ કરો." "તમારી વૉઇસમેઇલને ઍક્સેસ કરવા માટે, ફોન પરવાનગી ચાલુ કરો." "તમારા સંપર્કો શોધવા માટે, સંપર્કોની પરવાનગીઓ ચાલુ કરો." "કૉલ કરવા માટે, ફોન પરવાનગી ચાલુ કરો." 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 84d2d974a..3bc931921 100644 --- a/java/com/android/dialer/app/res/values-hi/strings.xml +++ b/java/com/android/dialer/app/res/values-hi/strings.xml @@ -80,11 +80,16 @@ "प्रतीक्षा का समय बढ़ाएं" "सेटिंग" "सिम्युलेटर" + "नया UI शॉर्टकट बनाएं" "सभी संपर्क" "टच टोन कीपैड का उपयोग करें" "कॉल पर लौटना प्रगति पर है" "कॉल जोड़ें" "इनकमिंग कॉल" + "बल्क कार्रवाई मोड में प्रवेश कर रहे हैं" + "बल्क कार्रवाई मोड छोड़ा" + "%1$s को चुना गया" + "%1$s को नहीं चुना गया" "ध्‍वनिमेल चलाएं" "%1$s संपर्क देखें" "%1$s को कॉल करें" @@ -99,11 +104,15 @@ "वॉयस मेल" "%s सेकंड" "%s मि. %s से." - "वॉयसमेल" - "वॉयसमेल" - "हां" - "नहीं" + "बैच कार्रवाई मोड रद्द करें" + "हटाएं" + "रद्द करें" "क्या चुने गए %1$s हटाना चाहते हैं?" + "%1$s चयनित" + + ""ये वॉइसमेल हटाएं? "" + ""ये वॉइसमेल हटाएं? "" + @string/call_log_header_today "%1$s को %2$s बजे" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "सिम कार्ड से लोड हो रहा है…" "सिम कार्ड के संपर्क" - "कोई भी संपर्क ऐप उपलब्‍ध नहीं है" "बोलकर खोजना उपलब्‍ध नहीं है" "फ़ोन कॉल नहीं किया जा सकता क्योंकि फ़ोन ऐप्लिकेशन अक्षम कर दिया गया है." "संपर्क खोजें" @@ -145,10 +153,9 @@ "%s छूटे हुए नए कॉल" "आपके स्‍पीड डायल पर अभी तक कोई भी नहीं है" "कोई पसंदीदा जोड़ें" - "आपके पास अभी कोई भी संपर्क नहीं है" - "कोई संपर्क जोड़ें" "सभी नंबर देखने के लिए चित्र को स्‍पर्श करें या पुन: क्रमित करने के लिए स्‍पर्श करके रखें" "निकालें" + "सभी चुनें" "वीडियो कॉल" "संदेश भेजें" "कॉल विवरण" @@ -213,11 +220,9 @@ "अवरोधित नंबर" "%1$s पहले से अवरोधित है." "कॉलिंग खाते" - "चालू करें" "अनुमतियां सेट करें" "स्पीड डायल सक्षम करने के लिए, संपर्क अनुमति चालू करें." "अपना कॉल लॉग देखने के लिए, फ़ोन अनुमति चालू करें." - "अपने संपर्क देखने के लिए, संपर्क अनुमति चालू करें." "अपना वॉइसमेल ऐक्सेस करने के लिए, फ़ोन अनुमति चालू करें." "अपने संपर्कों की खोज करने के लिए, संपर्क अनुमतियों को चालू करें." "कॉल करने के लिए, फ़ोन अनुमति चालू करें." 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 cd3535372..0d2147008 100644 --- a/java/com/android/dialer/app/res/values-hr/strings.xml +++ b/java/com/android/dialer/app/res/values-hr/strings.xml @@ -81,11 +81,16 @@ "Dodaj čekanje" "Postavke" "Simulator" + "Izrada prečaca novog sučelja" "Svi kontakti" "Koristi dodirnu zvučnu tipkovnicu" "Natrag na poziv u tijeku" "Dodaj poziv" "Dolazni pozivi" + "Ulazak u način skupne radnje" + "Napuštanje načina skupne radnje" + "Odabrano: %1$s" + "Poništen odabir: %1$s" "Reprodukcija govorne pošte" "Prikaz kontakta %1$s" "Nazovi %1$s" @@ -100,11 +105,16 @@ "Govorna pošta" "%s s" "%s min %s s" - "poruka govorne pošte" - "poruke govorne pošte" - "Da" - "Ne" + "Otkaži način skupnih radnji" + "Izbriši" + "Odustani" "Želite li izbrisati odabranu poruku/e govorne pošte %1$s?" + "Odabrano: %1$s" + + ""Želite li izbrisati ove poruke govorne pošte? "" + ""Želite li izbrisati ove poruke govorne pošte? "" + ""Želite li izbrisati ove poruke govorne pošte? "" + @string/call_log_header_today "%1$s u %2$s" "%1$02d.%2$02d" @@ -117,7 +127,6 @@ "MEID" "Učitavanje sa SIM kartice..." "Kontakti SIM kartice" - "Nije dostupna nijedna aplikacija za kontakte" "Glasovno pretraživanje nije dostupno" "Telefoniranje nije moguće jer je aplikacija Telefon onemogućena." "Pretraži kontakte" @@ -146,10 +155,9 @@ "Broj novih propuštenih poziva: %s" "Još nemate nikog na brzom biranju" "Dodaj omiljeni kontakt" - "Još nemate nijedan kontakt" - "Dodajte kontakt" "Dodirnite sliku da biste vidjeli sve brojeve ili dodirnite i zadržite da biste promijenili redoslijed" "Ukloni" + "Odaberi sve" "Videopoziv" "Pošalji poruku" "Pojedinosti poziva" @@ -215,11 +223,9 @@ "Blokirani brojevi" "Broj %1$s već je blokiran." "Pozivanje računa" - "Uključi" "Postavi dopuštenja" "Da biste omogućili brzo biranje, uključite dopuštenje za kontakte." "Da biste vidjeli zapisnik poziva, uključite dopuštenje za telefon." - "Da biste vidjeli svoje kontakte, uključite dopuštenje za kontakte." "Da biste pristupili govornoj pošti, uključite dopuštenje za telefon." "Da biste pretraživali kontakte, uključite dopuštenja za kontakte." "Da biste nazvali nekog, uključite dopuštenje za telefon." 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 2e64d745d..9a373e6e8 100644 --- a/java/com/android/dialer/app/res/values-hu/strings.xml +++ b/java/com/android/dialer/app/res/values-hu/strings.xml @@ -80,11 +80,16 @@ "Várakozás hozzáadása" "Beállítások" "Szimulátor" + "Új felh. felület-parancsikon" "Összes névjegy" "Hangkódos telefonbillentyűzet használata" "Vissza a folyamatban lévő híváshoz" "Hívás hozzáadása" "Bejövő hívások" + "Belépés tömeges műveleti módba" + "Kilépett a tömeges műveleti módból" + "Kijelölés: %1$s" + "Kijelölés megszüntetve: %1$s" "Hangposta lejátszása" "%1$s névjegyének megtekintése" "%1$s hívása" @@ -99,11 +104,15 @@ "Hangposta" "%s másodperc" "%s perc %s másodperc" - "hangpostaüzenetet" - "hangpostaüzeneteket" - "Igen" - "Nem" + "Köteges művelet mód leállítva" + "Törlés" + "Mégse" "Törli a kiválasztott %1$s?" + "%1$s kiválasztva" + + ""Törli ezeket a hangpostaüzeneteket? "" + ""Törli ezt a hangpostaüzenetet? "" + @string/call_log_header_today "%1$s, %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Betöltés a SIM kártyáról..." "Névjegyek a SIM kártyán" - "Nincs elérhető névjegyek alkalmazás" "A hangalapú keresés nem érhető el" "Nem lehet telefonhívást kezdeményezni, mert a Telefon alkalmazást letiltották." "Keresés a névjegyek között" @@ -145,10 +153,9 @@ "%s új nem fogadott hívás" "Még semelyik telefonszám sincs gyorshívón" "Kedvenc hozzáadása" - "Még nem rendelkezik egyetlen névjeggyel sem" - "Névjegy hozzáadása" "Koppintson a képre az összes szám megjelenítéséhez, vagy tartsa nyomva az átrendezéshez" "Eltávolítás" + "Az összes kijelölése" "Videohívás" "Üzenet küldése" "Hívás adatai" @@ -213,11 +220,9 @@ "Letiltott számok" "A következő szám már le van tiltva: %1$s." "Telefonos fiókok" - "Engedélyezés" "Engedélyek beállítása" "Gyorshívás engedélyezéséhez kapcsolja be a Névjegyek engedélyt." "A hívásnapló megtekintéséhez kapcsolja be a Telefon engedélyt." - "A névjegyek megtekintéséhez kapcsolja be a Névjegyek engedélyt." "A hangposta eléréséhez kapcsolja be a Telefon engedélyt." "A névjegyek kereséséhez adja meg a Névjegyek engedélyeket." "Hívásindításhoz kapcsolja be a Telefon engedélyt." 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 6f3931c9f..2b2fbf61b 100644 --- a/java/com/android/dialer/app/res/values-hy/strings.xml +++ b/java/com/android/dialer/app/res/values-hy/strings.xml @@ -80,11 +80,16 @@ "Ավելացնել սպասում" "Կարգավորումներ" "Նմանակիչ" + "Ստեղծել միջերեսի նոր դյուրանցում" "Բոլոր կոնտակտները" "Օգտագործել հնչերանգներով ստեղնաշարը" "Վերադառնալ ընթացիկ զանգին" "Ավելացնել զանգ" "Մուտքային զանգեր" + "Դուք մտել եք զանգվածային գործողության ռեժիմ" + "Դուք դուրս եկաք զանգվածային գործողությունների ռեժիմից" + "Ընտրվեց՝ %1$s" + "Ապընտրվեց՝ %1$s" "Նվագարկել ձայնային փոստը" "Դիտել %1$s կոնտակտը" "Զանգել %1$s-ին" @@ -99,11 +104,15 @@ "Ձայնային փոստ" "%s վրկ" "%s րոպե %s վայրկյան" - "ձայնային հաղորդագրություն" - "ձայնային հաղորդագրություններ" - "Այո" - "Ոչ" + "Չեղարկել փաթեթային գործողությունների ռեժիմը" + "Ջնջել" + "Չեղարկել" "Ջնջե՞լ նշված %1$sը" + "Ընտրվել է՝ %1$s" + + ""Delete these voicemails? "" + ""Ջնջե՞լ այս ձայնային հաղորդագրությունները "" + @string/call_log_header_today "%1$s-ին, ժամը %2$s-ին" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "SIM քարտը բեռնվում է..." "SIM քարտի կոնտակտները" - "Կոնտակտների հավելված չկա" "Ձայնային որոնումը հասանելի չէ" "Հնարավոր չէ զանգահարել, քանի որ Հեռախոս հավելվածն անջատված է:" "Կոնտակտների որոնում" @@ -145,10 +153,9 @@ "%s նոր բաց թողնված զանգ" "Արագ համարահավաքման ցանկը դատարկ է" "Ավելացնել կոնտակտ" - "Դեռ կոնտակտներ չունեք" - "Ավելացնել կոնտակտ" "Բոլոր համարները տեսնելու համար հպեք պատկերին: Վերադասավորելու համար հպեք և պահեք:" "Հեռացնել" + "Ընտրել բոլորը" "Տեսազանգ" "Ուղարկել հաղորդագրություն" "Զանգի մանրամասները" @@ -213,11 +220,9 @@ "Արգելափակված համարներ" "%1$s համարն արդեն արգելափակված է:" "Հաշիվներ զանգերի համար" - "Միացնել" "Թույլտվությունների սահմանում" "Արագ համարահավաքը թույլատրելու համար միացրեք Կոնտակտների թույլտվությունը:" "Ձեր զանգերի մատյանը տեսնելու համար միացրեք Հեռախոսի թույլտվությունը:" - "Ձեր կոնտակտները տեսնելու համար միացրեք Կոնտակտների թույլտվությունը:" "Ձայնային փոստն օգտագործելու համար միացրեք Հեռախոսի թույլտվությունը:" "Կոնտակտները որոնելու համար միացրեք Կոնտակտների թույլտվությունները:" "Զանգ կատարելու համար միացրեք Հեռախոսի թույլտվությունը:" 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 c0de9b3b4..e72fd6337 100644 --- a/java/com/android/dialer/app/res/values-in/strings.xml +++ b/java/com/android/dialer/app/res/values-in/strings.xml @@ -80,11 +80,16 @@ "Tambahkan tunggu" "Setelan" "Simulator" + "Buat Pintasan UI Baru" "Semua kontak" "Gunakan keypad nada sentuh" "Kembali ke panggilan sedang berlangsung" "Tambahkan panggilan" "Panggilan masuk" + "Masuk ke mode tindakan massal" + "Keluar dari mode tindakan massal" + "%1$s dipilih" + "%1$s tidak dipilih" "Putar pesan suara" "Lihat kontak %1$s" "Telepon %1$s" @@ -99,11 +104,15 @@ "Kotak Pesan" "%s dtk" "%s mnt %s dtk" - "pesan suara" - "pesan suara" - "Ya" - "Tidak" + "Membatalkan mode tindakan kelompok" + "Hapus" + "Batal" "Hapus %1$s yang dipilih?" + "%1$s dipilih" + + ""Hapus pesan suara ini? "" + ""Hapus pesan suara ini? "" + @string/call_log_header_today "%1$s pukul %2$s" "%1$02d.%2$02d" @@ -116,7 +125,6 @@ "MEID" "Memuat dari kartu SIM..." "Kontak pada kartu SIM" - "Aplikasi kontak tidak tersedia" "Penelusuran suara tidak tersedia" "Tidak dapat melakukan panggilan telepon karena aplikasi Telepon telah dinonaktifkan." "Telusuri kontak" @@ -145,10 +153,9 @@ "%s panggilan tidak terjawab baru" "Daftar panggilan cepat masih kosong" "Tambahkan favorit" - "Anda belum memiliki kontak" - "Tambahkan kontak" "Sentuh foto untuk melihat semua nomor atau sentuh & tahan untuk menyusun ulang" "Hapus" + "Pilih semua" "Panggilan video" "Kirim pesan" "Detail panggilan" @@ -213,11 +220,9 @@ "Nomor yang diblokir" "%1$s sudah diblokir." "Akun panggilan" - "Aktifkan" "Setel izin" "Untuk mengaktifkan panggilan cepat, aktifkan izin Kontak." "Untuk melihat log panggilan, aktifkan izin Telepon." - "Untuk melihat kontak, aktifkan izin Kontak." "Untuk mengakses pesan suara, aktifkan izin Telepon." "Untuk menelusuri kontak, aktifkan izin Kontak." "Untuk melakukan panggilan, aktifkan izin Telepon." 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 fdd635668..bd329be9d 100644 --- a/java/com/android/dialer/app/res/values-is/strings.xml +++ b/java/com/android/dialer/app/res/values-is/strings.xml @@ -80,11 +80,16 @@ "Bæta töf við" "Stillingar" "Hermir" + "Stofna flýtileið í nýtt viðmót" "Allir tengiliðir" "Nota snertitónatakkaborð" "Fara aftur í símtal í gangi" "Bæta við símtali" "Móttekin símtöl" + "Opnar fjöldaaðgerðastillingu" + "Fjöldaaðgerðastillingu lokað" + "Valdi %1$s" + "Fjarlægði val á %1$s" "Spila talhólfsskilaboð" "Skoða tengiliðinn %1$s" "Hringja í %1$s" @@ -99,11 +104,15 @@ "Talhólf" "%s sek." "%s mín. og %s sek." - "talhólfsskilaboð" - "talhólfsskilaboð" - "Já" - "Nei" + "Hætta við runuaðgerðastillingu" + "Eyða" + "Hætta við" "Eyða völdum %1$s?" + "%1$s valin" + + ""Eyða þessum talhólfsskilaboðum? "" + ""Eyða þessum talhólfsskilaboðum? "" + @string/call_log_header_today "%1$s kl. %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Hleður af SIM-kortinu…" "Tengiliðir á SIM-korti" - "Ekkert tengiliðaforrit í boði" "Raddleit er ekki í boði" "Ekki er hægt að hringja vegna þess að forritið Sími hefur verið gert óvirkt." "Leita í tengiliðum" @@ -145,10 +153,9 @@ "%s ný ósvöruð símtöl" "Þú ert ekki með neinn í hraðvali enn sem komið er" "Bæta uppáhaldi við" - "Þú ert ekki með neina tengiliði enn sem komið er" - "Bæta tengilið við" "Snertu myndina til að sjá öll númer eða haltu henni inni til að endurraða" "Fjarlægja" + "Velja allt" "Myndsímtal" "Senda skilaboð" "Símtalsupplýsingar" @@ -213,11 +220,9 @@ "Númer á bannlista" "%1$s er nú þegar á bannlista." "Símtalareikningar" - "Kveikja" "Stilla heimildir" "Kveiktu á tengiliðaheimildinni til að gera hraðval virkt." "Kveiktu á heimild símaforritsins til að sjá símtalaskrána þína." - "Kveiktu á tengiliðaheimildinni til að sjá tengiliðina þína." "Kveiktu á heimild símaforritsins til að fá aðgang að talhólfinu þínu." "Kveiktu á heimildunum fyrir tengiliði til að leita að tengiliðum." "Kveiktu á heimild símaforritsins til að hringja símtal." 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 9bd8cd359..356f5a603 100644 --- a/java/com/android/dialer/app/res/values-it/strings.xml +++ b/java/com/android/dialer/app/res/values-it/strings.xml @@ -80,11 +80,16 @@ "Aggiungi attesa" "Impostazioni" "Simulatore" + "Crea nuova scorciatoia UI" "Tutti i contatti" "Usa tastierino per selezione a toni" "Torna alla chiamata in corso" "Aggiungi chiamata" "Chiamate in arrivo" + "Attivazione della modalità di azione collettiva" + "Disttivazione della modalità di azione collettiva" + "%1$s selezionato" + "%1$s deselezionato" "Riproduci messaggio vocale" "Visualizza %1$s contatto" "Chiama %1$s" @@ -99,11 +104,15 @@ "Segreteria" "%s secondi" "%s min %s s" - "messaggio vocale" - "messaggi vocali" - "Sì" - "No" + "Annulla modalità di azione collettiva" + "Elimina" + "Annulla" "Eliminare i %1$s selezionati?" + "%1$s selezionate" + + ""Eliminare questi messaggi vocali? "" + ""Eliminare questo messaggio vocale? "" + @string/call_log_header_today "%1$s alle ore %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Caricamento da SIM..." "Contatti SIM" - "Nessuna app di contatti disponibile" "Ricerca vocale non disponibile" "Impossibile effettuare una telefonata perché l\'applicazione Telefono è stata disattivata." "Cerca contatti" @@ -145,10 +153,9 @@ "%s nuove chiamate perse" "Nessun preferito disponibile nella Composizione rapida" "Aggiungi un preferito" - "Nessun contatto disponibile" - "Aggiungi un contatto" "Tocca l\'immagine per visualizzare tutti i numeri oppure tieni premuto per cambiare l\'ordine" "Rimuovi" + "Seleziona tutto" "Videochiamata" "Invia un messaggio" "Dettagli chiamata" @@ -213,11 +220,9 @@ "Numeri bloccati" "%1$s è già bloccato." "Account di chiamata" - "Attiva" "Imposta autorizzazioni" "Per attivare la composizione rapida, attiva l\'autorizzazione Contatti." "Per accedere al registro chiamate, attiva l\'autorizzazione sul telefono." - "Per accedere ai tuoi contatti, attiva l\'autorizzazione Contatti." "Per accedere alla segreteria, attiva l\'autorizzazione sul telefono." "Per cercare nei tuoi contatti, attiva le autorizzazioni Contatti." "Per fare una chiamata, attiva l\'autorizzazione sul telefono." 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 bb115e2f8..230555a14 100644 --- a/java/com/android/dialer/app/res/values-iw/strings.xml +++ b/java/com/android/dialer/app/res/values-iw/strings.xml @@ -82,11 +82,16 @@ "הוסף המתנה" "הגדרות" "סימולטור" + "יצירת קיצור דרך לממשק החדש" "כל אנשי הקשר" "השתמש במקלדת עם חיוג צלילים" "חזור לשיחה פעילה" "הוסף שיחה" "שיחות נכנסות" + "עברת למצב של ביצוע פעולות בכמות גדולה" + "עזבת את המצב של ביצוע פעולות בכמות גדולה" + "בחרת את %1$s" + "ביטלת את הבחירה של %1$s" "הפעל דואר קולי" "הצג את איש הקשר %1$s" "התקשר אל %1$s" @@ -101,11 +106,17 @@ "דואר קולי" "%s שניות" "%s דק\' %s שנ\'" - "ההודעה הקולית" - "ההודעות הקוליות" - "כן" - "לא" + "ביטול המצב של ביצוע פעולות בכמות גדולה" + "מחיקה" + "ביטול" "האם למחוק את %1$s שבחרת?" + "%1$s נבחרו" + + ""האם למחוק את ההודעות הקוליות האלה? "" + ""האם למחוק את ההודעות הקוליות האלה? "" + ""האם למחוק את ההודעות הקוליות האלה? "" + ""האם למחוק את ההודעה הקולית הזו? "" + @string/call_log_header_today "%1$s ב-%2$s" "%1$02d:%2$02d" @@ -118,7 +129,6 @@ "MEID" "‏טוען מכרטיס SIM…" "‏אנשי קשר בכרטיס SIM" - "אין אפליקציה זמינה עבור אנשי קשר" "חיפוש קולי אינו זמין" "לא ניתן לבצע שיחת טלפון מפני שאפליקציית הטלפון הושבתה." "חפש אנשי קשר" @@ -147,10 +157,9 @@ "%s שיחות חדשות שלא נענו" "עדיין לא הוגדר חיוג מהיר לאף איש קשר" "הוסף פריט מועדף" - "עדיין אין לך אנשי קשר" - "הוסף איש קשר" "גע בתמונה כדי להציג את כל המספרים או גע והחזק כדי לשנות את הסדר" "הסר" + "בחירת הכל" "שיחת וידאו" "שלח הודעה" "פרטי שיחה" @@ -217,11 +226,9 @@ "מספרים חסומים" "%1$s כבר חסום." "חשבונות לביצוע שיחות" - "הפעל" "הגדר הרשאות" "כדי להפעיל חיוג מהיר, הפעל את ההרשאה \'אנשי קשר\'." "כדי לראות את יומן השיחות, הפעל את ההרשאה \'טלפון\'." - "כדי להציג את אנשי הקשר, הפעל את ההרשאה \'אנשי קשר\'." "כדי לגשת לדואר הקולי, הפעל את ההרשאה \'טלפון\'." "כדי לחפש באנשי הקשר, הפעל את ההרשאה \'אנשי קשר\'." "כדי להתקשר, הפעל את ההרשאה \'טלפון\'." 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 63b15cbed..71fca83d5 100644 --- a/java/com/android/dialer/app/res/values-ja/strings.xml +++ b/java/com/android/dialer/app/res/values-ja/strings.xml @@ -80,11 +80,16 @@ "待機を追加" "設定" "シミュレーション" + "新しいUIのショートカットを作成" "すべての連絡先" "プッシュホン式キーパッドを使う" "通話に戻る" "別の通話を追加" "着信" + "一括操作モードを開始します" + "一括操作モードを終了しました" + "%1$s を選択しました" + "%1$s を選択解除しました" "ボイスメールを再生" "%1$sの連絡先を表示" "%1$sに発信" @@ -99,11 +104,15 @@ "ボイスメール" "%s秒" "%s%s秒" - "ボイスメール" - "ボイスメール" - "はい" - "いいえ" + "一括操作モードをキャンセルします" + "削除" + "キャンセル" "選択した%1$sを削除しますか?" + "%1$s 件選択済み" + + ""これらのボイスメールを削除しますか?"" + ""このボイスメールを削除しますか?"" + @string/call_log_header_today "%1$s%2$s" "%1$02d%2$02d 秒" @@ -116,7 +125,6 @@ "MEID" "SIMカードから読み取り中..." "SIMカードの連絡先" - "連絡先アプリがありません" "音声検索を利用できません" "電話アプリが無効になっているため発信できません。" "連絡先を検索" @@ -145,10 +153,9 @@ "%s件の不在着信" "クイックアクセスに登録済みの連絡先はまだありません" "お気に入りを追加" - "連絡先はまだありません" - "連絡先を追加" "画像をタップするとすべての番号が表示され、押し続けると番号を並べ替えることができます" "削除" + "すべて選択" "ビデオハングアウト" "メッセージを送信" "通話の詳細" @@ -213,11 +220,9 @@ "ブロックした番号" "%1$sは既にブロックしています。" "通話アカウント" - "ONにする" "権限を設定" "クイックアクセスを有効にするには、連絡先権限をONにしてください。" "通話履歴を表示するには、電話権限をONにしてください。" - "連絡先を表示するには、連絡先権限をONにしてください。" "ボイスメールにアクセスするには、電話権限をONにしてください。" "連絡先を検索するには、連絡先権限をONにしてください。" "電話をかけるには、電話権限をONにしてください。" 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 ae89505b5..fd9351f54 100644 --- a/java/com/android/dialer/app/res/values-ka/strings.xml +++ b/java/com/android/dialer/app/res/values-ka/strings.xml @@ -80,11 +80,16 @@ "ლოდინის დამატება" "პარამეტრები" "სიმულატორი" + "ახალი UI მალსახმობის შექმნა" "ყველა კონტაქტი" "ტონალური კლავიატურის გამოყენება" "მიმდინარე ზარზე დაბრუნება" "ზარის დამატება" "შემომავალი ზარები" + "მიმდინარეობს ერთიანი ქმედების რეჟიმში შესვლა" + "ერთიანი ქმედების რეჟიმიდან გამოხვედით" + "არჩეულია %1$s" + "%1$s-ის არჩევა გაუქმდა" "ხმოვანი ფოსტის ჩართვა" "კონტაქტის %1$s ნახვა" "%1$s-თან დარეკვა" @@ -99,11 +104,15 @@ "ხმოვანი ფოსტა" "%s წმ" "%s მინ %s წამ" - "ხმოვანი ფოსტა" - "ხმოვანი ფოსტა" - "დიახ" - "არა" + "ერთიანი ქმედების რეჟიმის გაუქმება" + "წაშლა" + "გაუქმება" "გსურთ, წაშალოთ არჩეული %1$s?" + "არჩეულია %1$s" + + ""გსურთ ამ ხმოვანი შეტყობინებების წაშლა? "" + ""გსურთ ამ ხმოვანი შეტყობინების წაშლა? "" + @string/call_log_header_today "%1$s, %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "იტვირთება SIM ბარათიდან…" "SIM ბარათის კონტაქტები" - "კონტაქტების აპლიკაცია არ არის ხელმისაწვდომი" "ხმოვანი ძიება არ არის ხელმისაწვდომი" "სატელეფონო ზარის განხორციელება ვერ ხერხდება, ვინაიდან ტელეფონის აპლიკაცია გაუქმებულია." "კონტაქტებში ძიება" @@ -145,10 +153,9 @@ "%s ახალი გაცდენილი ზარი" "სწრაფი აკრეფისთვის რჩეულები ჯერ არ გყავთ" "რჩეული კონტაქტის დამატება" - "კონტაქტები ჯერ არ გაქვთ" - "კონტაქტის დამატება" "ყველა ნომრის სანახავად შეეხეთ სურათს ან შეეხეთ და დააყოვნეთ მიმდევრობის შესაცვლელად" "ამოშლა" + "ყველას არჩევა" "ვიდეო ზარი" "შეტყობინების გაგზავნა" "ზარის მონაცემები" @@ -213,11 +220,9 @@ "დაბლოკილი ნომრები" "%1$s უკვე დაბლოკილია." "ანგარიშების გამოძახება" - "ჩართვა" "ნებართვების დაყენება" "სწრაფი აკრეფის გასააქტიურებლად, ჩართეთ კონტაქტების ნებართვა." "ზარების ჟურნალის სანახავად, ჩართეთ ტელეფონის ნებართვა." - "კონტაქტების სანახავად, ჩართეთ კონტაქტების ნებართვა." "ხმოვან ფოსტაზე წვდომისთვის, ჩართეთ ტელეფონის ნებართვა." "თქვენი კონტაქტების მოსაძებნად ჩართეთ კონტაქტების ნებართვები." "ზარის განსახორციელებლად, ჩართეთ ტელეფონის ნებართვა." 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 ba4238692..f1763a21a 100644 --- a/java/com/android/dialer/app/res/values-kk/strings.xml +++ b/java/com/android/dialer/app/res/values-kk/strings.xml @@ -80,11 +80,16 @@ "Күтуді қосу" "Параметрлер" "Симулятор" + "Жаңа пайдаланушы интерфейсінің пернелер тіркесімін жасау" "Барлық контактілер" "Сенсорлы әуенді пернетақта" "Қосылып тұрған қоңырауға оралу" "Қоңырау қосу" "Келген қоңыраулар" + "Жаппай әрекет режиміне өту" + "Жаппай әрекет режиімінен шығу" + "%1$s таңдалды" + "%1$s таңдауы алынды" "Дауыс-хабарды ойнату" "%1$s контактісін көру" "%1$s нөміріне қоңырау шалу" @@ -99,11 +104,15 @@ "Дауыстық пошта" "%s сек." "%s мин %s сек" - "дауыстық хабар" - "дауыстық хабарлар" - "Иә" - "Жоқ" + "Топтама әрекеттер режимін жабу" + "Жою" + "Жабу" "Таңдалған %1$s хабарларын жою қажет пе?" + "%1$s таңдалды" + + ""Осы дауыстық хабарларды жою қажет пе? "" + ""Осы дауыстық хабарды жою қажет пе? "" + @string/call_log_header_today "%1$s, %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID (ұялы жабдық анықтағыш)" "SIM картасынан жүктеу…" "SIM картасының контактілері" - "Контактілер қолданбасы қол жетімді емес" "Дауыс арқылы іздеу қол жетімді емес" "Телефон қоңырауын шалу мүмкін емес, өйткені «Телефон» қолданбасы өшірілген." "Контактілерді іздеу" @@ -145,10 +153,9 @@ "%s жаңа қабылданбаған қоңыраулар" "Жылдам теруде әлі ешкім жоқ" "Таңдаулыны қосу" - "Әлі ешқандай контактілер жоқ" - "Контакт қосу" "Барлық нөмірлерді көру үшін кескінді түртіңіз, ал ретін өзгерту үшін түртіп, ұстап тұрыңыз" "Алып тастау" + "Барлығын таңдау" "Бейне қоңырау" "Хабар жіберу" "Қоңырау мәліметтері" @@ -213,11 +220,9 @@ "Бөгелген нөмірлер" "%1$s бөгеліп қойылған." "Қоңырау шалу есептік жазбалары" - "Қосу" "Рұқсаттар орнату" "Жылдам теруді қосу үшін \"Контактілер\" рұқсатын қосыңыз." "Қоңыраулар журналы көру үшін \"Телефон\" рұқсатын қосыңыз." - "Контактілерді көру үшін \"Контактілер\" рұқсатын қосыңыз." "Дауыс поштасына қатынасу үшін \"Телефон\" рұқсатын қосыңыз." "Контактілерді іздеу үшін \"Контактілер\" рұқсаттарын қосыңыз." "Қоңырауды шалу үшін \"Телефон\" рұқсатын қосыңыз." 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 bdc91cf0b..54f1a126a 100644 --- a/java/com/android/dialer/app/res/values-km/strings.xml +++ b/java/com/android/dialer/app/res/values-km/strings.xml @@ -80,11 +80,16 @@ "បញ្ចូល​ការ​រង់ចាំ" "ការកំណត់" "កម្មវិធីធ្វើ​ដូច​មែនទែន" + "បង្កើត​ផ្លូវកាត់ UI ថ្មី" "ទំនាក់ទំនង​ទាំងអស់" "ប្រើ​សំឡេង​ប៉ះ​បន្ទះ​លេខ" "កំពុង​ត្រឡប់​ទៅកាន់​ការ​ហៅ" "បន្ថែម​ការ​ហៅ" "ការ​ហៅ​ចូល" + "ចូល​មុខងារ​សកម្មភាព​ច្រើន" + "បាន​ចាកចេញ​ពី​មុខងារ​សកម្មភាព​ច្រើន" + "បាន​ជ្រើសរើស %1$s" + "បាន​ដក​ការជ្រើសរើស %1$s" "ចាក់​សារ​ជា​សំឡេង" "មើល​ទំ​នាក់ទំនង %1$s" "ហៅ %1$s" @@ -99,11 +104,15 @@ "សារ​ជា​សំឡេង" "%s វិនាទី" "%s នាទី %s វិនាទី" - "សារ​ជា​សំឡេង" - "សារ​ជា​សំឡេង" - "បាទ/ចាស" - "ទេ" + "បោះបង់​មុខងារ​សកម្មភាព​ជា​ក្រុម" + "លុប" + "បោះបង់" "លុប %1$s ដែល​បាន​ជ្រើសរើស?" + "បាន​ជ្រើសរើស %1$s" + + ""លុប​សារ​ជា​សំឡេង​ទាំងនេះ? "" + ""លុប​សារ​ជា​សំឡេង​នេះ? "" + @string/call_log_header_today "%1$s នៅម៉ោង %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "កំពុង​ផ្ទុក​ពី​ស៊ីម​កាត..." "ទំនាក់ទំនង​នៅ​ក្នុង​ស៊ីម​កាត" - "មិនមានកម្មវិធីទំនាក់ទំនងទេ" "ការស្វែងរកជាសម្លេងមិនមានទេ" "មិន​អាច​ហៅ​បាន​ទេ​ ព្រោះ​កម្មវិធី​ទូរស័ព្ទ​ត្រូវ​បាន​បិទ។" "រក​ទំនាក់ទំនង" @@ -145,10 +153,9 @@ "ខកខាន​ទទួល​ថ្មី %s" "គ្មាននរណាម្នាក់នៅក្នុងការហៅរហ័សរបស់អ្នកនៅឡើយទេ" "បញ្ចូលសំណព្វ" - "អ្នកមិនទាន់មានទំនាក់ទំនងនៅឡើយទេ" - "បន្ថែមទំនាក់ទំនង" "ប៉ះរូបភាពដើម្បីមើលលេខទាំងអស់ ឬប៉ះ & សង្កត់ឲ្យជាប់ដើម្បីតម្រៀបឡើងវិញ" "លុបចេញ" + "ជ្រើសរើស​​ទាំងអស់" "ហៅជាវីដេអូ" "ផ្ញើសារ" "ព័ត៌មានលម្អិតអំពីការហៅ" @@ -213,11 +220,9 @@ "លេខបានរារាំង" "%1$s ត្រូវបានទប់ស្កាត់រួចហើយ" "គណនីហៅទូរសព្ទ" - "បើក" "កំណត់សិទ្ធិអនុញ្ញាត" "ដើម្បីបើកដំណើរការហៅរហ័ស សូមបើកសិទ្ធិអនុញ្ញាតកម្មវិធីទំនាក់ទំនង។" "ដើម្បីមើលកំណត់ហេតុហៅទូរស័ព្ទរបស់អ្នក សូមបើកសិទ្ធិអនុញ្ញាតកម្មវិធីហៅទូរស័ព្ទ។" - "ដើម្បីមើលទំនាក់ទំនងរបស់អ្នក សូមបើកសិទ្ធិអនុញ្ញាតកម្មវិធីទំនាក់ទំនង។" "ដើម្បីចូលដំណើរការសារជាសំឡេងរបស់អ្នក សូមបើកសិទ្ធិអនុញ្ញាតកម្មវិធីហៅទូរស័ព្ទ។" "ដើម្បីស្វែងរកទំនាក់ទំនងរបស់អ្នក សូមបើកសិទ្ធិអនុញ្ញាតទំនាក់ទំនង។" "ដើម្បីធ្វើការហៅទូរស័ព្ទ សូមបើកសិទ្ធិអនុញ្ញាតកម្មវិធីហៅទូរស័ព្ទ។" 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 dae544d3f..d7f3aabbc 100644 --- a/java/com/android/dialer/app/res/values-kn/strings.xml +++ b/java/com/android/dialer/app/res/values-kn/strings.xml @@ -80,11 +80,16 @@ "ನಿರೀಕ್ಷೆಯನ್ನು ಸೇರಿಸಿ" "ಸೆಟ್ಟಿಂಗ್‌ಗಳು" "ಸಿಮ್ಯುಲೇಟರ್" + "ಹೊಸ UI ಶಾರ್ಟ್‌ಕಟ್ ರಚಿಸಿ" "ಎಲ್ಲಾ ಸಂಪರ್ಕಗಳು" "ಸ್ಪರ್ಶ ಟೋನ್ ಕೀಪ್ಯಾಡ್ ಬಳಸಿ" "ಪ್ರತ್ಯತ್ತರ ಕರೆಯು ಪ್ರಗತಿಯಲ್ಲಿದೆ" "ಕರೆಯನ್ನು ಸೇರಿಸಿ" "ಒಳಬರುವ ಕರೆಗಳು" + "ದೊಡ್ಡ ಪ್ರಮಾಣದ ಕ್ರಿಯೆಯ ಮೋಡ್‌ಗೆ ಪ್ರವೇಶಿಸಲಾಗುತ್ತಿದೆ" + "ದೊಡ್ಡ ಪ್ರಮಾಣದ ಕ್ರಿಯೆಯ ಮೋಡ್ ತೊರೆಯಲಾಗಿದೆ" + "%1$s ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ" + "%1$s ಆಯ್ಕೆಯನ್ನು ರದ್ದುಮಾಡಲಾಗಿದೆ" "ಧ್ವನಿಮೇಲ್‌ ಪ್ಲೇ ಮಾಡಿ" "%1$s ಸಂಪರ್ಕ ವೀಕ್ಷಿಸಿ" "%1$s ಕರೆ ಮಾಡಿ" @@ -99,11 +104,15 @@ "ಧ್ವನಿಮೇಲ್" "%s ಸೆಕೆಂ" "%s ನಿಮಿ %s ಸೆಕೆಂ" - "ಧ್ವನಿಮೇಲ್" - "ಧ್ವನಿಮೇಲ್‌ಗಳು" - "ಹೌದು" - "ಇಲ್ಲ" + "ಬ್ಯಾಚ್ ಕ್ರಿಯೆಗಳ ಮೋಡ್ ಅನ್ನು ರದ್ದುಮಾಡಿ" + "ಅಳಿಸಿ" + "ರದ್ದುಮಾಡಿ" "ಆಯ್ಕೆ ಮಾಡಲಾದ %1$s ಅನ್ನು ಅಳಿಸುವುದೇ?" + "%1$s ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ" + + ""ಈ ಧ್ವನಿಮೇಲ್‌ಗಳನ್ನು ಅಳಿಸುವುದೇ? "" + ""ಈ ಧ್ವನಿಮೇಲ್‌ಗಳನ್ನು ಅಳಿಸುವುದೇ? "" + @string/call_log_header_today "%1$s ರಂದು %2$s ಗಂಟೆಗೆ" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "ಸಿಮ್‌ ಕಾರ್ಡ್‌ನಿಂದ ಲೋಡ್‌ ಮಾಡಲಾಗುತ್ತಿದೆ…" "ಸಿಮ್‌ ಕಾರ್ಡ್‌ ಸಂಪರ್ಕಗಳು" - "ಯಾವುದೇ ಸಂಪರ್ಕಗಳ ಅಪ್ಲಿಕೇಶನ್‌ ಲಭ್ಯವಿಲ್ಲ" "ಧ್ವನಿ ಹುಡುಕಾಟ ಲಭ್ಯವಿಲ್ಲ" "ಫೋನ್ ಅಪ್ಲಿಕೇಶನ್ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿರುವುದರಿಂದ ಫೋನ್ ಕರೆ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ." "ಸಂಪರ್ಕಗಳನ್ನು ಹುಡುಕಿ" @@ -145,10 +153,9 @@ "%s ಹೊಸ ಮಿಸ್ಡ್‌ ಕರೆಗಳು" "ನಿಮ್ಮ ತ್ವರಿತ ಡಯಲ್‌ನಲ್ಲಿ ಇದುವರೆಗೆ ಯಾರೂ ಇಲ್ಲ" "ಮೆಚ್ಚಿನದನ್ನು ಸೇರಿಸಿ" - "ನೀವು ಇನ್ನೂ ಯಾವುದೇ ಸಂಪರ್ಕಗಳನ್ನು ಹೊಂದಿಲ್ಲ" - "ಸಂಪರ್ಕ ಸೇರಿಸಿ" "ಎಲ್ಲಾ ಸಂಖ್ಯೆಗಳನ್ನು ನೋಡಲು ಚಿತ್ರವನ್ನು ಸ್ಪರ್ಶಿಸಿ ಅಥವಾ ಮರುಕ್ರಮಗೊಳಿಸಲು ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಹೋಲ್ಡ್‌‌ ಮಾಡಿ" "ತೆಗೆದುಹಾಕು" + "ಎಲ್ಲವನ್ನೂ ಆಯ್ಕೆ ಮಾಡಿ" "ವೀಡಿಯೊ ಕರೆ" "ಸಂದೇಶ ಕಳುಹಿಸಿ" "ಕರೆಯ ವಿವರಗಳು" @@ -213,11 +220,9 @@ "ನಿರ್ಬಂಧಿಸಲಾದ ಸಂಖ್ಯೆಗಳು" "%1$s ಈಗಾಗಲೇ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ." "ಕರೆ ಮಾಡುವ ಖಾತೆಗಳು" - "ಆನ್‌ ಮಾಡಿ" "ಅನುಮತಿಗಳನ್ನು ಹೊಂದಿಸು" "ವೇಗ ಡಯಲ್ ಸಕ್ರಿಯಗೊಳಿಸಲು, ಸಂಪರ್ಕಗಳ ಅನುಮತಿಯನ್ನು ಆನ್ ಮಾಡಿ." "ನಿಮ್ಮ ಕರೆಯ ಲಾಗ್ ಅನ್ನು ವೀಕ್ಷಿಸಲು, ಫೋನ್ ಅನುಮತಿಯನ್ನು ಆನ್ ಮಾಡಿ." - "ನಿಮ್ಮ ಸಂಪರ್ಕಗಳನ್ನು ವೀಕ್ಷಿಸಲು, ಸಂಪರ್ಕಗಳ ಅನುಮತಿಯನ್ನು ಆನ್ ಮಾಡಿ." "ನಿಮ್ಮ ಧ್ವನಿಮೇಲ್ ಪ್ರವೇಶಿಸಲು, ಫೋನ್ ಅನುಮತಿಯನ್ನು ಆನ್ ಮಾಡಿ." "ನಿಮ್ಮ ಸಂಪರ್ಕಗಳನ್ನು ಹುಡುಕಲು, ಸಂಪರ್ಕಗಳ ಅನುಮತಿಗಳನ್ನು ಆನ್ ಮಾಡಿ." "ಕರೆ ಮಾಡಲು, ಫೋನ್ ಅನುಮತಿಯನ್ನು ಆನ್ ಮಾಡಿ." 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 1850b6ce1..cb2e83c79 100644 --- a/java/com/android/dialer/app/res/values-ko/strings.xml +++ b/java/com/android/dialer/app/res/values-ko/strings.xml @@ -80,11 +80,16 @@ "대기 시간 추가" "설정" "시뮬레이터" + "새 UI 바로가기 만들기" "모든 연락처" "터치톤 키패드 사용" "진행 중인 통화로 돌아가기" "통화 추가" "수신전화" + "일괄 작업 모드 시작 중" + "일괄 작업 모드 종료됨" + "%1$s 선택됨" + "%1$s 선택 취소됨" "음성사서함 재생" "%1$s님의 연락처 보기" "전화걸기: %1$s" @@ -99,11 +104,15 @@ "음성사서함" "%s초" "%s%s초" - "음성사서함" - "음성사서함" - "예" - "아니요" + "일괄 작업 모드 취소" + "삭제" + "취소" "선택한 %1$s을(를) 삭제하시겠습니까?" + "%1$s개 선택됨" + + ""이 음성사서함을 삭제하시겠습니까? "" + ""이 음성사서함을 삭제하시겠습니까? "" + @string/call_log_header_today "%1$s %2$s" "%1$02d%2$02d초" @@ -116,7 +125,6 @@ "MEID" "SIM 카드에서 로딩 중..." "SIM 카드 주소록" - "사용할 수 있는 주소록 앱이 없습니다." "음성검색이 지원되지 않습니다." "전화 애플리케이션을 사용 중지했으므로 전화를 걸 수 없습니다." "주소록 검색" @@ -145,10 +153,9 @@ "새로운 부재중 전화 %s건" "아직 단축 다이얼이 설정된 연락처가 없습니다." "단축 다이얼 추가" - "아직 연락처가 없습니다." - "연락처 추가" "이미지를 터치하여 모든 번호를 확인하거나 길게 터치하여 재정렬합니다." "삭제" + "모두 선택" "화상 통화" "메시지 보내기" "통화 세부정보" @@ -213,11 +220,9 @@ "차단된 번호" "%1$s번은 이미 차단되었습니다." "통화 계정" - "사용" "권한 설정" "단축번호를 사용하려면 주소록 권한을 사용하도록 설정하세요." "통화 기록을 보려면 전화 권한을 사용하도록 설정하세요." - "주소록을 보려면 주소록 권한을 사용하도록 설정하세요." "음성사서함에 액세스하려면 전화 권한을 사용하도록 설정하세요." "주소록을 검색하려면 주소록 권한을 사용하도록 설정하세요." "전화를 걸려면 전화 권한을 사용하도록 설정하세요." 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 9e80e29ee..0a0b3e661 100644 --- a/java/com/android/dialer/app/res/values-ky/strings.xml +++ b/java/com/android/dialer/app/res/values-ky/strings.xml @@ -80,11 +80,16 @@ "Тыныгуу кошуу" "Жөндөөлөр" "Симулятор" + "Жаңы интерфейс үчүн кыска жол түзүү" "Бардык байланыштар" "Тоналдык терүү тактасын колдонуу" "Токтотулган чалууга кайтуу" "Чалууну кошуу" "Кирүүчү чалуулар" + "Жапырт аракет режимине кирдиңиз" + "Жапырт аракет режиминен чыктыңыз" + "%1$s объект тандалды" + "%1$s объект тандоодон чыгарылды" "Үнкатты угуу" "Байланышты кароо %1$s" "Чалуу %1$s" @@ -99,11 +104,15 @@ "Үн почтасы" "%s сек." "%s мүн. %s сек." - "үн почтасы" - "үн почталары" - "Ооба" - "Жок" + "Жапырт аракет режимин жокко чыгаруу" + "Жок кылуу" + "Жокко чыгаруу" "Тандалган %1$s жок кылынсынбы?" + "%1$s тандалды" + + ""Бул үн почталар жок кылынсынбы? "" + ""Бул үн почта жок кылынсынбы? "" + @string/call_log_header_today "%1$s саат %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "SIM картадан жүктөлүүдө..." "SIM картадагы байланыштар" - "Жеткиликтүү байланыштар колдонмосу жок" "Үн менен издөө жеткиликтүү эмес" "Телефон колдонмосу өчүрүлгөндүктөн, чалуу мүмкүн болбой жатат." "Байланыштарды издөө" @@ -145,10 +153,9 @@ "%s жаңы өткөзүлгөн чалуу" "Азырынча тез териле турган номерлер жок" "Сүйүктүү номер кошуу" - "Азырынча бир дагы байланышыңыз жок" - "Байланыш кошуу" "Бардык номерлерди көрүү үчүн, сүрөткө тийип коюңуз же коё бербей басып туруп иретин өзгөртсөңүз болот." "Алып салуу" + "Баарын тандоо" "Видео чалуу" "Билдирүү жөнөтүү" "Чалуунун чоо-жайы" @@ -213,11 +220,9 @@ "Бөгөттөлгөн номерлер" "%1$s мурунтан эле бөгөттөлгөн." "Чалуу каттоо эсептери" - "Күйгүзүү" "Уруксаттарды берүү" "Тез терүүнү иштетүү үчүн, \"Байланыштар\" колдонмосуна уруксат бериңиз." "Чалуулар таржымалыңызды көрүү үчүн, \"Телефон\" колдонмосуна уруксат бериңиз." - "Байланыштар тизмесин көрүү үчүн, \"Байланыштар\" колдонмосуна уруксат бериңиз." "Үн почтаңызга кирүү үчүн, \"Телефон\" колдонмосуна уруксат бериңиз." "Байланыштарыңызды издөө үчүн, Байланыштарга уруксатты күйгүзүңүз." "Чалуу үчүн, \"Телефон\" колдонмосуна уруксат бериңиз." 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 8284e8de0..267d1c6be 100644 --- a/java/com/android/dialer/app/res/values-lo/strings.xml +++ b/java/com/android/dialer/app/res/values-lo/strings.xml @@ -80,11 +80,16 @@ "ເພີ່ມການລໍຖ້າ" "ການ​ຕັ້ງ​ຄ່າ" "ຕົວຈຳລອງ" + "ສ້າງປຸ່ມລັດສ່ວນຕິດຕໍ່ຜູ້ໃຊ້ໃໝ່" "ລາຍຊື່ຜູ່ຕິດຕໍ່ທັງໝົດ" "ໃຊ້ປຸ່ມກົດສັນຍານສຽງ" "ກັບໄປການໂທທີ່ກຳລັງດຳເນີນຢູ່" "ເພີ່ມການໂທ" "ສາຍໂທເຂົ້າ" + "ກຳລັງເຂົ້າໂໝດຄຳສັ່ງຈຳນວນຫຼາຍ" + "ອອກຈາກໂໝດຄຳສັ່ງຈຳນວນຫຼາຍແລ້ວ" + "ເລືອກ %1$s ແລ້ວ" + "ເຊົາເລືອກ %1$s ແລ້ວ" "ເປີດຂໍ້ຄວາມສຽງ" "ເບິ່ງລາຍຊື່ຜູ່ຕິດຕໍ່ %1$s" "ໂທຫາ %1$s" @@ -99,11 +104,15 @@ "ຂໍ້ຄວາມສຽງ" "%s ວິນາທີ" "%s ນ​ທ %s ວິ" - "ຂໍ້ຄວາມສຽງ" - "ຂໍ້ຄວາມສຽງ" - "ແມ່ນແລ້ວ" - "ບໍ່" + "ຍົກເລີກໂໝດຄຳສັ່ງເປັນຊຸດ" + "ລຶບ" + "ຍົກເລີກ" "ລຶບ %1$s ທີ່ເລືອກອອກໄປບໍ?" + "ເລືອກ %1$s ລາຍການແລ້ວ" + + ""ລຶບຂໍ້ຄວາມສຽງເຫຼົ່ານີ້ບໍ? "" + ""ລຶບຂໍ້ຄວາມສຽງນີ້ບໍ? "" + @string/call_log_header_today "%1$s ເວລາ %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "ກຳລັງໂຫລດຈາກ SIM card..." "ລາຍຊື່ຜູ່ຕິດຕໍ່ SIM card" - "ບໍ່​ມີ​ແອັບຯ​ລາຍ​ຊື່​ຕິດ​ຕໍ່​ຢູ່" "ບໍ່​ມີ​ການ​ຊອກ​ຫາ​ດ້ວຍ​ສຽງ​ຢູ່" "ບໍ່​ສາ​ມາດ​ໂທ​ໄດ​້​ເນື່ອງ​ຈາກ​ແອັບ​ພ​ລິ​ເຄ​ຊັນ​ໂທ​ລະ​ສັບ​ຖືກ​ປິດ​ການ​ນຳ​ໃຊ້​ໄວ້." "ຊອກຫາລາຍຊື່ຜູ່ຕິດຕໍ່" @@ -145,10 +153,9 @@ "%s ສາຍທີ່ບໍ່ໄດ້ຮັບໃໝ່" "ບໍ່​ມີ​ຜູ້​ໃດ​ຢູ່​ໃນ​ການ​ໂທ​ດ່ວນ​ຂອງ​ທ່ານ​ເທື່ອ" "ເພີ່ມ​ລາຍ​ການ​ທີ່​ມັກ" - "ທ່ານ​ບໍ່​ມີ​ລາຍ​ຊື່​ໃດ​ເທື່ອ" - "ເພີ່ມ​ລາຍ​ຊື່" "ແຕະຮູບເພື່ອເບິ່ງເບີໂທທັງໝົດ ຫຼື ແຕະຄ້າງໄວ້ເພື່ອຈັດລຳດັບໃໝ່" "​ລຶບ​ອອກ" + "ເລືອກທັງໝົດ" "​ໂທ​ດ້ວຍ​ວິ​ດີ​ໂອ" "ສົ່ງຂໍ້ຄວາມ" "ລາຍລະອຽດ​ການໂທ" @@ -213,11 +220,9 @@ "ເບີໂທລະສັບທີ່ບລັອກໄວ້" "%1$s ຖືກ​ບ​ລັອກ​ແລ້ວ." "ບັນ​ຊີ​ໂທ" - "ເປີດ​" "ຕັ້ງ​ການ​ອະ​ນຸ​ຍາດ" "ເພື່ອ​ເປີດ​ໃຊ້​ງານ​ການໂທດ່ວນ, ເປີດ​ການ​ອະ​ນຸ​ຍາດ​ລາຍ​ຊື່." "ເພື່ອ​ເບິ່ງ​ບັນ​ທຶກ​ການ​ໂທ​ຂອງ​ທ່ານ, ເປີດ​ການ​ອະ​ນຸ​ຍາດ​ໂທ​ລະ​ສັບ." - "ເພື່ອ​ເບິ່ງ​ລາຍ​ຊື່​ຂອງ​ທ່ານ, ເປີດ​ການ​ອະ​ນຸ​ຍາດ​ລາຍ​ຊື່" "ເພື່ອ​ເຂົ້າ​ຫາ​ຂໍ້​ຄວາມ​ສຽງ​ຂອງ​ທ່ານ, ເປີດ​ການ​ອະ​ນຸ​ຍາດ​ໂທ​ລະ​ສັບ." "ເພື່ອຄົ້ນຫາລາຍາຊື່ຂອງທ່ານ, ໃຫ້ເປີດການອະນຸຍາດລາຍຊື່." "ເພື່ອ​ເຮັດການໂທ, ເປີດ​ການ​ອະ​ນຸ​ຍາດ​ໂທ​ລະ​ສັບ." 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 a346d5d0a..e26a90927 100644 --- a/java/com/android/dialer/app/res/values-lt/strings.xml +++ b/java/com/android/dialer/app/res/values-lt/strings.xml @@ -82,11 +82,16 @@ "Pridėti laukimą" "Nustatymai" "Simuliatorius" + "Sukurti naują NS spart. klav." "Visi kontaktai" "Naudoti jutiklinę klaviatūrą" "Grįžti prie vykdomo skambučio" "Pridėti skambutį" "Gaunami skambučiai" + "Įjungiamas masinių veiksmų režimas" + "Masinių veiksmų režimas išjungtas" + "Pasirinkta: %1$s" + "Pasirinkimas atšauktas: %1$s" "Paleisti balso pašto pranešimus" "Žiūrėti kontaktą %1$s" "Skambinti %1$s" @@ -101,11 +106,17 @@ "Balso paštas" "%s sek." "%s min. %s sek." - "balso pašto praneš." - "balso pašto praneš." - "Taip" - "Ne" + "Atšaukti masinių veiksmų režimą" + "Ištrinti" + "Atšaukti" "Ištrinti pasir. %1$s?" + "Pasirinkta: %1$s" + + ""Ištrinti šiuos balso pašto pranešimus? "" + ""Ištrinti šiuos balso pašto pranešimus? "" + ""Ištrinti šiuos balso pašto pranešimus? "" + ""Ištrinti šiuos balso pašto pranešimus? "" + @string/call_log_header_today "%1$s, %2$s" "%1$02d:%2$02d" @@ -118,7 +129,6 @@ "MEID" "Įkeliama iš SIM kortelės..." "SIM kortelės adresatai" - "Nepasiekiama jokia kontaktų programa" "Paieška balsu nepasiekiama" "Negalima skambinti telefonu, nes Telefono programa išjungta." "Ieškoti adresatų" @@ -147,10 +157,9 @@ "Naujų praleistų skambučių: %s" "Dar nieko neįtraukėte į sparčiojo rinkimo sąrašą" "Pridėti mėgstamiausią" - "Dar neturite kontaktų" - "Pridėti kontaktą" "Palieskite vaizdą, kad peržiūrėtumėte visus numerius, arba palieskite ir palaikykite, kad pertvarkytumėte" "Pašalinti" + "Pasirinkti viską" "Vaizdo skambutis" "Siųsti pranešimą" "Išsami skambučio informacija" @@ -217,11 +226,9 @@ "Užblokuoti numeriai" "%1$s jau užblokuotas." "Skambinimo paskyros" - "Įjungti" "Nustatyti leidimus" "Jei norite įgalinti spartųjį rinkimą, įjunkite Kontaktų programos leidimą." "Jei norite peržiūrėti skambučių žurnalą, įjunkite Telefono programos leidimą." - "Jei norite peržiūrėti kontaktus, įjunkite Kontaktų programos leidimą." "Jei norite pasiekti balso paštą, įjunkite Telefono programos leidimą." "Kad galėtumėte ieškoti kontaktų, įjunkite Kontaktų leidimus." "Jei norite paskambinti, įjunkite Telefono programos leidimą." 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 808d7bfb7..8df2813c4 100644 --- a/java/com/android/dialer/app/res/values-lv/strings.xml +++ b/java/com/android/dialer/app/res/values-lv/strings.xml @@ -81,11 +81,16 @@ "Pievienot gaidīšanu" "Iestatījumi" "Simulators" + "Jaunās liet. saskarnes saīsne" "Visas kontaktpersonas" "Izmantot skārientoņu tastatūru" "Atgriezties pie pašreizējā zvana" "Pievienot zvanu" "Ienākošie zvani" + "Tiek atvērts lielapjoma darbību režīms" + "Tika aizvērts lielapjoma darbību režīms" + "Atlasīt: %1$s" + "Noņemt atlasi: %1$s" "Atskaņot balss pasta ziņojumu" "Skatīt kontaktpersonu %1$s" "Zvanīt: %1$s" @@ -100,11 +105,16 @@ "Balss pasts" "%s s" "%s min %s s" - "balss pasta ziņojums" - "balss pasta ziņojumi" - "Jā" - "Nē" + "Iziet no grupas darbību režīma" + "Dzēst" + "Atcelt" "Vai dzēst atlasi: %1$s?" + "Atlasīti: %1$s" + + ""Vai dzēst šos balss pasta ziņojumus? "" + ""Vai dzēst šos balss pasta ziņojumus? "" + ""Vai dzēst šos balss pasta ziņojumus? "" + @string/call_log_header_today "%1$s plkst. %2$s" "%1$02d:%2$02d" @@ -117,7 +127,6 @@ "MEID" "Notiek ielāde no SIM kartes..." "Kontaktpersonas SIM kartē" - "Nav pieejama neviena kontaktpersonu lietotne." "Meklēšana ar balsi nav pieejama." "Nevar veikt tālruņa zvanu, jo lietojumprogramma Tālrunis tika atspējota." "Meklēt kontaktpersonas" @@ -146,10 +155,9 @@ "Jauni neatbildēti zvani: %s" "Ātro zvanu sarakstā vēl nav nevienas kontaktpersonas." "Pievienot izlasei" - "Jums vēl nav nevienas kontaktpersonas." - "Pievienot kontaktpersonu" "Pieskarieties attēlam, lai skatītu visus numurus, vai pieskarieties attēlam un turiet to, lai veiktu pārkārtošanu." "Noņemt" + "Atlasīt visu" "Videozvans" "Sūtīt ziņojumu" "Informācija par zvanu" @@ -215,11 +223,9 @@ "Bloķētie numuri" "%1$s jau ir bloķēts." "Zvanu konti" - "Ieslēgt" "Iestatīt atļaujas" "Lai iespējotu ātros zvanus, ieslēdziet atļauju Kontaktpersonas." "Lai skatītu zvanu žurnālu, ieslēdziet atļauju Tālrunis." - "Lai skatītu kontaktpersonas, ieslēdziet atļauju Kontaktpersonas." "Lai piekļūtu balss pastam, ieslēdziet atļauju Tālrunis." "Lai meklētu savas kontaktpersonas, ieslēdziet atļauju Kontaktpersonas." "Lai veiktu zvanu, ieslēdziet atļauju Tālrunis." 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 6d2e533a5..953a05569 100644 --- a/java/com/android/dialer/app/res/values-mk/strings.xml +++ b/java/com/android/dialer/app/res/values-mk/strings.xml @@ -80,11 +80,16 @@ "Додај почекај" "Поставки" "Симулатор" + "Создај крат. за нов интерфејс" "Сите контакти" "Користи тастатура со звуци на допир" "Врати се на повик во тек" "Додај повик" "Дојдовни повици" + "Влегувате во режим на групно дејство" + "Излеговте од режим на групно дејство" + "Избрано е %1$s" + "Поништен е изборот на %1$s" "Преслушај говорна пошта" "Прикажи контакт %1$s" "Повикај %1$s" @@ -99,11 +104,15 @@ "Говорна пошта" "%s сек." "%s мин. %s сек." - "говорна пошта" - "говорни пораки" - "Да" - "Не" + "Откажи го режимот на групни дејства" + "Избриши" + "Откажи" "Да се избришат избраните %1$s?" + "Избрани се %1$s" + + ""Да се избришат говорните пораки? "" + ""Да се избришат говорните пораки? "" + @string/call_log_header_today "%1$s во %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Вчитување од SIM картичка..." "Контакти од SIM картичка" - "Не е достапна апликација за контакти" "Гласовното пребарување не е достапно" "Не може да се воспостави телефонски повик, бидејќи апликацијата Телефон е оневозможена." "Пребарај контакти" @@ -145,10 +153,9 @@ "%s нови пропуштени повици" "Сè уште немате никого на брзо бирање" "Додај омилено" - "Сè уште немате контакти" - "Додај контакт" "Допрете ја сликата за да ги видите сите броеви или допрете и држете за промена на редоследот" "Отстрани" + "Изберете ги сите" "Видеоповик" "Испрати порака" "Детали на повик" @@ -213,11 +220,9 @@ "Блокирани броеви" "%1$s веќе е блокиран." "Сметки за повикување" - "Вклучи" "Постави дозволи" "За да овозможите брзо бирање, вклучете ја дозволата за контакти." "За да ја видите евиденцијата на повици, вклучете ја дозволата за телефон." - "За да ги видите контактите, вклучете ја дозволата за контакти." "За да пристапите кон говорната пошта, вклучете ја дозволата за телефон." "За да ги пребарувате контактите, вклучете ги дозволите за контакти." "За да воспоставите повик, вклучете ја дозволата за телефон." 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 91accf442..0eef40748 100644 --- a/java/com/android/dialer/app/res/values-ml/strings.xml +++ b/java/com/android/dialer/app/res/values-ml/strings.xml @@ -80,11 +80,16 @@ "കാത്തിരിക്കൽ ചേർക്കുക" "ക്രമീകരണം" "സിമുലേറ്റർ" + "പുതിയ UI കുറുക്കുവഴി സൃഷ്‌ടിക്കുക" "എല്ലാ കോൺടാക്റ്റുകളും" "ടച്ച് ടോൺ കീപാഡ് ഉപയോഗിക്കുക" "വിളിച്ചുകൊണ്ടിരിക്കുന്ന കോളിലേക്ക് മടങ്ങുക" "കോൾ ചേർക്കുക" "ഇൻകമിംഗ് കോളുകൾ" + "ബൾക്ക് പ്രവർത്തന മോഡിലേക്ക് പ്രവേശിക്കുന്നു" + "ബൾക്ക് പ്രവർത്തന മോഡ് വിട്ടു" + "%1$s തിരഞ്ഞെടുത്തു" + "%1$s തിരഞ്ഞെടുത്തത് മാറ്റി" "വോയ്‌സ്‌മെയിൽ പ്ലേ ചെയ്യുക" "%1$s എന്ന കോൺടാക്റ്റ് കാണുക" "വിളിക്കുക %1$s" @@ -99,11 +104,15 @@ "വോയ്‌സ്‌മെയിൽ" "%s സെക്കൻഡ്" "%s മി. %s സെ." - "വോയ്‌സ്‌മെയിൽ" - "വോയ്‌സ്മെയിലുകൾ" - "അതെ" - "ഇല്ല" + "\'ബാച്ച് പ്രവർത്തനങ്ങൾ\' മോഡ് റദ്ദാക്കുക" + "ഇല്ലാതാക്കുക" + "റദ്ദാക്കൂ" "തിരഞ്ഞെടുത്ത %1$s ഇല്ലാതാക്കണോ?" + "%1$s എണ്ണം തിരഞ്ഞെടുത്തു" + + ""ഈ വോയ്‌സ്‌മെയിലുകൾ ഇല്ലാതാക്കണോ? "" + ""ഈ വോയ്‌സ്‌മെയിൽ ഇല്ലാതാക്കണോ? "" + @string/call_log_header_today "%1$s, %2$s-ന്" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "സിം കാർഡിൽ നിന്നും ലോഡുചെയ്യുന്നു…" "സിം കാർഡ് കോൺടാക്റ്റുകൾ" - "കോൺടാക്റ്റ് അപ്ലിക്കേഷനൊന്നും ലഭ്യമല്ല" "വോയ്‌സ് തിരയൽ ലഭ്യമല്ല" "ഫോൺ അപ്ലിക്കേഷൻ പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നതിനാൽ ഫോൺ കോൾ ചെയ്യാനാകില്ല." "കോണ്‍‌ടാക്റ്റുകള്‍ തിരയുക" @@ -145,10 +153,9 @@ "%s പുതിയ മിസ്‌ഡ് കോളുകൾ" "ഇതുവരെ ആരും നിങ്ങളുടെ സ്പീഡ് ഡയലിൽ ഇല്ല" "പ്രിയപ്പെട്ടത് ചേർക്കുക" - "നിങ്ങൾക്ക് ഇതുവരെയും കോൺടാക്റ്റുകൾ ഒന്നുമില്ല." - "ഒരു കോണ്‍ടാക്റ്റ് ചേര്‍ക്കുക" "എല്ലാ നമ്പറുകളും കാണാൻ ചിത്രം സ്‌പർശിക്കുക അല്ലെങ്കിൽ വീണ്ടും ക്രമീകരിക്കാൻ സ്‌പർശിച്ച് പിടിക്കുക" "നീക്കംചെയ്യുക" + "എല്ലാം തിരഞ്ഞെടുക്കുക" "വീഡിയോ കോള്‍" "ഒരു സന്ദേശം അയയ്‌ക്കുക" "കോൾ വിശദാംശങ്ങൾ" @@ -213,11 +220,9 @@ "ബ്ലോക്കുചെയ്ത നമ്പറുകൾ" "ഇതിനകം തന്നെ %1$s ബ്ലോക്കുചെയ്തിരിക്കുന്നു" "കോളിംഗ് അക്കൗണ്ട്" - "ഓണാക്കുക" "അനുമതികൾ സജ്ജമാക്കുക" "സ്പീഡ് ഡയൽ പ്രവർത്തനക്ഷമാക്കുന്നതിന്, \'കോൺടാക്റ്റുകൾ\' അനുമതി ഓണാക്കുക." "നിങ്ങളുടെ കോൾ ലോഗ് കാണുന്നതിന്, \'ഫോൺ\' അനുമതി ഓണാക്കുക." - "നിങ്ങളുടെ കോൺടാക്റ്റുകൾ കാണുന്നതിന്, \'കോൺടാക്റ്റുകൾ\' അനുമതി ഓണാക്കുക." "നിങ്ങളുടെ വോയ്‌സ്‌മെയിൽ ആക്സസ് ചെയ്യുന്നതിന്, \'ഫോൺ\' അനുമതി ഓണാക്കുക." "നിങ്ങളുടെ കോൺടാക്റ്റുകൾ തിരയുന്നതിന് കോൺടാക്റ്റുകൾക്കുള്ള അനുമതികൾ ഓണാക്കുക." "കോൾ വിളിക്കുന്നതിന്, \'ഫോൺ\' അനുമതി ഓണാക്കുക." 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 a07a826d5..e0cd98710 100644 --- a/java/com/android/dialer/app/res/values-mn/strings.xml +++ b/java/com/android/dialer/app/res/values-mn/strings.xml @@ -80,11 +80,16 @@ "Хүлээлт нэмэх" "Тохиргоо" "Симулятор" + "Шинэ UI үүсгэх товчлол" "Бүх харилцагчид" "Хүрэлтээр дуугардаг гар ашиглах" "Үргэлжилж буй дуудлага руу буцах" "Дуудлага нэмэх" "Ирж буй дуудлага" + "Багц үйлдлийн горимд орж байна" + "Багц үйлдлийн горимоос гарсан" + "%1$s сонгосон" + "%1$s сонголтыг болиулсан" "Дуут шууданг тоглуулах" "%1$s харилцагчийг харах" "%1$s руу залгах" @@ -99,11 +104,15 @@ "Дуут шуудан" "%s сек" "%s минут %s секунд" - "дуут шуудан" - "дуут шуудан" - "Тийм" - "Үгүй" + "Багц үйлдлийн горимыг цуцлах" + "Устгах" + "Цуцлах" "Сонгосон %1$s-г устгах уу?" + "%1$s сонгосон" + + ""Эдгээр дуут шууданг устгах уу? "" + ""Энэ дуут шууданг устгах уу? "" + @string/call_log_header_today "%1$s %2$s-д" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "SIM картаас уншиж байна…" "SIM картны харилцагчид" - "Ямар ч харилцагчдын апликейшн байхгүй байна." "Дуут хайлт хийх боломжгүй байна" "Утас аппликешныг идэвхгүйжүүлсэн тул утасны дуудлага хийх боломжгүй." "Харилцагчдаас хайх" @@ -145,10 +153,9 @@ "%s шинэ аваагүй дуудлага" "Таны яаралтай залгах тохиргоон дээр одоогоор харилцагч байхгүй байна" "Таалагдсан хэсэгт нэмэх" - "Танд одоогоор харилцагч байхгүй байна" - "Харилцагч нэмэх" "Бүх дугаарыг харахын тулд зурганд хүрнэ үү эсвэл жагсаалтыг өөрчлөхийн тулд удаан дарна уу." "Хасах" + "Бүгдийг сонгох" "Видео дуудлага" "Зурвас илгээх" "Дуудлагын мэдээлэл" @@ -213,11 +220,9 @@ "Блоклосон дугаар" "%1$s-г аль хэдийн блоклосон байна." "Дуудах бүртгэл" - "Идэвхжүүлэх" "Зөвшөөрөл тохируулах" "Яаралтай дуудлагыг идэвхжүүлэхийн тулд Харилцагчдын зөвшөөрлийг идэвхжүүлнэ үү." "Дуудлагын жагсаалтыг харахын тулд утасны зөвшөөрлийг идэвхжүүлнэ үү." - "Харилцагчдаа харахын тулд Харилцагчдын зөвшөөрлийг идэвхжүүлнэ үү." "Дуут шууданд хандахын тулд Утасны зөвшөөрлийг идэвхжүүлнэ үү." "Харилцагчаа хайхын тулд, Харилцагчийн жагсаалтын зөвшөөрлийг идэвхжүүлнэ үү." "Залгахын тулд Утасны зөвшөөрлийг идэвхжүүлнэ үү." 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 5aca7a5e2..70e6d410c 100644 --- a/java/com/android/dialer/app/res/values-mr/strings.xml +++ b/java/com/android/dialer/app/res/values-mr/strings.xml @@ -80,11 +80,16 @@ "प्रतीक्षा करा जोडा" "सेटिंग्ज" "सिम्युलेटर" + "नवीन UI शॉर्टकट तयार करा" "सर्व संपर्क" "स्‍पर्श टोन कीपॅडचा वापर करा" "चालू असलेल्या कॉलवर परत जा" "कॉल जोडा" "येणारे कॉल" + "मोठ्या प्रमाणात क्रिया मोडमध्ये प्रवेश करीत आहे" + "मोठ्या प्रमाणात क्रिया मोड सोडत आहे" + "%1$s निवडले" + "%1$s ची निवड रद्द केली" "व्हॉइसमेल प्ले करा" "%1$s संपर्क पहा" "%1$s ला कॉल करा" @@ -99,11 +104,15 @@ "व्हॉइसमेल" "%s सेकंद" "%s मिनिट %s सेकंद" - "व्हॉइसमेल" - "व्हॉइसमेल" - "होय" - "नाही" + "बॅच क्रिया मोड रद्द करा" + "हटवा" + "रद्द करा" "निवडलेले %1$s हटवायचेे?" + "%1$s निवडले" + + ""हा व्हॉइसमेल हटवायचा? "" + ""हे व्हॉइसमेल हटवायचे? "" + @string/call_log_header_today "%1$s रोजी %2$s वाजता" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "सिम कार्ड मधून लोड करीत आहे..." "सिम कार्ड संपर्क" - "कोणताही संपर्क अॅप उपलब्ध नाही" "व्हॉइस शोध उपलब्ध नाही" "फोन अनुप्रयोग अक्षम केला गेला असल्याने फोन कॉल करणे शक्य नाही." "संपर्क शोधा" @@ -145,10 +153,9 @@ "%s नवीन सुटलेले कॉल" "अद्याप आपल्‍या स्पीड डायलवर कोणीही नाही" "एक आवडते जोडा" - "आपल्‍याकडे अद्याप कोणतेही संपर्क नाहीत" - "एक संपर्क जोडा" "सर्व नंबर पाहण्यासाठी प्रतिमेस स्पर्श करा किंवा पुन्हा क्रम लावण्यासाठी स्पर्श करा आणि धरून ठेवा" "काढा" + "सर्व निवडा" "व्हिडिओ कॉल" "एक संदेश पाठवा" "कॉल तपशील" @@ -213,11 +220,9 @@ "अवरोधित केलेले नंबर" "%1$s आधीच अवरोधित केलेला आहे." "कॉल करण्याची खाती" - "चालू करा" "परवानग्या सेट करा" "स्पीड डायल सक्षम करण्‍यासाठी, संपर्क परवानगी चालू करा." "आपला कॉल लॉग पाहण्‍यासाठी, फोन परवानगी चालू करा." - "आपले संपर्क पाहण्‍यासाठी, संपर्क परवानगी चालू करा." "आपल्‍या व्हॉइसमेलमध्‍ये प्रवेश करण्‍यासाठी, फोन परवानगी चालू करा." "आपले संपर्क शोधण्‍यासाठी, संपर्क परवानग्या चालू करा." "कॉल करण्यासाठी, फोन परवानगी चालू करा." 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 9dbe541d9..f58f08f02 100644 --- a/java/com/android/dialer/app/res/values-ms/strings.xml +++ b/java/com/android/dialer/app/res/values-ms/strings.xml @@ -80,11 +80,16 @@ "Tambah penungguan" "Tetapan" "Simulator" + "Buat Pintasan UI Baharu" "Semua kenalan" "Gunakan pad kekunci nada sentuh" "Kembali ke panggilan yang sedang berlangsung" "Tambah panggilan" "Panggilan masuk" + "Memasuki mod tindakan pukal" + "Meninggalkan mod tindakan pukal" + "%1$s dipilih" + "%1$s dinyahpilih" "Mainkan mel suara" "Lihat kenalan %1$s" "Panggil %1$s" @@ -99,11 +104,15 @@ "Mel suara" "%s saat" "%s min %s saat" - "mel suara" - "mel suara" - "Ya" - "Tidak" + "Batalkan mod tindakan kelompok" + "Padam" + "Batal" "Padam %1$s yang dipilih?" + "%1$s dipilih" + + ""Padamkan mel suara ini? "" + ""Padamkan mel suara ini? "" + @string/call_log_header_today "%1$s pada %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Memuatkan dari kad SIM..." "Kenalan kad SIM" - "Tiada apl kenalan tersedia" "Carian suara tidak tersedia" "Tidak boleh membuat panggilan telefon kerana aplikasi Telefon telah dilumpuhkan." "Cari dalam kenalan" @@ -145,10 +153,9 @@ "%s panggilan terlepas baharu" "Belum ada sesiapa pada dail pantas anda" "Tambahkan kegemaran" - "Anda belum mempunyai sebarang kenalan" - "Tambahkan kenalan" "Sentuh imej untuk melihat semua nombor atau sentuh & tahan untuk menyusun semula" "Alih keluar" + "Pilih semua" "Panggilan video" "Hantar mesej" "Butiran panggilan" @@ -213,11 +220,9 @@ "Nombor yang disekat" "%1$s sudah disekat." "Akaun panggilan" - "Hidupkan" "Tetapkan kebenaran" "Untuk mendayakan dail laju, hidupkan kebenaran Kenalan." "Untuk melihat log panggilan anda, hidupkan kebenaran Telefon." - "Untuk melihat kenalan anda, hidupkan kebenaran Kenalan." "Untuk mengakses mel suara anda, hidupkan kebenaran Telefon." "Untuk mencari kenalan anda, hidupkan kebenaran Kenalan." "Untuk membuat panggilan, hidupkan kebenaran Telefon." 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 2b51b2054..60c3271a0 100644 --- a/java/com/android/dialer/app/res/values-my/strings.xml +++ b/java/com/android/dialer/app/res/values-my/strings.xml @@ -80,11 +80,16 @@ "စောင့်ဆိုင်းခြင်း ထည့်ပါ" "ဆက်တင်များ" "အသစ်ကဲ့သို့ တုပသည့်စနစ်" + "UI ဖြတ်လမ်းလင့်ခ်အသစ် လုပ်ရန်" "လိပ်စာများအားလုံး" "touch tone ကီးခလုတ် ကိုအသုံးပြုပါ" "ဖုန်းပြန်ခေါ်မှု ပြုလုပ်နေစဉ်" "ဖုန်းခေါ်မှု ထပ်ထည့်ပါ" "အဝင်ခေါ်ဆိုမှုများ" + "တပြိုင်နက်တည်း စုပြုံလုပ်ဆောင်ချက်မုဒ်ကို ထည့်သွင်းခြင်း" + "တပြိုင်နက်တည်း စုပြုံလုပ်ဆောင်ချက်မုဒ်မှ ထွက်လိုက်သည်" + "ရွေးချယ်ထားသော %1$s" + "မရွေးချယ်ထားသော %1$s" "အသံပို့စာ နားထောင်ရန်" "%1$s လိပ်စာကြည့်ရန်" "%1$s ကိုခေါ်ပါ" @@ -99,11 +104,15 @@ "အသံစာပို့စနစ်" "%s စက္ကန့်" "%s မိနစ် %s စက္ကန့်" - "အသံမေးလ်" - "အသံမေးလ်များ" - "Yes" - "No" + "တပြိုင်နက်တည်း စုပြုံလုပ်ဆောင်ချက်များမုဒ်ကိ ပယ်ဖျက်ရန်" + "ဖျက်ပါ" + "မလုပ်တော့" "ရွေးထားသော %1$s ကို ဖျက်လိုပါသလား။" + "%1$s ကို ရွေးချယ်ထားသည်" + + ""ဤအသံမေးလ်များကို ဖျက်မလား။ "" + ""ဤအသံမေးလ်ကို ဖျက်မလား။ "" + @string/call_log_header_today "%1$s %2$s ၌" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEIDနံပါတ်" "ဆင်းမ်ကဒ်မှ ဖွင့်နေပါသည်..." "ဆင်းမ်ကဒ်မှ အဆက်အသွယ်များ" - "အဆက်အသွယ်များ app မရှိ" "အသံဖြင့် ရှာဖွေမှု မရှိ" "ဖုန်း အပလီကေးရှင်းကို ပိတ်ထား၍ ဖုန်း ခေါ်ဆိုမှု မပြုလုပ်နိုင်ခဲ့ပါ။" "အဆက်အသွယ်များရှာပါ" @@ -145,10 +153,9 @@ "လွတ်သွားသောဖုန်း %s ခါ" "သင်၏အမြန်ခေါ်စာရင်းတွင် မည်သူမျှ မရှိသေးပါ" "အနှစ်သက်ဆုံးတစ်ခု ထည့်ရန်" - "သင့်တွင် မည်သည့်အဆက်အသွယ်မျှ မရှိသေးပါ" - "အဆက်အသွယ်တစ်ယောက် ထည့်မည်" "နံပါတ်အားလုံးကိုကြည့်ရန် ပုံကိုထိပါ (သို့) ပြန်စီရန် ထိပြီးဖိထားပါ" "ဖယ်ရှာခြင်း" + "အားလုံးကို ရွေးချယ်ပါ" "ဗီဒီယို ခေါ်ဆိုမှု" "စာ တစ်စောင် ပို့ပါ" "ဖုန်းခေါ်မှု အသေးစိတ်အချက်အလက်" @@ -213,11 +220,9 @@ "ပိတ်ထားသည့် နံပါတ်များ" "%1$s အားပိတ်ဆို့ထားပြီးပါပြီ။" "ခေါ်ဆိုသော အကောင့်များ" - "ဖွင့်ထားရန်" "ခွင့်ပြုချက်များ သတ်မှတ်မည်" "မြန်နှုန်းမြင့်ဖုန်းခေါ်ဆိုမှုကို ဖွင့်ရန်၊ အဆက်အသွယ်ခွင့်ပြုချက်ကို ဖွင့်ပါ။" "ခေါ်ဆိုမှုမှတ်တမ်းကို ကြည့်ရန်၊ ဖုန်းခွင့်ပြုချက်ကို ဖွင့်ပါ။" - "အဆက်အသွယ်များကိုကြည့်ရန်၊ အဆက်အသွယ်ခွင့်ပြုချက်ကို ဖွင့်ပါ။" "အသံမေးလ်ကိုအသုံးပြုရန်၊ ဖုန်းခွင့်ပြုချက်ကိုဖွင့်ပါ။" "သင့်အဆက်အသွယ်များကို ရှာဖွေရန်၊ အဆက်အသွယ်ခွင့်ပြုချက်များကို ဖွင့်ပါ။" "ဖုန်းခေါ်ဆိုရန်၊ ဖုန်းခွင့်ပြုချက်ကိုဖွင့်ပါ။" 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 d92edc649..344a26a51 100644 --- a/java/com/android/dialer/app/res/values-nb/strings.xml +++ b/java/com/android/dialer/app/res/values-nb/strings.xml @@ -80,11 +80,16 @@ "Legg til Vent" "Innstillinger" "Simulator" + "Nytt grensesnitt – lag snarvei" "Alle kontakter" "Bruk tonetastatur" "Gå tilbake til aktiv samtale" "Legg til en samtale" "Innkommende samtaler" + "Starter massehandlingsmodus" + "Massehandlingsmodus er avsluttet" + "Du har valgt %1$s" + "Du har valgt bort %1$s" "Spill av talemelding" "Se kontakten %1$s" "Ring %1$s" @@ -99,11 +104,15 @@ "Telefonsvarer" "%s sek" "%s min %s sek" - "talepost" - "talepost" - "Ja" - "Nei" + "Avbryt massehandlinsmodus" + "Slett" + "Avbryt" "Slett markert %1$s?" + "%1$s er valgt" + + ""Vil du slette disse talemeldingene? "" + ""Vil du slette denne talemeldingen? "" + @string/call_log_header_today "%1$s kl. %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Henter fra SIM-kort…" "Kontakter på SIM-kort" - "Ingen kontaktapper er tilgjengelige" "Talesøk er ikke tilgjengelig" "Kan ikke ringe fordi Telefon-appen er deaktivert." "Søk i kontakter" @@ -145,10 +153,9 @@ "%s nye tapte anrop" "Du har ingen på hurtigoppringning ennå" "Legg til en favoritt" - "Du har ingen kontakter ennå" - "Legg til en kontakt" "Trykk på bildet for å se alle numrene, eller trykk og hold for å omorganisere" "Fjern" + "Velg alle" "Videoanrop" "Send en melding" "Samtaleinformasjon" @@ -213,11 +220,9 @@ "Blokkerte numre" "%1$s er allerede blokkert." "Ringekontoer" - "Slå på" "Angi tillatelser" "For å slå på hurtigoppringning, slå på Kontakter-tillatelsen." "For å se samtaleloggen din, slå på Telefon-tillatelsen." - "For å se kontaktene dine, slå på Kontakter-tillatelsen." "For å få tilgang til talepostkassen, slå på Telefon-tillatelsen." "For å søke i kontaktene dine, slå på tillatelser for Kontakter." "For å ringe, slå på Telefon-tillatelsen." 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 90a3016e2..5e70c40b6 100644 --- a/java/com/android/dialer/app/res/values-ne/strings.xml +++ b/java/com/android/dialer/app/res/values-ne/strings.xml @@ -80,11 +80,16 @@ "पर्खाइ थप्नुहोस्" "सेटिङ्हरू" "सिम्युलेटर" + "नयाँ UI सर्टकट सिर्जना गर्ने" "सबै सम्पर्कहरू" "स्पर्श टोन किप्याडको प्रयोग गर्नुहोस्" "हुदै गरेको कलमा फर्कनुहोस्" "कल थप्नुहोस्" "आगमन कलहरू" + "बल्क कारबाही सम्बन्धी मोडमा प्रवेश गर्दै" + "बल्क कारबाही सम्बन्धी मोड छोडियो" + "%1$s चयन गरियो" + "%1$s चयन हटाइयो" "भ्वाइसमेल बजाउनुहोस्" "%1$s सम्पर्क हेर्नुहोस्" "कल %1$s" @@ -99,11 +104,15 @@ "भ्वाइसमेल" "%s सेकेन्ड" "%s मिनेट %s सकेन्ड" - "भ्वाइस मेल" - "भ्वाइस मेलहरू" - "हो" - "होइन" + "ब्याच सम्बन्धी कारबाहीको मोडलाई रद्द गर्नुहोस्" + "मेट्नुहोस्" + "रद्द गर्नुहोस्" "चयन गरिएका %1$s लाई मेटाउने हो?" + "%1$s चयन गरियो" + + ""यी भ्वाइस मेलहरू मेट्ने हो? "" + ""यो भ्वाइस मेल मेट्ने हो? "" + @string/call_log_header_today "%1$s मा %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "SIM कार्डबाट लोड हुँदै" "SIM कार्ड सम्पर्कहरू" - "कुनै पनि सम्पर्क अनुप्रयोग उपलब्ध छैन" "आवाज खोजी उपलब्ध छैन" "फोन अनुप्रयोग असक्षम गरिएकोले फोन गर्न सकिँदैन।" "सम्पर्कहरू खोज्नुहोस्" @@ -145,10 +153,9 @@ "%s नयाँ छुटेका कलहरु" "तपाईँको स्पिड डायलमा अझसम्म कोही छैन" "एक मनपर्ने थप्नुहोस्" - "तपाईँसँग अझसम्म कुनै सम्पर्कहरू छैनन्" - "एउटा सम्पर्क थप्नुहोस्" "सबै नम्बरहरू हेर्न छविलाई छुनुहोस् वा पुन:क्रमबद्ध गर्न छोइराख्नुहोस्" "हटाउँनुहोस्" + "सबैलाई चयन गर्नुहोस्" "भिडियो कल" "सन्देश पठाउनुहोस्" "कल विवरणहरु" @@ -213,11 +220,9 @@ "रोकिएका नम्बरहरू" "%1$s पहिले नै रोकिएको छ।" "खाता कलिङ" - "सक्रिय पार्नुहोस्" "अनुमतिहरू सेट गर्नुहोस्" "तीव्र डायल सक्षम गर्न, सम्पर्क अनुमति सक्षम गर्नुहोस्।" "आफ्नो कल लग हेर्न, फोन अनुमति सक्रिय गर्नुहोस्।" - "आफ्नो सम्पर्क हेर्न सम्पर्क अनुमति सक्रिय गर्नुहोस्।" "आफ्नो भ्वाइस मेल पहुँच गर्न, फोन अनुमति सक्रिय गर्नुहोस्" "तपाईँको सम्पर्कहरू खोज गर्न सम्पर्क अनुमतिहरू सक्रिय गर्नुहोस्।" "कल गर्न फोन अनुमति सक्रिय गर्नुहोस्।" 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 5f41b8063..dbd29bc78 100644 --- a/java/com/android/dialer/app/res/values-nl/strings.xml +++ b/java/com/android/dialer/app/res/values-nl/strings.xml @@ -80,11 +80,16 @@ "Wachten toevoegen" "Instellingen" "Simulator" + "Snelkoppeling voor nieuwe UI" "Alle contacten" "Toetsen voor toonkiezen gebruiken" "Terug naar actief gesprek" "Oproep toevoegen" "Inkomende oproepen" + "Modus voor bulkacties openen" + "Modus voor bulkacties verlaten" + "%1$s geselecteerd" + "Selectie van %1$s opgeheven" "Voicemail afspelen" "Contact %1$s bekijken" "%1$s bellen" @@ -99,11 +104,15 @@ "Voicemail" "%s sec." "%s min. %s sec." - "voicemail" - "voicemails" - "Ja" - "Nee" + "Modus voor batchacties annuleren" + "Verwijderen" + "Annuleren" "Geselecteerde %1$s verwijderen?" + "%1$s geselecteerd" + + ""Deze voicemails verwijderen? "" + ""Deze voicemail verwijderen? "" + @string/call_log_header_today "%1$s om %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Laden vanaf SIM-kaart..." "Contacten op SIM-kaart" - "Geen app voor contacten beschikbaar" "Gesproken zoekopdracht niet beschikbaar" "Kan niet bellen omdat de Telefoon-app is uitgeschakeld." "Contacten zoeken" @@ -145,10 +153,9 @@ "%s nieuwe gemiste oproepen" "Er staat nog niemand in je snelkeuzelijst" "Een favoriet toevoegen" - "Je hebt nog geen contacten" - "Contact toevoegen" "Tik op de afbeelding om alle nummers te bekijken of tik op de afbeelding en houd vast om opnieuw te rangschikken" "Verwijderen" + "Alles selecteren" "Videogesprek" "Een bericht verzenden" "Oproepdetails" @@ -213,11 +220,9 @@ "Geblokkeerde nummers" "%1$s is al geblokkeerd." "Oproepaccounts" - "Inschakelen" "Toestemmingen instellen" "Als je de snelkeuzefunctie wilt inschakelen, schakel je de machtiging voor Contacten in." "Als je je gesprekkenlijst wilt bekijken, schakel je de machtiging voor Telefoon in." - "Als je je contacten wilt bekijken, schakel je de machtiging voor Contacten in." "Als je je voicemail wilt beluisteren, schakel je de machtiging voor Telefoon in." "Als je naar contacten wilt zoeken, schakel je de contacttoestemming in." "Als je iemand wilt bellen, schakel je de machtiging voor Telefoon in." 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 d92edc649..344a26a51 100644 --- a/java/com/android/dialer/app/res/values-no/strings.xml +++ b/java/com/android/dialer/app/res/values-no/strings.xml @@ -80,11 +80,16 @@ "Legg til Vent" "Innstillinger" "Simulator" + "Nytt grensesnitt – lag snarvei" "Alle kontakter" "Bruk tonetastatur" "Gå tilbake til aktiv samtale" "Legg til en samtale" "Innkommende samtaler" + "Starter massehandlingsmodus" + "Massehandlingsmodus er avsluttet" + "Du har valgt %1$s" + "Du har valgt bort %1$s" "Spill av talemelding" "Se kontakten %1$s" "Ring %1$s" @@ -99,11 +104,15 @@ "Telefonsvarer" "%s sek" "%s min %s sek" - "talepost" - "talepost" - "Ja" - "Nei" + "Avbryt massehandlinsmodus" + "Slett" + "Avbryt" "Slett markert %1$s?" + "%1$s er valgt" + + ""Vil du slette disse talemeldingene? "" + ""Vil du slette denne talemeldingen? "" + @string/call_log_header_today "%1$s kl. %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Henter fra SIM-kort…" "Kontakter på SIM-kort" - "Ingen kontaktapper er tilgjengelige" "Talesøk er ikke tilgjengelig" "Kan ikke ringe fordi Telefon-appen er deaktivert." "Søk i kontakter" @@ -145,10 +153,9 @@ "%s nye tapte anrop" "Du har ingen på hurtigoppringning ennå" "Legg til en favoritt" - "Du har ingen kontakter ennå" - "Legg til en kontakt" "Trykk på bildet for å se alle numrene, eller trykk og hold for å omorganisere" "Fjern" + "Velg alle" "Videoanrop" "Send en melding" "Samtaleinformasjon" @@ -213,11 +220,9 @@ "Blokkerte numre" "%1$s er allerede blokkert." "Ringekontoer" - "Slå på" "Angi tillatelser" "For å slå på hurtigoppringning, slå på Kontakter-tillatelsen." "For å se samtaleloggen din, slå på Telefon-tillatelsen." - "For å se kontaktene dine, slå på Kontakter-tillatelsen." "For å få tilgang til talepostkassen, slå på Telefon-tillatelsen." "For å søke i kontaktene dine, slå på tillatelser for Kontakter." "For å ringe, slå på Telefon-tillatelsen." 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 76d4b9b70..33afd5824 100644 --- a/java/com/android/dialer/app/res/values-pa/strings.xml +++ b/java/com/android/dialer/app/res/values-pa/strings.xml @@ -80,11 +80,16 @@ "ਉਡੀਕ ਜੋੜੋ" "ਸੈਟਿੰਗਾਂ" "ਸਿਮੁਲੇਟਰ" + "ਨਵਾਂ UI ਸ਼ਾਰਟਕੱਟ ਬਣਾਓ" "ਸਾਰੇ ਸੰਪਰਕ" "ਟਚ ਟੋਨ ਕੀਪੈਡ ਵਰਤੋ" "ਪ੍ਰਗਤੀ ਵਿੱਚ ਕਾਲ ਤੇ ਵਾਪਸ ਜਾਓ" "ਕਾਲ ਜੋੜੋ" "ਇਨਕਮਿੰਗ ਕਾਲਾਂ" + "ਬਲਕ ਕਾਰਵਾਈ ਮੋਡ ਵਿੱਚ ਦਾਖਲ ਹੋਇਆ ਜਾ ਰਿਹਾ ਹੈ" + "ਬਲਕ ਕਾਰਵਾਈ ਮੋਡ ਨੂੰ ਛੱਡਿਆ" + "%1$s ਨੂੰ ਚੁਣਿਆ ਗਿਆ" + "%1$s ਨੂੰ ਅਣ-ਚੁਣਿਆ ਕੀਤਾ ਗਿਆ" "ਵੌਇਸਮੇਲ ਪਲੇ ਕਰੋ" "ਸੰਪਰਕ %1$s ਦੇਖੋ" "%1$s ਨੂੰ ਕਾਲ ਕਰੋ" @@ -99,11 +104,15 @@ "ਵੌਇਸਮੇਲ" "%s ਸਕਿੰਟ" "%s ਮਿੰਟ %s ਸਕਿੰਟ" - "ਵੌਇਸਮੇਲ" - "ਵੌਇਸਮੇਲਾਂ" - "ਹਾਂ" - "ਨਹੀਂ" + "ਬੈਚ ਕਾਰਵਾਈਆਂ ਮੋਡ ਨੂੰ ਰੱਦ ਕਰੋ" + "ਮਿਟਾਓ" + "ਰੱਦ ਕਰੋ" "ਕੀ ਚੁਣੀ(ਆਂ) ਹੋਈ(ਆਂ) %1$s ਨੂੰ ਮਿਟਾਉਣਾ ਹੈ?" + "%1$s ਨੂੰ ਚੁਣਿਆ ਗਿਆ" + + ""ਕੀ ਇਸ ਵੌਇਸਮੇਲ ਨੂੰ ਮਿਟਾਉਣਾ ਹੈ? "" + ""ਕੀ ਇਹਨਾਂ ਵੌਇਸਮੇਲਾਂ ਨੂੰ ਮਿਟਾਉਣਾ ਹੈ? "" + @string/call_log_header_today "%1$s ਨੂੰ %2$s ਵਜੇ" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "SIM ਕਾਰਡ ਵਿੱਚੋਂ ਲੋਡ ਕਰ ਰਿਹਾ ਹੈ…" "SIM ਕਾਰਡ ਸੰਪਰਕ" - "ਕੋਈ ਸੰਪਰਕ ਐਪ ਉਪਲਬਧ ਨਹੀਂ" "ਵੌਇਸ ਖੋਜ ਉਪਲਬਧ ਨਹੀਂ ਹੈ" "ਇੱਕ ਫੋਨ ਕਾਲ ਨਹੀਂ ਕਰ ਸਕਦਾ ਕਿਉਂਕਿ ਫੋਨ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਅਯੋਗ ਬਣਾਇਆ ਗਿਆ ਹੈ।" "ਸੰਪਰਕ ਖੋਜੋ" @@ -145,10 +153,9 @@ "%s ਨਵੀਆਂ ਮਿਸਡ ਕਾਲਾਂ" "ਅਜੇ ਤੁਹਾਡੇ ਸਪੀਡ ਡਾਇਲ \'ਤੇ ਕੋਈ ਵੀ ਵਿਅਕਤੀ ਨਹੀਂ ਹੈ" "ਕੋਈ ਮਨਪਸੰਦ ਸ਼ਾਮਲ ਕਰੋ" - "ਤੁਹਾਡੇ ਕੋਲ ਅਜੇ ਕੋਈ ਸੰਪਰਕ ਨਹੀਂ ਹਨ।" - "ਕੋਈ ਸੰਪਰਕ ਸ਼ਾਮਲ ਕਰੋ" "ਸਾਰੇ ਨੰਬਰਾਂ ਨੂੰ ਵੇਖਣ ਲਈ ਚਿਤਰ ਨੂੰ ਸਪਰਸ਼ ਕਰੋ ਜਾਂ ਦੁਬਾਰਾ ਕ੍ਰਮਬੱਧ ਕਰਨ ਲਈ ਸਪਰਸ਼ ਕਰੋ ਅਤੇ ਦਬਾਈ ਰੱਖੋ" "ਹਟਾਓ" + "ਸਭ ਚੁਣੋ" "ਵੀਡੀਓ ਕਾਲ" "ਇੱਕ ਸੁਨੇਹਾ ਭੇਜੋ" "ਕਾਲ ਵੇਰਵੇ" @@ -213,11 +220,9 @@ "ਬਲੌਕ ਕੀਤੇ ਗਏ ਨੰਬਰ" "%1$s ਪਹਿਲਾਂ ਹੀ ਬਲੌਕ ਕੀਤਾ ਹੋਇਆ ਹੈ।" "ਕਾਲਿੰਗ ਖਾਤੇ" - "ਚਾਲੂ ਕਰੋ" "ਅਨੁਮਤੀਆਂ ਸੈੱਟ ਕਰੋ" "ਸਪੀਡ ਡਾਇਲ ਨੂੰ ਸਮਰੱਥ ਕਰਨ ਲਈ, ਸੰਪਰਕ ਅਨੁਮਤੀ ਚਾਲੂ ਕਰੋ।" "ਆਪਣਾ ਕਾਲ ਲੌਗ ਵੇਖਣ ਲਈ, ਫ਼ੋਨ ਅਨੁਮਤੀ ਚਾਲੂ ਕਰੋ।" - "ਆਪਣੇ ਸੰਪਰਕਾਂ ਨੂੰ ਵੇਖਣ ਲਈ, ਸੰਪਰਕ ਅਨੁਮਤੀ ਚਾਲੂ ਕਰੋ।" "ਆਪਣੀ ਵੌਇਸਮੇਲ ਐਕਸੈਸ ਕਰਨ ਲਈ, ਫ਼ੋਨ ਅਨੁਮਤੀ ਚਾਲੂ ਕਰੋ।" "ਆਪਣੇ ਸੰਪਰਕਾਂ ਦੀ ਖੋਜ ਕਰਨ ਲਈ,, ਸੰਪਰਕ ਅਨੁਮਤੀਆਂ ਨੂੰ ਚਾਲੂ ਕਰੋ।" "ਕਾਲ ਕਰਨ ਲਈ, ਫ਼ੋਨ ਅਨੁਮਤੀ ਚਾਲੂ ਕਰੋ।" 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 76adfe579..7f6027c51 100644 --- a/java/com/android/dialer/app/res/values-pl/strings.xml +++ b/java/com/android/dialer/app/res/values-pl/strings.xml @@ -82,11 +82,16 @@ "Dodaj oczekiwanie" "Ustawienia" "Symulator" + "Utwórz skrót do nowego interfejsu" "Wszystkie kontakty" "Użyj klawiatury tonowej" "Wróć do aktywnego połączenia" "Dodaj połączenie" "Połączenia przychodzące" + "Włączono tryb działań zbiorczych" + "Wyłączono tryb działań zbiorczych" + "Wybrano: %1$s" + "Anulowano wybór: %1$s" "Odtwórz pocztę głosową" "Wyświetl kontakt %1$s" "Zadzwoń do: %1$s" @@ -101,11 +106,17 @@ "Poczta głosowa" "%s s" "%s min %s s" - "wiadomości głosowe" - "wiadomości głosowe" - "Tak" - "Nie" + "Anuluj tryb działań zbiorczych" + "Usuń" + "Anuluj" "Usunąć wybrane %1$s?" + "Wybrane: %1$s" + + ""Usunąć te wiadomości głosowe? "" + ""Usunąć te wiadomości głosowe? "" + ""Usunąć te wiadomości głosowe? "" + ""Usunąć tę wiadomość głosową? "" + @string/call_log_header_today "%1$s o %2$s" "%1$02d:%2$02d" @@ -118,7 +129,6 @@ "Numer MEID" "Wczytuję z karty SIM…" "Kontakty z karty SIM" - "Nie jest dostępna aplikacja do obsługi kontaktów" "Wyszukiwanie głosowe jest niedostępne" "Nie można zadzwonić, ponieważ aplikacja Telefon została wyłączona." "Przeszukuj kontakty" @@ -147,10 +157,9 @@ "Nowe nieodebrane połączenia: %s" "Lista szybkiego wybierania jest pusta" "Dodaj do ulubionych" - "Nie masz jeszcze żadnych kontaktów" - "Dodaj kontakt" "Kliknij obraz, by zobaczyć wszystkie numery, lub kliknij go i przytrzymaj, by zmienić kolejność" "Usuń" + "Zaznacz wszystkie" "Rozmowa wideo" "Wyślij wiadomość" "Szczegóły połączenia" @@ -217,11 +226,9 @@ "Zablokowane numery" "Numer %1$s jest już zablokowany." "Konta telefoniczne" - "Włącz" "Ustaw uprawnienia" "Aby włączyć szybkie wybieranie, włącz uprawnienie Kontakty." "Aby zobaczyć swój rejestr połączeń, włącz uprawnienie Telefon." - "Aby zobaczyć swoje kontakty, włącz uprawnienie Kontakty." "Aby uzyskać dostęp do poczty głosowej, włącz uprawnienie Telefon." "Aby wyszukać kontakty, włącz uprawnienia Kontakty." "Aby nawiązać połączenie, włącz uprawnienie Telefon." 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 780ca07db..768ce57d4 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 @@ -80,11 +80,16 @@ "Adicionar espera" "Configurações" "Simulador" + "Criar atalho para a nova IU" "Todos os contatos" "Usar teclado multifrequencial" "Retornar para a chamada em espera" "Ad. cham." "Chamadas recebidas" + "Entrando no modo de ação em massa" + "Saindo do modo de ação em massa" + "%1$s selecionado" + "%1$s não selecionado" "Reproduzir mensagem de voz" "Visualizar contato %1$s" "Ligar para %1$s" @@ -99,11 +104,15 @@ "Correio de voz" "%s seg" "%s m %s s" - "correio de voz" - "correios de voz" - "Sim" - "Não" + "Cancelar modo de ações em lote" + "Excluir" + "Cancelar" "Excluir a seleção de %1$s?" + "Itens selecionados: %1$s" + + ""Excluir este correio de voz? "" + ""Excluir estes correios de voz? "" + @string/call_log_header_today "%1$s às %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Carregando do cartão SIM..." "Contatos do cartão SIM" - "Nenhum app de contatos disponível" "A pesquisa por voz não está disponível" "Não é possível fazer uma chamada porque o app Telefone foi desativado." "Pesquisar contatos" @@ -145,10 +153,9 @@ "%s novas chamadas perdidas" "Ainda não há ninguém na sua discagem rápida" "Adicionar favorito" - "Você ainda não tem contatos" - "Adicionar um contato" "Toque na imagem para ver todos os números ou toque e segure para reordenar" "Remover" + "Selecionar tudo" "Videochamada" "Enviar uma mensagem" "Detalhes da chamada" @@ -213,11 +220,9 @@ "Números bloqueados" "O número %1$s já está bloqueado." "Contas de chamadas" - "Ativar" "Definir permissões" "Para ativar a discagem rápida, ative a permissão para o app Contatos." "Para ver seu registro de chamadas, ative a permissão para o app Telefone." - "Para ver seus contatos, ative a permissão para o app Contatos." "Para acessar seu correio de voz, ative a permissão para o app Telefone." "Para pesquisar seus contatos, ative as permissões para \"Contatos\"." "Para fazer uma chamada, ative a permissão para o app Telefone." 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 95fa75c7e..3c636e1d6 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 @@ -80,11 +80,16 @@ "Adicionar espera" "Definições" "Simulador" + "Criar novo atalho de IU" "Todos os contactos" "Utilizar teclado numérico com tons de toque" "Voltar à chamada em curso" "Adicionar chamada" "Chamadas recebidas" + "A entrar no modo de ação em massa…" + "Saiu do modo de ação em massa" + "%1$s selecionado" + "%1$s não selecionado" "Reproduzir mensagem de correio de voz" "Ver o contacto %1$s" "Ligar a %1$s" @@ -99,11 +104,15 @@ "Correio de voz" "%s seg" "%s min. %s seg." - "mensagem de correio de voz" - "mensagens de correio de voz" - "Sim" - "Não" + "Cancelar modo de ações em lote" + "Eliminar" + "Cancelar" "Pretende eliminar a(s) %1$s selecionada(s)?" + "%1$s selecionada(s)" + + ""Pretende eliminar esta(s) mensagem(ns) de correio de voz? "" + ""Pretende eliminar estas mensagens de correio de voz? "" + @string/call_log_header_today "%1$s às %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "A carregar a partir do cartão SIM..." "Contactos no cartão SIM" - "Não existe nenhuma aplicação de contactos disponível" "Pesquisa por voz não disponível" "Não é possível efetuar uma chamada porque a aplicação Telefone foi desativada." "Pesquisar contactos" @@ -145,10 +153,9 @@ "%s chamadas não atendidas novas" "Ainda não tem ninguém na marcação rápida" "Adicionar um favorito" - "Ainda não tem nenhum contacto" - "Adicionar um contacto" "Toque na imagem para ver todos os números ou toque sem soltar para reordenar" "Remover" + "Selecionar tudo" "Videochamada" "Enviar uma mensagem" "Detalhes da chamada" @@ -213,11 +220,9 @@ "Números bloqueados" "%1$s já está bloqueado." "Contas de chamadas" - "Ativar" "Definir autorizações" "Para ativar a marcação rápida, ative a autorização Contactos." "Para ver o registo de chamadas, ative a autorização Telemóvel." - "Para ver os seus contactos, ative a autorização Contactos." "Para aceder ao correio de voz, ative a autorização Telemóvel." "Para pesquisar os seus contactos, ative as autorizações Contactos." "Para efetuar uma chamada, ative a autorização Telemóvel." 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 780ca07db..768ce57d4 100644 --- a/java/com/android/dialer/app/res/values-pt/strings.xml +++ b/java/com/android/dialer/app/res/values-pt/strings.xml @@ -80,11 +80,16 @@ "Adicionar espera" "Configurações" "Simulador" + "Criar atalho para a nova IU" "Todos os contatos" "Usar teclado multifrequencial" "Retornar para a chamada em espera" "Ad. cham." "Chamadas recebidas" + "Entrando no modo de ação em massa" + "Saindo do modo de ação em massa" + "%1$s selecionado" + "%1$s não selecionado" "Reproduzir mensagem de voz" "Visualizar contato %1$s" "Ligar para %1$s" @@ -99,11 +104,15 @@ "Correio de voz" "%s seg" "%s m %s s" - "correio de voz" - "correios de voz" - "Sim" - "Não" + "Cancelar modo de ações em lote" + "Excluir" + "Cancelar" "Excluir a seleção de %1$s?" + "Itens selecionados: %1$s" + + ""Excluir este correio de voz? "" + ""Excluir estes correios de voz? "" + @string/call_log_header_today "%1$s às %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Carregando do cartão SIM..." "Contatos do cartão SIM" - "Nenhum app de contatos disponível" "A pesquisa por voz não está disponível" "Não é possível fazer uma chamada porque o app Telefone foi desativado." "Pesquisar contatos" @@ -145,10 +153,9 @@ "%s novas chamadas perdidas" "Ainda não há ninguém na sua discagem rápida" "Adicionar favorito" - "Você ainda não tem contatos" - "Adicionar um contato" "Toque na imagem para ver todos os números ou toque e segure para reordenar" "Remover" + "Selecionar tudo" "Videochamada" "Enviar uma mensagem" "Detalhes da chamada" @@ -213,11 +220,9 @@ "Números bloqueados" "O número %1$s já está bloqueado." "Contas de chamadas" - "Ativar" "Definir permissões" "Para ativar a discagem rápida, ative a permissão para o app Contatos." "Para ver seu registro de chamadas, ative a permissão para o app Telefone." - "Para ver seus contatos, ative a permissão para o app Contatos." "Para acessar seu correio de voz, ative a permissão para o app Telefone." "Para pesquisar seus contatos, ative as permissões para \"Contatos\"." "Para fazer uma chamada, ative a permissão para o app Telefone." 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 725ff4a3c..b85f84987 100644 --- a/java/com/android/dialer/app/res/values-ro/strings.xml +++ b/java/com/android/dialer/app/res/values-ro/strings.xml @@ -81,11 +81,16 @@ "Adăugați interval de așteptare" "Setări" "Simulator" + "Creați comandă rapidă IU nouă" "Toată agenda" "Tastatura tactilă cu sunet" "Reveniți la apelul în curs" "Adăugați un apel" "Apeluri de intrare" + "Se intră în modul acțiune în bloc" + "Ați ieșit din modul acțiune în bloc" + "S-a selectat %1$s" + "S-a deselectat %1$s" "Redați mesajul vocal" "Afișați persoana din agendă %1$s" "Apelați %1$s" @@ -100,11 +105,16 @@ "Mesagerie vocală" "%s secunde" "%s min. %s sec." - "mesagerie vocală" - "mesaje vocale" - "Da" - "Nu" + "Anulați modul de acțiuni în lot" + "Ștergeți" + "Anulați" "Ștergeți cele %1$s selectate?" + "%1$s selectate" + + ""Ștergeți aceste mesaje vocale? "" + ""Ștergeți aceste mesaje vocale? "" + ""Ștergeți acest mesaj vocal? "" + @string/call_log_header_today "%1$s la %2$s" "%1$02d:%2$02d" @@ -117,7 +127,6 @@ "MEID" "Se încarcă de pe cardul SIM..." "Persoanele din agendă de pe cardul SIM" - "Nu este disponibilă nicio aplicație pentru agendă" "Căutarea vocală nu este disponibilă" "Nu se poate efectua un apel telefonic, deoarece aplicația Telefon a fost dezactivată." "Căutați în Agendă" @@ -146,10 +155,9 @@ "%s apeluri nepreluate noi" "Nicio persoană de contact setată pentru apelarea rapidă" "Adăugați o persoană de contact preferată" - "Nu aveți încă persoane de contact" - "Adăugați o persoană de contact" "Atingeți imaginea pentru a vedea toate numerele sau atingeți lung pentru reordonare" "Eliminați" + "Selectați tot" "Apel video" "Trimiteți un mesaj" "Detaliile apelului" @@ -215,11 +223,9 @@ "Numere blocate" "%1$s este deja blocat." "Conturi pentru apelare" - "Activați" "Setați permisiunile" "Pentru a activa apelarea rapidă, activați permisiunea Agendă." "Pentru a vedea jurnalul de apeluri, activați permisiunea Telefon." - "Pentru a vedea persoanele de contact, activați permisiunea Agendă." "Pentru a accesa mesageria vocală, activați permisiunea Telefon." "Pentru a căuta în persoanele de contact, activați permisiunea Agendă." "Pentru a apela, activați permisiunea Telefon." 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 557832bcd..91441cc56 100644 --- a/java/com/android/dialer/app/res/values-ru/strings.xml +++ b/java/com/android/dialer/app/res/values-ru/strings.xml @@ -82,11 +82,16 @@ "Добавить паузу" "Настройки" "Симулятор" + "Создать ярлык для нового интерфейса" "Все контакты" "Панель тонального набора" "Вернуться к текущему вызову" "Добавить вызов" "Входящие вызовы" + "Вы вошли в режим массового действия" + "Вы вышли из режима массового действия" + "Выбран объект %1$s" + "Выбор объекта %1$s отменен" "Прослушать голосовую почту" "Просмотреть данные: %1$s" "Вызов: %1$s" @@ -101,11 +106,17 @@ "Голосовая почта" "%s сек." "%s мин. %s сек." - "голосовое сообщение" - "голосовые сообщения" - "Да" - "Нет" + "Отмена режима массового действия" + "Удалить" + "Отмена" "Удалить %1$s?" + "Выбрано: %1$s" + + ""Удалить эти голосовые сообщения? "" + ""Удалить эти голосовые сообщения? "" + ""Удалить эти голосовые сообщения? "" + ""Удалить эти голосовые сообщения? "" + @string/call_log_header_today "%1$s в %2$s" "%1$02d:%2$02d" @@ -118,7 +129,6 @@ "MEID" "Загрузка с SIM-карты…" "Контакты на SIM-карте" - "Нет приложения для работы с контактами" "Голосовой поиск недоступен" "Нельзя совершать телефонные звонки, поскольку приложение \"Телефон\" отключено." "Поиск в контактах" @@ -147,10 +157,9 @@ "Пропущенных вызовов: %s" "Нет номеров для быстрого набора" "Настроить быстрый набор" - "Нет контактов" - "Добавить контакт" "Коснитесь изображения, чтобы увидеть все номера, или нажмите и удерживайте, чтобы изменить порядок" "Удалить" + "Выбрать все" "Видеовстреча" "Отправить сообщение" "Сведения о вызове" @@ -217,11 +226,9 @@ "Заблокированные номера" "%1$s уже заблокирован." "Аккаунты для звонков" - "Включить" "Задать разрешения" "Чтобы настроить быстрый набор, предоставьте приложению разрешение \"Контакты\"." "Чтобы открыть список вызовов, предоставьте приложению разрешение \"Телефон\"." - "Чтобы открыть список контактов, предоставьте приложению разрешение \"Контакты\"." "Чтобы получить доступ к голосовой почте, предоставьте приложению разрешение \"Телефон\"." "Для поиска контактов включите разрешение \"Контакты\"." "Чтобы позвонить, предоставьте приложению разрешение \"Телефон\"." 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 329d89e8d..8a748d53c 100644 --- a/java/com/android/dialer/app/res/values-si/strings.xml +++ b/java/com/android/dialer/app/res/values-si/strings.xml @@ -80,11 +80,16 @@ "රැඳී සිටීම එක් කරන්න" "සැකසීම්" "සමාකෘතිය" + "නව UI කෙටිමග තනන්න" "සියලුම සම්බන්ධතා" "ස්පර්ශ නාද යතුරුපෑඩය භාවිතා කරන්න" "පවතින ඇමතුමට නැවත යන්න" "ඇමතුමක් එක් කරන්න" "එන ඇමතුම්" + "තොග ක්‍රියා ප්‍රකාරය ඇතුළු කරමින්" + "තොග ක්‍රියා ප්‍රකාරය හැර යන ලදී" + "%1$s තෝරා ගන්නා ලදී" + "%1$s තෝරා ගැනීම ඉවත් කරන ලදී" "හඬ තැපෑල ධාවනය කිරීම" "%1$s සම්බන්ධතාවය බලන්න" "%1$s අමතන්න" @@ -99,11 +104,15 @@ "හඬ තැපෑල" "තත් %s" "මිනි %s තත් %s" - "හඬ තැපෑල" - "හඬ තැපැල්" - "ඔව්" - "නැත" + "කාණ්ඩ ක්‍රියා ප්‍රකාරය අවලංගු කරන්න" + "මකන්න" + "අවලංගු කරන්න" "තෝරා ගත් %1$s මකන්නද?" + "%1$s තෝරා ගන්නා ලදි" + + ""මෙම හඬ තැපැල් මකන්නද? "" + ""මෙම හඬ තැපැල් මකන්නද? "" + @string/call_log_header_today "%1$s දින %2$sට" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "SIM පතෙන් පූරණය කරමින්…" "SIM පත් සම්බන්ධතා" - "සබඳතා යෙදුමක් ලබාගත නොහැකිය" "හඬ සෙවුම ලබාගත නොහැකිය" "දුරකථන යෙදුම අබල කර ඇති නිසා දුරකථන ඇමතුම ලබාගැනීම කළ නොහැක." "සම්බන්ධතා සෙවීම" @@ -145,10 +153,9 @@ "නව මඟ හැරුණු ඇමතුම් %s" "ඔබගේ වේග ඩයල් එකේ තවමත් කවුරුවත් නැහැ" "ප්‍රියතම ලෙස එක් කරන්න" - "ඔබ තවමත් සම්බන්ධතා නැහැ" - "සම්බන්ධතාවයක් එක් කරන්න" "සියලු අංක බැලීමට රූපය ස්පර්ශ කරන්න නැතහොත් නැවත අනුපිළිවෙළට සැකසීමට ස්පර්ශ කර අල්ලාගෙන සිටින්න" "ඉවත් කරන්න" + "සියල්ල තෝරන්න" "වීඩියෝ ඇමතුම" "පණිවිඩයක් යවන්න" "ඇමතුම් විස්තර" @@ -213,11 +220,9 @@ "අවහිර කළ අංක" "%1$s දැනටමත් අවහිර කර ඇත." "ගිණුම් ඇමතීම" - "ක්‍රියාත්මක කරන්න" "අවසර සකසන්න" "වේග ඩයල් කිරීම සබල කිරීමට, සම්බන්ධතා අවසරය ක්‍රියාත්මක කරන්න." "ඔබේ ඇමතුම් ලොගය බැලීමට, දුරකථන අවසරය ක්‍රියාත්මක කරන්න." - "ඔබේ සම්බන්ධතා බැලීමට, සම්බන්ධතා අවසරය ක්‍රියාත්මක කරන්න." "ඔබේ හඬ තැපෑල වෙත ප්‍රවේශ වීමට, දුරකථන අවසරය ක්‍රියාත්මක කරන්න." "ඔබේ සම්බන්ධතා සෙවීමට, සම්බන්ධතා අවසර ක්‍රියාත්මක කරන්න." "ඇමතුමක් ලබා ගැනීමට, දුරකථන අවසරය ක්‍රියාත්මක කරන්න." 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 60b63d520..e84febb17 100644 --- a/java/com/android/dialer/app/res/values-sk/strings.xml +++ b/java/com/android/dialer/app/res/values-sk/strings.xml @@ -82,11 +82,16 @@ "Pridať čakanie" "Nastavenia" "Simulátor" + "Vyt. skratku na nové rozhranie" "Všetky kontakty" "Použiť dotykovú tónovú klávesnicu" "Návrat k prebiehajúcemu hovoru" "Pridať hovor" "Prichádzajúce hovory" + "Vstupuje sa do režimu hromadných akcií" + "Odišli ste z režimu hromadných akcií" + "Položka %1$s bola vybraná" + "Výber položky %1$s bol zrušený" "Prehrať hlasovú správu" "Zobraziť kontakt %1$s" "Zavolať kontakt %1$s" @@ -101,11 +106,17 @@ "Hlasová schránka" "%s s" "%s min. %s s" - "hlasová správa" - "hlasové správy" - "Áno" - "Nie" + "Zrušiť režim hromadných akcií" + "Odstrániť" + "Zrušiť" "Chcete odstrániť vybraté položky (%1$s)?" + "Vybraté: %1$s" + + ""Chcete odstrániť tieto hlasové správy? "" + ""Chcete odstrániť tieto hlasové správy? "" + ""Chcete odstrániť tieto hlasové správy? "" + ""Chcete odstrániť túto hlasovú správu? "" + @string/call_log_header_today "%1$s%2$s" "%1$02d:%2$02d" @@ -118,7 +129,6 @@ "MEID" "Prebieha načítavanie z SIM karty..." "Kontakty na SIM karte" - "Nie je k dispozícii žiadna aplikácia na kontakty" "Hlasové vyhľadávanie nie je k dispozícii" "Nie je možné volať, pretože aplikácia Telefón bola deaktivovaná." "Hľadať v kontaktoch" @@ -147,10 +157,9 @@ "Nové zmeškané hovory: %s" "V rýchlej voľbe zatiaľ nemáte žiadny kontakt" "Pridať obľúbený kontakt" - "Zatiaľ nemáte žiadne kontakty" - "Pridať kontakt" "Klepnutím na obrázok môžete zobraziť všetky čísla. Pridržaním obrázka môžete zmeniť poradie." "Odstrániť" + "Vybrať všetko" "Videohovor" "Odoslať správu" "Podrobnosti hovoru" @@ -217,11 +226,9 @@ "Blokované čísla" "Číslo %1$s je už blokované." "Telefónne účty" - "Zapnúť" "Nastaviť povolenia" "Ak chcete aktivovať rýchlu voľbu, zapnite povolenie Kontakty." "Ak si chcete zobraziť denník hovorov, zapnite povolenie Telefón." - "Ak si chcete zobraziť kontakty, zapnite povolenie Kontakty." "Ak chcete používať hlasovú schránku, zapnite povolenie Telefón." "Ak chcete hľadať kontakty, zapnite povolenie Kontakty." "Ak chcete volať, zapnite povolenie Telefón." 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 b46b99ab5..495b6e802 100644 --- a/java/com/android/dialer/app/res/values-sl/strings.xml +++ b/java/com/android/dialer/app/res/values-sl/strings.xml @@ -82,11 +82,16 @@ "Dodaj premor" "Nastavitve" "Simulator" + "Ustvari bliž. za novi up. vm." "Vsi stiki" "Uporabi številčnico za tonsko klicanje" "Nazaj na klic, ki poteka" "Dodaj klic" "Dohodni klici" + "Prehod v način množičnega dejanja" + "Prehod iz načina množičnega dejanja" + "Izbrano: %1$s" + "Preklican izbor: %1$s" "Predvajanje sporočil glasovne pošte" "Ogled stika %1$s" "Pokliči %1$s" @@ -101,11 +106,17 @@ "Glasovna pošta" "%s s" "%s min %s s" - "sporočilo v odzivniku" - "sporočila v odzivniku" - "Da" - "Ne" + "Prekliči način množičnega dejanja" + "Izbriši" + "Prekliči" "Želite izbrisati %1$s?" + "Št. izbranih: %1$s" + + ""Želite izbrisati ta sporočila v odzivniku? "" + ""Želite izbrisati ta sporočila v odzivniku? "" + ""Želite izbrisati ta sporočila v odzivniku? "" + ""Želite izbrisati ta sporočila v odzivniku? "" + @string/call_log_header_today "%1$s ob %2$s" "%1$02d:%2$02d" @@ -118,7 +129,6 @@ "MEID" "Nalaganje s kartice SIM ..." "Stiki na kartici SIM" - "Ni aplikacije za stike" "Glasovno iskanje ni na voljo" "Ni mogoče opraviti telefonskega klica, ker je aplikacija Telefon onemogočena." "Iskanje stikov" @@ -147,10 +157,9 @@ "Št. novih zgrešenih klicev: %s" "Na seznamu za hitro klicanje nimate še nikogar" "Dodajte priljubljenega" - "Nimate še stikov" - "Dodajte stik" "Dotaknite se slike, da prikažete vse številke, ali pa se je dotaknite in pridržite, da spremenite vrstni red." "Odstrani" + "Izberi vse" "Videoklic" "Pošljite sporočilo" "Podrobnosti klica" @@ -217,11 +226,9 @@ "Blokirane številke" "Telefonska številka %1$s je že blokirana." "Računi za klicanje" - "Vklop" "Nastavi dovoljenja" "Če želite omogočiti hitro klicanje, vklopite dovoljenje za stike." "Če si želite ogledati dnevnik klicev, vklopite dovoljenje za telefon." - "Če si želite ogledati stike, vklopite dovoljenje za stike." "Če želite dostopati do sporočil v odzivniku, vklopite dovoljenje za telefon." "Če želite iskati po stikih, vklopite dovoljenje za stike." "Če želite klicati, vklopite dovoljenje za telefon." 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 6a274fcd2..809fd8a22 100644 --- a/java/com/android/dialer/app/res/values-sq/strings.xml +++ b/java/com/android/dialer/app/res/values-sq/strings.xml @@ -80,11 +80,16 @@ "Shto një pritje" "Cilësimet" "Simuluesi" + "Krijo një shkurtore për ndërfaqen e re të përdoruesit" "Të gjitha kontaktet" "Përdor bllokun e tasteve" "Kthehu te telefonata" "Shto një telefonatë" "Telefonatat hyrëse" + "Po hyn në modalitetin e veprimit në masë" + "U largove nga modaliteti i veprimit në masë" + "U zgjodh %1$s" + "Zgjedhja e %1$s u anulua" "Luaj postën zanore" "Shiko kontaktin %1$s" "Telefono %1$s" @@ -99,11 +104,15 @@ "Posta zanore" "%s sekonda" "%s min. e %s sek." - "posta zanore" - "postat zanore" - "Po" - "Jo" + "Anulo modalitetin e veprimeve në grup" + "Fshi" + "Anulo" "Të fshihen %1$s të zgjedhura?" + "%1$s të zgjedhura" + + ""Të fshihen këto posta zanore? "" + ""Të fshihet kjo postë zanore? "" + @string/call_log_header_today "%1$s%2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Po ngarkon nga karta SIM…" "Kontaktet e kartës SIM" - "Nuk mund të përdoret asnjë aplikacion për kontaktet" "Kërkimi me zë nuk mundësohet" "Telefonata nuk mund të bëhet sepse aplikacioni \"Telefoni\" është i çaktivizuar." "Kërko për kontakte" @@ -145,10 +153,9 @@ "%s telefonata të reja të humbura" "Askush nuk është ende në thirrjen tënde të shpejtuar" "Shto një të preferuar" - "Nuk ke ende kontakte" - "Shto një kontakt" "Prek imazhin për të parë të gjithë numrat ose mbaje të shtypur për ta pozicionuar përsëri" "Hiq" + "Zgjidh të gjitha" "Telefonatë me video" "Dërgo një mesazh" "Detajet e telefonatës" @@ -213,11 +220,9 @@ "Numrat e bllokuar" "%1$s është i bllokuar tashmë." "Llogaritë e telefonatave" - "Aktivizo" "Cakto lejet" "Për të aktivizuar thirrjen e shpejtuar, aktivizo lejen e Kontakteve." "Për të parë evidencën e telefonatave, aktivizo lejen e Telefonit." - "Për të parë kontaktet, aktivizo lejen e Kontakteve." "Për të pasur qasje në postën zanore, aktivizo lejen e Telefonit." "Për të kërkuar kontaktet, aktivizo lejet e Kontakteve" "Për të kryer një telefonatë, aktivizo lejen e Telefonit." 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 0def958d4..6f85c0ba8 100644 --- a/java/com/android/dialer/app/res/values-sr/strings.xml +++ b/java/com/android/dialer/app/res/values-sr/strings.xml @@ -81,11 +81,16 @@ "Додај чекање" "Подешавања" "Симулатор" + "Направите пречицу за нови UI" "Сви контакти" "Употребите бројчаник за тонско бирање" "Врати се на позив који је у току" "Додај позив" "Долазни позиви" + "Улазите у режим групних радњи" + "Изашли сте из режима групних радњи" + "Изабрано је %1$s" + "Опозван је избор %1$s" "Пуштање говорне поште" "Прикажи контакт %1$s" "Позови %1$s" @@ -100,11 +105,16 @@ "Говорна пошта" "%s сек" "%s мин %s сек" - "говорну поруку" - "говорне поруке" - "Да" - "Не" + "Откажите режим групних радњи" + "Избриши" + "Откажи" "Желите ли да избришете изабрану(е) %1$s?" + "Изабраних: %1$s" + + ""Желите ли да избришете ове говорне поруке? "" + ""Желите ли да избришете ове говорне поруке? "" + ""Желите ли да избришете ове говорне поруке? "" + @string/call_log_header_today "%1$s у %2$s" "%1$02d:%2$02d" @@ -117,7 +127,6 @@ "MEID" "Учитава се са SIM картице…" "Контакти на SIM картици" - "Нема доступне апликације за контакте" "Гласовна претрага није доступна" "Није могуће упутити телефонски позив јер је апликација Телефон онемогућена." "Претражи контакте" @@ -146,10 +155,9 @@ "Нових пропуштених позива: %s" "Немате ниједан контакт на брзом бирању" "Додај омиљен контакт" - "Још увек немате ниједан контакт" - "Додај контакт" "Додирните слику да бисте видели све бројеве или додирните и задржите да бисте им променили распоред" "Уклони" + "Изабери све" "Видео позив" "Пошаљи поруку" "Детаљи позива" @@ -215,11 +223,9 @@ "Блокирани бројеви" "%1$s је већ блокиран." "Налози за позивање" - "Укључи" "Подеси дозволе" "Да бисте омогућили брзо бирање, укључите дозволу за Контакте." "Да бисте видели евиденцију позива, укључите дозволу за Телефон." - "Да бисте видели контакте, укључите дозволу за Контакте." "Да бисте приступили говорној пошти, укључите дозволу за Телефон." "Да бисте претражили контакте, укључите дозволе за Контакте." "Да бисте упутили позив, укључите дозволу за Телефон." 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 75aa731f9..e8446cab1 100644 --- a/java/com/android/dialer/app/res/values-sv/strings.xml +++ b/java/com/android/dialer/app/res/values-sv/strings.xml @@ -80,11 +80,16 @@ "Lägg till väntetid" "Inställningar" "Simulator" + "Skapa genväg till anv.gränssn." "Alla kontakter" "Använd tonvalstelefon" "Återvänd till pågående samtal" "Lägg t. samt." "Inkommande samtal" + "Öppnar läget för massåtgärd" + "Stängde läget för massåtgärd" + "Markerade %1$s" + "Avmarkerade %1$s" "Spela upp röstmeddelande" "Visa kontakten %1$s" "Ring %1$s" @@ -99,11 +104,15 @@ "Röstbrevlåda" "%s sekund" "%s min %s sek" - "röstbrevlåda" - "röstmeddelanden" - "Ja" - "Nej" + "Avbryt läget för massåtgärd" + "Radera" + "Avbryt" "Vill du radera markerade %1$s?" + "%1$s har markerats" + + ""Vill du ta bort dessa röstmeddelanden? "" + ""Vill du ta bort det här röstmeddelandet? "" + @string/call_log_header_today "%1$s kl. %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Läser in från SIM-kort…" "Kontakter från SIM-kort" - "Det finns inga appar för kontakter" "Röstsökning är inte tillgänglig" "Det går inte att ringa eftersom appen Telefon har inaktiverats." "Sök efter kontakter" @@ -145,10 +153,9 @@ "%s nya missade samtal" "Du har ingen kontakt som snabbval ännu" "Lägg till en favorit" - "Du har inga kontakter ännu" - "Lägg till en kontakt" "Tryck på bilden för att visa alla nummer eller tryck länge för att ändra ordningen" "Ta bort" + "Markera alla" "Videosamtal" "Skicka ett meddelande" "Samtalsinfo" @@ -213,11 +220,9 @@ "Blockerade nummer" "%1$s är redan blockerat." "Konton för samtal" - "Aktivera" "Ange behörigheter" "Du måste aktivera behörigheten Kontakter för att kunna använda snabbuppringning." "Du måste aktivera behörigheten Telefon för att kunna visa samtalsloggen." - "Du måste aktivera behörigheten Kontakter för att kunna visa kontakterna." "Du måste aktivera behörigheten Telefon för att kunna komma åt röstmeddelanden." "Aktivera behörigheter för Kontakter om du vill söka bland kontakterna." "Du måste aktivera behörigheten Telefon för att kunna ringa." 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 d3b8392d4..142aaf0de 100644 --- a/java/com/android/dialer/app/res/values-sw/strings.xml +++ b/java/com/android/dialer/app/res/values-sw/strings.xml @@ -80,11 +80,16 @@ "Ongeza kusubiri" "Mipangilio" "Kielelezo" + "Unda Mkato Mpya wa Kiolesura" "Anwani zote" "Tumia kibao cha kuchapa cha sauti na kugusa" "Rudi kwa simu inayoendelea" "Ongeza simu" "Simu zinazoingia" + "Unaingia katika hali ya kutekeleza vitendo vingi" + "Umeondoka katika hali ya kutekeleza vitendo vingi" + "Umeteua %1$s" + "Umebatilisha uteuzi wa %1$s" "Sikiliza ujumbe wa sauti" "Angalia anwani %1$s" "Pigia %1$s" @@ -99,11 +104,15 @@ "Ujumbe wa sauti" "Sekunde %s" "Dak %s sek %s" - "ujumbe wa sauti" - "ujumbe wa sauti" - "Ndiyo" - "Hapana" + "Ghairi hali ya kutekeleza vitendo vingi" + "Futa" + "Ghairi" "Je, ungependa kufuta %1$s uliochagua?" + "%1$s zimechaguliwa" + + ""Je, unataka kufuta kila ujumbe wa sauti ulioonyeshwa? "" + ""Je, unataka kufuta ujumbe huu wa sauti? "" + @string/call_log_header_today "%1$s saa %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Inapakia kutoka SIM kadi..." "Anwani za SIM kadi" - "Hakuna programu za mawasiliano zinazopatikana" "Kutafuta kwa kutamka hakupatikani" "Haiwezi kupiga simu kwa sababu programu ya Simu imezimwa." "Tafuta anwani" @@ -145,10 +153,9 @@ "Simu %s za karibuni ambazo hazikujibiwa" "Hakuna mtu aliye katika orodha yako ya watu unaowasiliana nao zaidi" "Ongeza anwani unazopenda zaidi" - "Bado huna anwani zozote" - "Ongeza anwani" "Gusa picha ili uone nambari zote ama uguse na kushikilia ili upange upya" "Ondoa" + "Chagua zote" "Hangout ya Video" "Tuma SMS" "Maelezo ya simu" @@ -213,11 +220,9 @@ "Nambari zilizozuiwa" "%1$s tayari imezuiwa." "Akaunti za simu" - "Washa" "Weka ruhusa" "Ili kuwasha kipengele cha unaowasiliana nao zaidi, washa ruhusa ya Anwani." "Ili uone rekodi yako ya nambari za simu, washa ruhusa ya Simu." - "Ili uone anwani zako, washa ruhusa ya Anwani." "Ili ufikie ujumbe wako wa sauti, washa ruhusa ya Simu." "Ili utafute anwani zako, washa ruhusa za Anwani." "Ili upige simu, washa ruhusa ya Simu." 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 afb852b6d..e270a3cee 100644 --- a/java/com/android/dialer/app/res/values-ta/strings.xml +++ b/java/com/android/dialer/app/res/values-ta/strings.xml @@ -80,11 +80,16 @@ "காத்திருப்பைச் சேர்" "அமைப்பு" "சிமுலேட்டர்" + "புதிய UI குறுக்குவழியை உருவாக்கு" "எல்லா தொடர்புகளும்" "டச் டோன் விசைப்பலகையைப் பயன்படுத்தவும்" "செயலிலுள்ள அழைப்பிற்குத் திரும்பு" "அழைப்பைச் சேர்" "உள்வரும் அழைப்புகள்" + "மொத்தச் செயல் பயன்முறையில் நுழைகிறீர்கள்" + "மொத்தச் செயல் பயன்முறையிலிருந்து வெளியேறிவிட்டீர்கள்" + "தேர்ந்தெடுத்த %1$s" + "தேர்வுநீக்கிய %1$s" "குரலஞ்சலை இயக்கு" "%1$s தொடர்பைக் காட்டு" "%1$s ஐ அழை" @@ -99,11 +104,15 @@ "குரலஞ்சல்" "%s வி" "%s நிமிடம் %s வினாடி" - "குரலஞ்சல்" - "குரலஞ்சல்கள்" - "ஆம்" - "வேண்டாம்" + "தொகுப்புச் செயல்கள் பயன்முறையை ரத்துசெய்யும்" + "நீக்கு" + "ரத்துசெய்" "தேர்ந்தெடுத்த %1$sஐ நீக்கவா?" + "%1$s தேர்ந்தெடுக்கப்பட்டன" + + ""இந்தக் குரலஞ்சல்களை நீக்கவா? "" + ""இந்தக் குரலஞ்சலை நீக்கவா? "" + @string/call_log_header_today "%1$s அன்று %2$s மணிக்கு" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "சிம் கார்டிலிருந்து ஏற்றுகிறது…" "சிம் கார்டின் தொடர்புகள்" - "தொடர்புகள் பயன்பாடு எதுவுமில்லை" "குரல் தேடல் இல்லை" "Phone பயன்பாடு முடக்கப்பட்டுள்ளதால், ஃபோன் அழைப்பைச் செய்ய முடியாது." "தொடர்புகளைத் தேடு" @@ -145,10 +153,9 @@ "%s புதிய தவறிய அழைப்புகள்" "இன்னும் விரைவு டயலில் யாரையும் சேர்க்கவில்லை" "முக்கியமானவர்களைச் சேர்" - "இதுவரை எந்தத் தொடர்புகளும் இல்லை" - "ஒரு தொடர்பைச் சேர்க்கவும்" "எல்லா எண்களையும் பார்க்க, படத்தைத் தொடவும் அல்லது மறுவரிசைப்படுத்த, தொட்டுப் பிடித்திருக்கவும்" "அகற்று" + "அனைத்தையும் தேர்ந்தெடு" "வீடியோ அழைப்பு" "செய்தி அனுப்பவும்" "அழைப்பு விவரங்கள்" @@ -213,11 +220,9 @@ "தடுக்கப்பட்ட எண்கள்" "%1$s ஏற்கனவே தடுக்கப்பட்டுள்ளது." "அழைப்பு கணக்குகள்" - "இயக்கு" "அனுமதிகளை அமை" "விரைவு டயலை இயக்க, தொடர்புகள் அனுமதியை இயக்கவும்." "அழைப்புப் பதிவைப் பார்க்க, ஃபோன் அனுமதியை இயக்கவும்." - "தொடர்புகளைப் பார்க்க, தொடர்புகள் அனுமதியை இயக்கவும்." "குரலஞ்சலை அணுக, ஃபோன் அனுமதியை இயக்கவும்." "தொடர்புகளைத் தேட, தொடர்புகள் அனுமதிகளை இயக்கவும்." "அழைக்க, ஃபோன் அனுமதியை இயக்கவும்." 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 ffc046f69..8d2c66784 100644 --- a/java/com/android/dialer/app/res/values-te/strings.xml +++ b/java/com/android/dialer/app/res/values-te/strings.xml @@ -80,11 +80,16 @@ "నిరీక్షణ సమయాన్ని జోడించు" "సెట్టింగ్‌లు" "సిములేటర్" + "కొత్త UI సత్వరమార్గం సృష్టించు" "అన్ని పరిచయాలు" "టచ్ టోన్ కీప్యాడ్‌ను ఉపయోగించండి" "ప్రోగ్రెస్‌లో ఉన్న కాల్‌కు వెళ్లు" "కాల్‌ను జోడించు" "ఇన్‌కమింగ్ కాల్‌లు" + "బల్క్ చర్య మోడ్‌లోకి ప్రవేశిస్తున్నారు" + "బల్క్ చర్య మోడ్ నుండి నిష్క్రమించారు" + "%1$s ఎంచుకోబడింది" + "%1$s ఎంపిక తీసివేయబడింది" "వాయిస్ మెయిల్ ప్లే చేయండి" "%1$s పరిచయాన్ని వీక్షించండి" "%1$sకు కాల్ చేయి" @@ -99,11 +104,15 @@ "వాయిస్ మెయిల్" "%s సెక" "%s నిమి %s సెక" - "వాయిస్ మెయిల్" - "వాయిస్ మెయిల్‌లు" - "అవును" - "వద్దు" + "సమూహ చర్యల మోడ్‌ను రద్దు చేస్తుంది" + "తొలగించు" + "రద్దు చేయి" "ఎంచుకున్న %1$sను తొలగించాలా?" + "%1$s ఎంచుకోబడ్డాయి" + + ""ఈ వాయిస్ మెయిల్‌లను తొలగించాలా? "" + ""ఈ వాయిస్ మెయిల్‌ను తొలగించాలా? "" + @string/call_log_header_today "%1$s %2$sకి" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "సిమ్ కార్డు నుండి లోడ్ చేస్తోంది…" "సిమ్ కార్డు పరిచయాలు" - "పరిచయాల అనువర్తనం ఏదీ అందుబాటులో లేదు" "వాయిస్ శోధన అందుబాటులో లేదు" "ఫోన్ అనువర్తనం నిలిపివేయబడినందున ఫోన్ కాల్ చేయలేరు." "పరిచయాలను శోధించు" @@ -145,10 +153,9 @@ "%s కొత్త సమాధానం ఇవ్వని కాల్‌లు" "మీ స్పీడ్ డయల్‌లో ఇంకా ఎవరూ లేరు" "ఇష్టమైన వారిని జోడించండి" - "మీకు ఇప్పటికీ పరిచయాలేవీ లేవు" - "పరిచయాన్ని జోడించండి" "అన్ని నంబర్‌లను చూడటానికి చిత్రాన్ని తాకండి లేదా క్రమం మార్చడానికి తాకి, కాసేపు అలాగే ఉంచండి" "తీసివేయి" + "అన్నీ ఎంచుకోండి" "వీడియో కాల్" "సందేశాన్ని పంపు" "కాల్ వివరాలు" @@ -213,11 +220,9 @@ "బ్లాక్ చేయబడిన నంబర్‌లు" "%1$s ఇప్పటికే బ్లాక్ చేయబడింది." "కాల్ చేసే ఖాతాలు" - "ఆన్ చేయి" "అనుమతులను సెట్ చేయి" "స్పీడ్ డయల్‌ను ప్రారంభించడానికి, పరిచయాల అనుమతిని ఆన్ చేయండి." "మీ కాల్ లాగ్‌ను చూడటానికి, ఫోన్ అనుమతిని ఆన్ చేయండి." - "మీ పరిచయాలను చూడటానికి, పరిచయాల అనుమతిని ఆన్ చేయండి." "మీ వాయిస్ మెయిల్‌ను ప్రాప్యత చేయడానికి, ఫోన్ అనుమతిని ఆన్ చేయండి." "మీ పరిచయాలను శోధించడానికి, పరిచయాల అనుమతులను ఆన్ చేయండి." "కాల్ చేయడానికి, ఫోన్ అనుమతిని ఆన్ చేయండి." 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 13916a51d..76a66e20e 100644 --- a/java/com/android/dialer/app/res/values-th/strings.xml +++ b/java/com/android/dialer/app/res/values-th/strings.xml @@ -80,11 +80,16 @@ "เพิ่มการรอ" "การตั้งค่า" "เครื่องมือจำลอง" + "สร้างทางลัด UI ใหม่" "รายชื่อติดต่อทั้งหมด" "ใช้ปุ่มกดสัญญาณเสียง" "กลับไปคุยสายต่อ" "เพิ่มการโทร" "สายโทรเข้า" + "กำลังเข้าสู่โหมดการดำเนินการแบบกลุ่ม" + "ออกจากโหมดการทำงานแบบกลุ่มแล้ว" + "เลือก %1$s แล้ว" + "ยกเลิกการเลือก %1$s แล้ว" "เล่นข้อความเสียง" "ดูรายชื่อติดต่อ %1$s" "โทรหา %1$s" @@ -99,11 +104,15 @@ "ข้อความเสียง" "%s วินาที" "%s นาที %s วินาที" - "ข้อความเสียง" - "ข้อความเสียง" - "ใช่" - "ไม่" + "ยกเลิกโหมดการทำงานแบบกลุ่ม" + "ลบ" + "ยกเลิก" "ลบ%1$sที่เลือกหรือไม่" + "เลือกไว้ %1$s รายการ" + + ""ลบข้อความเสียงเหล่านี้ไหม "" + ""ลบข้อความเสียงนี้ไหม "" + @string/call_log_header_today "วันที่ %1$s เวลา %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "กำลังโหลดจากซิมการ์ด…" "รายชื่อบนซิมการ์ด" - "ไม่มีแอปรายชื่อติดต่อที่พร้อมใช้งาน" "การค้นหาด้วยเสียงไม่พร้อมใช้งาน" "ไม่สามารถโทรศัพท์ได้เนื่องจากแอปพลิเคชันโทรศัพท์ถูกปิดใช้งาน" "ค้นหารายชื่อติดต่อ" @@ -145,10 +153,9 @@ "สายที่ไม่ได้รับใหม่ %s สาย" "ยังไม่ได้กำหนดผู้ใดในการโทรด่วน" "เพิ่มรายการโปรด" - "คุณยังไม่มีรายชื่อติดต่อ" - "เพิ่มรายชื่อติดต่อ" "แตะรูปภาพเพื่อดูหมายเลขทั้งหมด หรือแตะค้างไว้เพื่อจัดเรียงใหม่" "ลบ" + "เลือกทั้งหมด" "แฮงเอาท์วิดีโอ" "ส่งข้อความ" "รายละเอียดการโทร" @@ -201,7 +208,7 @@ "ข้อความเสียง" "เลือกซิมสำหรับการตั้งค่าข้อความเสียง" "การบล็อกสายเรียกเข้าปิดชั่วคราว" - "ระบบปิดใช้การบล็อกสายเรียกเข้าเนื่องจากคุณติดต่อบริการฉุกเฉินจากโทรศัพท์เครื่องนี้ภายใน 48 ชั่วโมงที่ผ่านมา ระบบจะเปิดใช้คุณลักษณะนี้อีกครั้งโดยอัตโนมัติเมื่อครบ 48 ชั่วโมง" + "ระบบปิดใช้การบล็อกสายเรียกเข้าเนื่องจากคุณติดต่อบริการฉุกเฉินจากโทรศัพท์เครื่องนี้ภายใน 48 ชั่วโมงที่ผ่านมา ระบบจะเปิดใช้ฟีเจอร์นี้อีกครั้งโดยอัตโนมัติเมื่อครบ 48 ชั่วโมง" "นำเข้าหมายเลข" "ก่อนหน้านี้คุณได้ทำเครื่องหมายว่าให้ส่งผู้โทรบางคนไปยังข้อความเสียงโดยอัตโนมัติผ่านแอปอื่นๆ" "ดูหมายเลข" @@ -213,11 +220,9 @@ "หมายเลขที่ถูกบล็อก" "%1$s ถูกบล็อกอยู่แล้ว" "บัญชีการโทร" - "เปิด" "ตั้งค่าสิทธิ์" "หากต้องการเปิดใช้การโทรด่วน ให้เปิดสิทธิ์เข้าถึงรายชื่อติดต่อ" "หากต้องการดูประวัติการโทร ให้เปิดสิทธิ์เข้าถึงโทรศัพท์" - "หากต้องการดูรายชื่อติดต่อ ให้เปิดสิทธิ์เข้าถึงรายชื่อติดต่อ" "หากต้องการเข้าถึงข้อความเสียง ให้เปิดสิทธิ์เข้าถึงโทรศัพท์" "หากต้องการค้นหารายชื่อติดต่อ ให้เปิดสิทธิ์เข้าถึงรายชื่อติดต่อ" "หากต้องการโทรออก ให้เปิดสิทธิ์เข้าถึงโทรศัพท์" 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 cc44cb5f2..51e7a6659 100644 --- a/java/com/android/dialer/app/res/values-tl/strings.xml +++ b/java/com/android/dialer/app/res/values-tl/strings.xml @@ -80,11 +80,16 @@ "Magdagdag ng paghihintay" "Mga Setting" "Simulator" + "Gawa ng Shortcut ng Bagong UI" "Lahat ng mga contact" "Gumamit ng touch tone na keypad" "Bumalik sa kasalukuyang tawag" "Mag-add: tawag" "Mga paparating na tawag" + "Pumapasok sa bulk action mode" + "Umalis sa bulk action mode" + "Napili %1$s" + "Inalis sa pagkakapili %1$s" "I-play ang voicemail" "Tingnan ang contact na si %1$s" "Tawagan si %1$s" @@ -99,11 +104,15 @@ "Voicemail" "%s sec" "%s min %s sec" - "voicemail" - "mga voicemail" - "Oo" - "Hindi" + "Kanselahin ang batch actions mode" + "I-delete" + "Kanselahin" "I-delete ang napiling %1$s?" + "%1$s ang napili" + + ""I-delete ang mga voicemail na ito? "" + ""I-delete ang mga voicemail na ito? "" + @string/call_log_header_today "%1$s ng %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Naglo-load mula sa SIM card…" "Mga contact sa SIM card" - "Walang available na app ng mga contact" "Hindi available ang paghahanap gamit ang boses" "Hindi makagawa ng tawag sa telepono dahil naka-disable ang application na Telepono." "Maghanap ng mga contact" @@ -145,10 +153,9 @@ "%s (na) bagong hindi nasagot na tawag" "Wala pang tao sa iyong speed dial" "Magdagdag ng paborito" - "Wala ka pang sinumang mga contact" - "Magdagdag ng contact" "Pindutin ang larawan upang makita ang lahat ng numero o pindutin nang matagal upang ayusing muli" "Alisin" + "Piliin lahat" "Mag-video call" "Magpadala ng mensahe" "Mga detalye ng tawag" @@ -213,11 +220,9 @@ "Mga naka-block na numero" "Naka-block na ang %1$s" "Account sa pagtawag" - "I-on" "Magtakda ng mga pahintulot" "Upang i-enable ang speed dial, i-on ang pahintulot ng Mga Contact." "Upang makita ang iyong log ng tawag, i-on ang pahintulot ng Telepono." - "Upang makita ang iyong mga contact, i-on ang pahintulot ng Mga Contact." "Upang ma-access ang iyong voicemail, i-on ang pahintulot ng Telepono." "Upang hanapin ang iyong mga contact, i-on ang mga pahintulot sa Mga Contact." "Upang tumawag, i-on ang pahintulot ng Telepono." 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 2f6f704f8..1ff0128d4 100644 --- a/java/com/android/dialer/app/res/values-tr/strings.xml +++ b/java/com/android/dialer/app/res/values-tr/strings.xml @@ -80,11 +80,16 @@ "Bekleme ekle" "Ayarlar" "Simülatör" + "Kull. Arayüzü Kısayolu Oluştur" "Tüm kişiler" "Telefon tuş takımını kullan" "Çağrıya dön" "Çağrı ekle" "Gelen çağrılar" + "Toplu işlem moduna giriliyor" + "Toplu işlem modundan çıkıldı" + "Seçildi: %1$s" + "Seçimi kaldırıldı: %1$s" "Sesli mesajı oynat" "Kişiyi görüntüle: %1$s" "Ara: %1$s" @@ -99,11 +104,15 @@ "Sesli Mesaj" "%s sn." "%s dk. %s sn." - "sesli mesaj" - "sesli mesajlar" - "Evet" - "Hayır" + "Toplu işlemler modu iptal edilir" + "Sil" + "İptal" "Seçili %1$s silinsin mi?" + "%1$s öğe seçildi" + + ""Bu sesli mesajlar silinsin mi? "" + ""Bu sesli mesaj silinsin mi? "" + @string/call_log_header_today "%1$s, %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "SIM karttan yükleniyor..." "SIM kart kişileri" - "Kullanılabilir rehber uygulaması yok" "Sesli arama kullanılamaz" "Telefon uygulaması devre dışı bırakıldığından telefon edilemiyor." "Kişilerde ara" @@ -145,10 +153,9 @@ "%s yeni cevapsız çağrı" "Hızlı arama listenizde henüz kimse yok" "Favori ekle" - "Henüz kayıtlı kişi yok" - "Kişi ekle" "Tüm numaraları görmek için resme dokunun veya yeniden sıralamak için dokunup basılı tutun" "Kaldır" + "Tümünü seç" "Video görüşmesi" "İleti gönder" "Çağrı ayrıntıları" @@ -213,11 +220,9 @@ "Engellenen numaralar" "%1$s numaralı telefon zaten engellendi." "Çağrı hesapları" - "Aç" "İzinleri ayarla" "Hızlı aramayı etkinleştirmek için Kişiler iznini açın." "Çağrı günlüğünüzü görmek için Telefon iznini açın." - "Kişilerinizi görmek için Kişiler iznini açın." "Sesli mesajınıza erişmek için Telefon iznini açın." "Kişilerinizde arama yapmak için Kişiler izinlerini açın." "Telefon etmek için Telefon iznini açın." 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 9a790125b..b92970daa 100644 --- a/java/com/android/dialer/app/res/values-uk/strings.xml +++ b/java/com/android/dialer/app/res/values-uk/strings.xml @@ -82,11 +82,16 @@ "Додати паузу" "Налаштування" "Симулятор" + "Створити ярлик для нової дії" "Усі контакти" "Використовувати тональний набір" "Повернутися до поточного виклику" "Додати виклик" "Вхідні виклики" + "Перехід у режим масових дій" + "Ви вийшли з режиму масових дій" + "Вибрано користувача %1$s" + "Скасовано вибір користувача %1$s" "Відтворити голосову пошту" "Переглянути контакт %1$s" "Набрати %1$s" @@ -101,11 +106,17 @@ "Голосова пошта" "%s с" "%s хв %s с" - "голосова пошта" - "голосова пошта" - "Так" - "Ні" + "Скасувати режим масових дій" + "Видалити" + "Скасувати" "Видалити вибране (%1$s)?" + "Вибрано %1$s" + + ""Видалити ці повідомлення голосової пошти? "" + ""Видалити ці повідомлення голосової пошти? "" + ""Видалити ці повідомлення голосової пошти? "" + ""Видалити ці повідомлення голосової пошти? "" + @string/call_log_header_today "%1$s о %2$s" "%1$02d:%2$02d" @@ -118,7 +129,6 @@ "MEID" "Завантаж. із SIM-карти…" "Контакти SIM-карти" - "Немає додатка з контактами" "Голосовий пошук недоступний" "Не вдається здійснити дзвінок, оскільки додаток Телефон вимкнено." "Пошук контактів" @@ -147,10 +157,9 @@ "Нових пропущених дзвінків: %s" "Немає номерів для швидкого набору" "Додати номер" - "Ще немає контактів" - "Додати контакт" "Торкніться зображення, щоб побачити всі номери, або натисніть і утримуйте, щоб змінити порядок." "Видалити" + "Вибрати все" "Відеодзвінок" "Надіслати повідомлення" "Деталі виклику" @@ -217,11 +226,9 @@ "Заблоковані номери" "Номер %1$s уже заблоковано." "Обл. записи для дзвінків" - "Увімкнути" "Налаштувати дозволи" "Щоб активувати швидкий набір, увімкніть дозвіл \"Контакти\"." "Щоб переглянути журнал викликів, увімкніть дозвіл \"Телефон\"." - "Щоб переглянути контакти, увімкніть дозвіл \"Контакти\"." "Щоб користуватися голосовою поштою, увімкніть дозвіл \"Телефон\"." "Щоб шукати контакти, увімкніть дозвіл \"Контакти\"." "Щоб зателефонувати, увімкніть дозвіл \"Телефон\"." 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 25198711b..cb2eb9e33 100644 --- a/java/com/android/dialer/app/res/values-ur/strings.xml +++ b/java/com/android/dialer/app/res/values-ur/strings.xml @@ -80,11 +80,16 @@ "انتظار شامل کریں" "ترتیبات" "Simulator" + "‏نیا UI شارٹ کٹ تخلیق کریں" "سبھی رابطے" "ٹچ ٹون کی پیڈ کا استعمال کریں" "جاری کال پر واپس لوٹیں" "کال شامل کریں" "آنے والی کالیں" + "بلک کاروائی موڈ میں داخل ہو رہا ہے" + "بلک کاروائی موڈ چھوڑ دیا" + "منتخب کردہ %1$s" + "غیر منتخب کردہ %1$s" "صوتی میل چلائیں" "رابطہ %1$s دیکھیں" "%1$s کو کال کریں" @@ -99,11 +104,15 @@ "صوتی میل" "%s سیکنڈ" "%s منٹ %s سیکنڈ" - "صوتی میل" - "صوتی میلز" - "ہاں" - "نہیں" + "بیچ کاروائی موڈ منسوخ کریں" + "حذف کریں" + "منسوخ کریں" "منتخب کردہ %1$s حذف کریں؟" + "%1$s منتخب کردہ" + + ""ان صوتی میلز کو حذف کریں؟ "" + ""اس صوتی میل کو حذف کریں؟ "" + @string/call_log_header_today "%1$s بوقت %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "‏SIM کارڈ سے لوڈ ہو رہا ہے…" "‏SIM کارڈ کے رابطے" - "رابطوں کی کوئی ایپ دستیاب نہیں ہے" "صوتی تلاش دستیاب نہیں ہے" "فون کال نہیں کی جا سکتی ہے کیونکہ فون ایپلیکیشن کو غیر فعال کر دیا گیا ہے۔" "رابطے تلاش کریں" @@ -145,10 +153,9 @@ "%s نئی چھوٹی ہوئی کالیں" "آپ کے اسپیڈ ڈائل پر ابھی تک کوئی نہیں ہے" "ایک پسندیدہ شامل کریں" - "آپ کے پاس ابھی تک کوئی رابطے نہیں ہیں" - "ایک رابطہ شامل کریں" "سبھی نمبرز دیکھنے کیلئے تصویر ٹچ کریں یا دوبارہ ترتیب دینے کیلئے ٹچ کریں اور پکڑے رہیں" "ہٹائیں" + "سبھی کو منتخب کریں" "ویڈیو کال" "پیغام بھیجیں" "کال کی تفصیلات" @@ -213,11 +220,9 @@ "مسدود کردہ نمبرز" "%1$s پہلے ہی مسدود ہے۔" "کالنگ اکاؤنٹس" - "آن کریں" "اجازتیں طے کریں" "اسپیڈ ڈائل کو فعال کرنے کیلئے رابطوں کی اجازت آن کریں۔" "اپنا کال لاگ دیکھنے کیلئے فون کی اجازت آن کریں۔" - "اپنے رابطے دیکھنے کیلئے رابطوں کی اجازت آن کریں۔" "اپنی صوتی میل تک رسائی کیلئے فون کی اجازت آن کریں۔" "اپنے رابطوں کو تلاش کرنے کیلئے رابطوں کی اجازتیں آن کریں۔" "کال کرنے کیلئے فون کی اجازت آن کریں۔" 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 705cae765..c7d08f3bf 100644 --- a/java/com/android/dialer/app/res/values-uz/strings.xml +++ b/java/com/android/dialer/app/res/values-uz/strings.xml @@ -80,11 +80,16 @@ "Kutishni qo‘shish" "Sozlamalar" "Simulyator" + "Yangi interfeys uchun yorliq" "Barcha kontaktlar" "Tovushli raqam tergich" "Amaldagi chaqiruvga qaytish" "Chaqiruv qo‘shish" "Kiruvchi qo‘ng‘iroqlar" + "Yoppasiga bajariladigan amallar rejimiga o‘tilmoqda" + "Yoppasiga bajariladigan amallar rejimidan chiqib ketildi" + "%1$s tanlandi" + "%1$s tanlovi bekor qilindi" "Ovozli xabarni eshitish" "%1$s kontaktini ko‘rish" "Qo‘ng‘iroq: %1$s" @@ -99,11 +104,15 @@ "Ovozli pochta" "%s soniya" "%s daq %s son" - "ovozli xabar" - "ovozli xabarlar" - "Ha" - "Yo‘q" + "Yoppasiga bajariladigan amallar rejimini bekor qilish" + "O‘chirish" + "Bekor qilish" "Tanlangan %1$s o‘chirib tashlansinmi?" + "Tanlandi: %1$s" + + ""Bu ovozli xabarlar o‘chirib tashlansinmi? "" + ""Bu ovozli xabar o‘chirib tashlansinmi? "" + @string/call_log_header_today "%1$s, %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "SIM kartadan yuklanmoqda…" "SIM karta kontaktlari" - "Hech qanday kontakt ilovasi yo‘q" "Ovozli qidiruv mavjud emas" "Telefon ilovasi o‘chirib qo‘yilgani sababli telefon qo‘ng‘iroqlarini amalga oshirib bo‘lmaydi." "Kontaktlar ichidan qidirish" @@ -145,10 +153,9 @@ "%s ta javobsiz chaqiruv" "Tezkor terish uchun hech kim yo‘q" "Tezkor raqam terishni sozlang" - "Sizda hali hech qanday kontakt yo‘q" - "Yangi kontakt qo‘shing" "Barcha raqamlarni ko‘rish uchun rasm ustiga bosing yoki joyini o‘zgartirish uchun rasmni bosib turing." "O‘chirish" + "Hammasini tanlash" "Video qo‘ng‘iroq" "Xabar yuborish" "Chaqiruv tafsilotlari" @@ -213,11 +220,9 @@ "Bloklangan raqamlar" "%1$s raqami allaqachon bloklangan." "Chaqiruv uchun hisoblar" - "Yoqish" "Ruxsatnomalarni sozlash" "Tezkor raqam terish uchun “Kontaktlar” ruxsatnomasini yoqing." "Qo‘ng‘iroqlaringiz ro‘yxatini ko‘rish uchun “Telefon” ruxsatnomasini yoqing." - "Kontaktlaringizni ko‘rish uchun “Kontaktlar” ruxsatnomasini yoqing." "Ovozli pochtaga kirish uchun “Telefon” ruxsatnomasini yoqing." "Kontaktlarni qidirish uchun “Kontaktlar” ruxsatnomasini yoqing." "Qo‘ng‘iroq qilish uchun “Telefon” ruxsatnomasini yoqing." 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 5a60e0ac3..c79e1ed20 100644 --- a/java/com/android/dialer/app/res/values-vi/strings.xml +++ b/java/com/android/dialer/app/res/values-vi/strings.xml @@ -80,11 +80,16 @@ "Thêm chờ" "Cài đặt" "Trình mô phỏng" + "Tạo phím tắt giao diện người dùng mới" "Tất cả liên hệ" "Sử dụng bàn phím số cảm ứng có âm" "Quay lại cuộc gọi đang thực hiện" "Thêm cuộc gọi" "Cuộc gọi đến" + "Truy cập chế độ tác vụ hàng loạt" + "Đã rời khỏi chế độ tác vụ hàng loạt" + "Đã chọn %1$s" + "Đã bỏ chọn %1$s" "Phát thư thoại" "Xem thông tin liên hệ của %1$s" "Gọi %1$s" @@ -99,11 +104,15 @@ "Thư thoại" "%s giây" "%s phút %s giây" - "thư thoại" - "thư thoại" - "Có" - "Không" + "Hủy chế độ tác vụ hàng loạt" + "Xóa" + "Hủy" "Xóa %1$s đã chọn?" + "Đã chọn %1$s" + + ""Xóa các thư thoại này? "" + ""Xóa thư thoại này? "" + @string/call_log_header_today "%1$s lúc %2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "Đang tải từ thẻ SIM…" "Danh bạ trên thẻ SIM" - "Không có ứng dụng danh bạ" "Không có tính năng tìm kiếm bằng giọng nói" "Không thể thực hiện cuộc gọi điện thoại vì ứng dụng Điện thoại đã bị tắt." "Tìm kiếm trong danh bạ" @@ -145,10 +153,9 @@ "%s cuộc gọi nhỡ mới" "Chưa có ai trong danh bạ quay số nhanh của bạn" "Thêm liên hệ quay số nhanh yêu thích" - "Bạn chưa có bất kỳ liên hệ nào" - "Thêm liên hệ" "Chạm vào hình ảnh để xem tất cả các số hoặc chạm và giữ để sắp xếp lại" "Xóa" + "Chọn tất cả" "Cuộc gọi điện video" "Gửi tin nhắn" "Chi tiết cuộc gọi" @@ -213,11 +220,9 @@ "Số bị chặn" "%1$s đã bị chặn." "Tài khoản gọi" - "Bật" "Đặt quyền" "Để bật quay số nhanh, bật quyền đối với Danh bạ." "Để xem nhật ký cuộc gọi của bạn, bật quyền đối với Điện thoại." - "Để xem danh bạ của bạn, bật quyền đối với Danh bạ." "Để truy cập thư thoại của bạn, bật quyền đối với Điện thoại." "Để tìm kiếm liên hệ của bạn, hãy bật quyền đối với Danh bạ." "Để thực hiện cuộc gọi, bật quyền đối với Điện thoại." 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 98abc396a..3262c1a02 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 @@ -80,11 +80,16 @@ "延长等待时间" "设置" "模拟器" + "创建可在新界面中使用的快捷键" "所有联系人" "使用按键式键盘" "返回正在进行的通话" "添加通话" "来电" + "正在进入批量操作模式" + "已退出批量操作模式" + "已选择 %1$s" + "已取消选择 %1$s" "播放语音邮件" "查看联系人%1$s" "呼叫%1$s" @@ -99,11 +104,15 @@ "语音信箱" "%s 秒" "%s 分钟 %s 秒" - "语音邮件" - "语音邮件" - "是" - "否" + "取消批量操作模式" + "删除" + "取消" "要删除所选的%1$s吗?" + "已选择 %1$s 封" + + ""要删除这些语音邮件吗?"" + ""要删除这封语音邮件吗?"" + @string/call_log_header_today "%1$s%2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "正从 SIM 卡中加载..." "SIM卡联系人" - "没有可用的通讯录应用" "无法使用语音搜索" "“电话”应用已被停用,因此无法拨打电话。" "搜索联系人" @@ -145,10 +153,9 @@ "%s个新的未接电话" "尚未给任何联系人设定快速拨号" "添加常用联系人" - "您还没有任何联系人" - "添加联系人" "触摸图片可查看所有号码,触摸并按住可重新排序" "移除" + "全选" "视频通话" "发送短信" "通话详情" @@ -213,11 +220,9 @@ "已屏蔽的号码" "%1$s 已被屏蔽。" "通话帐号" - "开启" "设置权限" "要启用快速拨号功能,请开启“通讯录”权限。" "要查看您的通话记录,请开启“电话”权限。" - "要查看您的联系人,请开启“通讯录”权限。" "要使用您的语音信箱,请开启“电话”权限。" "要搜索您的联系人,请开启“通讯录”权限。" "要拨打电话,请开启“电话”权限。" 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 2a96ce045..71e62eddc 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 @@ -80,11 +80,16 @@ "新增插播功能" "設定" "模擬器" + "建立新使用者介面捷徑" "所有聯絡人" "使用觸控音頻按鍵" "返回進行中的通話" "新增通話" "來電" + "正在進入大量操作模式" + "已離開大量操作模式" + "已選取%1$s" + "已取消選取%1$s" "播放語音留言" "查看聯絡人%1$s" "打電話給%1$s" @@ -99,11 +104,15 @@ "留言" "%s 秒" "%s%s 秒" - "留言" - "留言" - "是" - "否" + "取消批量操作模式" + "刪除" + "取消" "要刪除所選的%1$s嗎?" + "已選取 %1$s 個" + + ""要刪除這些留言嗎?"" + ""要刪除此留言嗎?"" + @string/call_log_header_today "%1$s%2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "正在從 SIM 卡載入..." "SIM 卡聯絡人" - "沒有可用的聯絡人應用程式" "無法使用語音搜尋" "由於「電話」應用程式已停用,因此無法打電話。" "搜尋聯絡人" @@ -145,10 +153,9 @@ "%s 個新的未接來電" "快速撥號名單中沒有聯絡人" "新增常用聯絡人" - "暫時沒有聯絡人" - "新增聯絡人" "輕觸圖片以查看所有電話號碼,或輕觸並按住圖片以重新排序" "移除" + "全選" "視像通話" "傳送訊息" "通話詳情" @@ -213,11 +220,9 @@ "已封鎖的號碼" "已封鎖 %1$s。" "通話帳戶" - "開放權限" "設定權限" "如要啟用快速撥號功能,請開放「通訊錄」權限。" "如要查看通話記錄,請開放「手機」權限。" - "如要查看聯絡人,請開放「通訊錄」權限。" "如要存取留言信箱,請開放「手機」權限。" "如要搜尋聯絡人,請開啟「通訊錄」權限。" "如要撥打電話,請開放「手機」權限。" 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 917452133..9178dcf67 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 @@ -80,11 +80,16 @@ "延長等待時間" "設定" "模擬工具" + "建立新版 UI 捷徑" "所有聯絡人" "使用觸控音按鍵" "返回進行中的通話" "新增通話" "來電" + "已進入大量操作模式" + "已離開大量操作模式" + "已選取:%1$s" + "已取消選取:%1$s" "播放語音留言" "查看聯絡人%1$s" "撥電話給%1$s" @@ -99,11 +104,15 @@ "語音留言" "%s 秒" "%s%s 秒" - "語音留言" - "語音留言" - "是" - "否" + "取消批次操作模式" + "刪除" + "取消" "要刪除選取的%1$s嗎?" + "已選取 %1$s 個" + + ""要刪除這些語音留言嗎?"" + ""要刪除這則語音留言嗎?"" + @string/call_log_header_today "%1$s%2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "MEID" "從 SIM 卡讀取中…" "SIM 卡聯絡人" - "沒有可用的聯絡人應用程式" "無法使用語音搜尋" "「電話」應用程式已遭停用,因此無法撥打電話。" "搜尋聯絡人" @@ -145,10 +153,9 @@ "%s 通新的未接來電" "您的快速撥號功能尚未設定任何聯絡人" "新增常用聯絡人" - "您尚未加入任何聯絡人" - "新增聯絡人" "輕觸圖片即可查看所有號碼,按住則可重新排序" "移除" + "全選" "視訊通話" "傳送簡訊" "通話詳細資料" @@ -213,11 +220,9 @@ "已封鎖的號碼" "%1$s 已在封鎖清單中。" "通話帳戶" - "開啟" "設定權限" "如要啟用快速撥號,請開啟「聯絡人」存取權限。" "如要查看您的通話紀錄,請開啟「電話」存取權限。" - "如要查看您的聯絡人,請開啟「聯絡人」存取權限。" "如要存取您的語音信箱,請開啟「電話」存取權限。" "如要搜尋您的聯絡人,請開啟「聯絡人」存取權限。" "如要撥打電話,請開啟「電話」存取權限。" 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 9c8a6b8e1..f52f597c8 100644 --- a/java/com/android/dialer/app/res/values-zu/strings.xml +++ b/java/com/android/dialer/app/res/values-zu/strings.xml @@ -80,11 +80,16 @@ "Yengeza ukulinda" "Izilungiselelo" "Isilingisi" + "Dala isinqamuleli esisha se-UI" "Bonke othintana nabo" "Sebenzisa ikhiphedi yethoni yokuthinta" "Buyela kukholi eqhubekayo" "Yengeza ikholi" "Amakholi angenayo" + "Kungenwa kumodi yesenzo senqwaba" + "Ishiye imodi yesenzo senqwaba" + "Kukhethwe i-%1$s" + "Akukhethiwe i-%1$s" "Dlala i-imeyli yezwi" "Bheka oxhumana naye %1$s" "Shayela %1$s" @@ -99,11 +104,15 @@ "Ivoyisimeyili" "%s isekhondi" "%s amaminithi %s amasekhondi" - "ivoyisimeyili" - "ama-meyli ezwi" - "Yebo" - "Cha" + "Khansela imodi lezenzo zeqoqo" + "Susa" + "Khansela" "Susa okukhethiwe %1$s?" + "Engu-%1$s ekhethiwe" + + ""Sula lawa mavoyisimeyili? "" + ""Sula lawa mavoyisimeyili? "" + @string/call_log_header_today "%1$s ngo-%2$s" "%1$02d:%2$02d" @@ -116,7 +125,6 @@ "I-MEID" "Ilayisha kusuka ekhadini le-SIM..." "Othintana nabo bekhadi le-SIM" - "Alukho uhlelo lokusebenza loxhumana nabo olutholakalayo" "Usesho lwezwi alutholakali" "Ayikwazi ukwenza ikholi yefoni ngoba uhlelo lokusebenza lwefoni likhutshaziwe." "Sesha othintana nabo" @@ -145,10 +153,9 @@ "%s amakholi amasha owaphuthelwe" "Akekho umuntu osekudayeleni kwakho okusheshayo okwamanje" "Engeza intandokazi" - "Awunabo oxhumana nabo okwamanje" - "Engeza oxhumana naye" "Thinta isithombe ukuze ubone zonke izinombolo noma thinta bese ubambe ukuze uhlele kabusha" "Susa" + "Khetha konke" "Ikholi yevidiyo" "Thumela umlayezo" "Imininingwane yekholi" @@ -213,11 +220,9 @@ "Izinombolo ezivinjiwe" "%1$s isivinjiwe kakade." "Ama-akhawunti wokushaya" - "Vula" "Setha izimvume" "Nika amandla ukudayela okusheshayo, vula imvume yoxhumana nabo." "Ukuze ubone irekhodi lakho lamakholi, vuma imvume yefoni." - "Ukuze ubone oxhumana nabo, vula imvume yoxhumana nabo." "Ukuze ufinyelele ivoyisimeyili, vula imvume yefoni." "Ukuze useshe oxhumana nabo, vula izimvume zoxhumana nabo." "Ukuze ubeke ikholi, vula imvume yefoni." diff --git a/java/com/android/dialer/app/res/values/colors.xml b/java/com/android/dialer/app/res/values/colors.xml index cf6b926be..2f6d87b49 100644 --- a/java/com/android/dialer/app/res/values/colors.xml +++ b/java/com/android/dialer/app/res/values/colors.xml @@ -52,8 +52,6 @@ @color/dialer_theme_color - - #fafafa #f9f9f9 @color/background_dialer_light @@ -69,8 +67,6 @@ #4d4d4d - #b2b2b2 - #ffffff diff --git a/java/com/android/dialer/app/res/values/dimens.xml b/java/com/android/dialer/app/res/values/dimens.xml index 7da29c7a3..90a8bb879 100644 --- a/java/com/android/dialer/app/res/values/dimens.xml +++ b/java/com/android/dialer/app/res/values/dimens.xml @@ -24,6 +24,11 @@ --> 16dp + + 14sp + 16dp + 18dp + 8dp 32dp @@ -105,9 +110,6 @@ 10dp - 20dp - 16sp - 16dp 16dp diff --git a/java/com/android/dialer/app/res/values/strings.xml b/java/com/android/dialer/app/res/values/strings.xml index 9e1fdeb5a..e02c6fb30 100644 --- a/java/com/android/dialer/app/res/values/strings.xml +++ b/java/com/android/dialer/app/res/values/strings.xml @@ -114,7 +114,7 @@ Voicemail - + %1$d Voicemails @@ -131,12 +131,12 @@ [CHAR LIMIT=10] --> - %1$s, + %1$s, %2$s - New voicemail from + New voicemail from %1$s @@ -165,7 +165,7 @@ Missed calls only - (%1$d) + (%1$d) %2$s @@ -258,6 +258,9 @@ and testing. [CHAR LIMIT=30]--> Simulator + + Create New UI Shortcut + All contacts @@ -279,6 +282,34 @@ Incoming calls + + Entering bulk action mode + + + Left bulk action mode + + + Selected %1$s + + + Unselected %1$s + %s min %s sec - voicemail - voicemails - Yes - No + + Cancel batch actions mode + + Delete + Cancel Delete selected %1$s? + %1$s selected + + + + Delete this voicemail? + Delete these voicemails? + + @@ -411,9 +453,6 @@ SIM card contacts - - No contacts app available - Voice search not available @@ -484,7 +523,7 @@ Undo - Call + Call %s @@ -514,12 +553,6 @@ Add a favorite - - You don\'t have any contacts yet - - - Add a contact - Remove + + Select all + @@ -550,13 +586,13 @@ - + Call ^1 + Note: AccessibilityServices uses this attribute to announce what the view represents. + [CHAR LIMIT=NONE] --> Missed call from ^1, ^2, ^3, ^4. - + Call ^1 @@ -600,7 +636,7 @@ action triggers a return video call to the named person/number. Note: AccessibilityServices uses this attribute to announce the purpose of the button. [CHAR LIMIT=NONE] --> - + Video call ^1. @@ -609,21 +645,21 @@ triggers playing back the voicemail. Note: AccessibilityServices uses this attribute to announce the purpose of the button. [CHAR LIMIT=NONE] --> - + Listen to voicemail from ^1 - + Play voicemail from ^1 - + Pause voicemail from ^1 @@ -631,7 +667,7 @@ - + Delete voicemail from ^1 @@ -645,14 +681,14 @@ - + Create contact for ^1 - + Add ^1 to existing contact @@ -660,7 +696,7 @@ displays the call details screen for an entry in the call log. This shows the calls to and from the specified number associated with the call log entry. [CHAR LIMIT=NONE] --> - + Call details for ^1 @@ -769,14 +805,14 @@ - + Call blocking temporarily off - + Call blocking has been disabled because you contacted emergency services from this phone within the last 48 hours. It will be automatically reenabled once the 48 hour period expires. @@ -789,7 +825,7 @@ - + You previously marked some callers to be automatically sent to voicemail via other apps. @@ -811,13 +847,13 @@ - + Calls from these numbers will be blocked and voicemails will be automatically deleted. - + Calls from these numbers will be blocked, but they may still be able to leave you voicemails. @@ -826,7 +862,7 @@ - %1$s + %1$s is already blocked. @@ -841,9 +877,6 @@ button_dtmf_settings - - Turn on - Set permissions @@ -853,9 +886,6 @@ To see your call log, turn on the Phone permission. - - To see your contacts, turn on the Contacts permission. - To access your voicemail, turn on the Phone permission. diff --git a/java/com/android/dialer/app/res/values/styles.xml b/java/com/android/dialer/app/res/values/styles.xml index 7adf7ca2c..e0122e81c 100644 --- a/java/com/android/dialer/app/res/values/styles.xml +++ b/java/com/android/dialer/app/res/values/styles.xml @@ -16,6 +16,11 @@ --> + + + + - - - - - + + + diff --git a/java/com/android/dialer/multimedia/MultimediaData.java b/java/com/android/dialer/multimedia/MultimediaData.java index 22bb7641c..dee0cff0b 100644 --- a/java/com/android/dialer/multimedia/MultimediaData.java +++ b/java/com/android/dialer/multimedia/MultimediaData.java @@ -20,6 +20,7 @@ import android.location.Location; import android.net.Uri; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.text.TextUtils; import com.android.dialer.common.LogUtil; import com.google.auto.value.AutoValue; @@ -63,6 +64,11 @@ public abstract class MultimediaData { /** Returns {@code true} if this data is marked as important. */ public abstract boolean isImportant(); + /** Returns true if this has image, text or location data. */ + public boolean hasData() { + return hasImageData() || !TextUtils.isEmpty(getText()) || getLocation() != null; + } + /** Returns the string form of this MultimediaData with no PII. */ @Override public String toString() { diff --git a/java/com/android/dialer/notification/AndroidManifest.xml b/java/com/android/dialer/notification/AndroidManifest.xml index 741f481ca..b89d8f816 100644 --- a/java/com/android/dialer/notification/AndroidManifest.xml +++ b/java/com/android/dialer/notification/AndroidManifest.xml @@ -1,3 +1,4 @@ + - - - - - - - - - - - - diff --git a/java/com/android/dialer/notification/GroupedNotificationUtil.java b/java/com/android/dialer/notification/GroupedNotificationUtil.java deleted file mode 100644 index 3925248d5..000000000 --- a/java/com/android/dialer/notification/GroupedNotificationUtil.java +++ /dev/null @@ -1,66 +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 - */ - -package com.android.dialer.notification; - -import android.app.NotificationManager; -import android.service.notification.StatusBarNotification; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import java.util.Objects; - -/** Utilities for dealing with grouped notifications */ -public final class GroupedNotificationUtil { - - /** - * Remove notification(s) that were added as part of a group. Will ensure that if this is the last - * notification in the group the summary will be removed. - * - * @param tag String tag as included in {@link NotificationManager#notify(String, int, - * android.app.Notification)}. If null will remove all notifications under id - * @param id notification id as included with {@link NotificationManager#notify(String, int, - * android.app.Notification)}. - * @param summaryTag String tag of the summary notification - */ - public static void removeNotification( - @NonNull NotificationManager notificationManager, - @Nullable String tag, - int id, - @NonNull String summaryTag) { - if (tag == null) { - // Clear all grouped notifications - for (StatusBarNotification notification : notificationManager.getActiveNotifications()) { - if (notification.getId() == id) { - notificationManager.cancel(notification.getTag(), id); - } - } - } else { - notificationManager.cancel(tag, id); - - // See if other non-summary grouped notifications exist, and if not then clear the summary - boolean clearSummary = true; - for (StatusBarNotification notification : notificationManager.getActiveNotifications()) { - if (notification.getId() == id && !Objects.equals(summaryTag, notification.getTag())) { - clearSummary = false; - break; - } - } - if (clearSummary) { - notificationManager.cancel(summaryTag, id); - } - } - } -} diff --git a/java/com/android/dialer/notification/NotificationChannelId.java b/java/com/android/dialer/notification/NotificationChannelId.java new file mode 100644 index 000000000..4ab3d44f2 --- /dev/null +++ b/java/com/android/dialer/notification/NotificationChannelId.java @@ -0,0 +1,41 @@ +/* + * 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.notification; + +import android.support.annotation.StringDef; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** Centralized source of all notification channels used by Dialer. */ +@Retention(RetentionPolicy.SOURCE) +@StringDef({ + NotificationChannelId.INCOMING_CALL, + NotificationChannelId.ONGOING_CALL, + NotificationChannelId.MISSED_CALL, + NotificationChannelId.DEFAULT, +}) +public @interface NotificationChannelId { + // This value is white listed in the system. + // See /vendor/google/nexus_overlay/common/frameworks/base/core/res/res/values/config.xml + String INCOMING_CALL = "phone_incoming_call"; + + String ONGOING_CALL = "phone_ongoing_call"; + + String MISSED_CALL = "phone_missed_call"; + + String DEFAULT = "phone_default"; +} diff --git a/java/com/android/dialer/notification/NotificationChannelManager.java b/java/com/android/dialer/notification/NotificationChannelManager.java index 88679066d..790aac36f 100644 --- a/java/com/android/dialer/notification/NotificationChannelManager.java +++ b/java/com/android/dialer/notification/NotificationChannelManager.java @@ -17,366 +17,156 @@ package com.android.dialer.notification; import android.annotation.TargetApi; -import android.app.Notification; import android.app.NotificationChannel; -import android.app.NotificationChannelGroup; import android.app.NotificationManager; import android.content.Context; -import android.content.Intent; -import android.content.SharedPreferences; import android.media.AudioAttributes; -import android.net.Uri; import android.os.Build.VERSION_CODES; -import android.provider.Settings; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.support.annotation.RequiresApi; -import android.support.annotation.StringDef; 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.contacts.common.compat.TelephonyManagerCompat; -import com.android.dialer.buildtype.BuildType; +import android.util.ArraySet; +import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; -import com.android.dialer.common.concurrent.DialerExecutors; -import com.android.dialer.telecom.TelecomUtil; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.util.List; -import java.util.Objects; +import java.util.Set; -/** Contains info on how to create {@link NotificationChannel NotificationChannels} */ -public class NotificationChannelManager { - - private static final String PREFS_FILENAME = "NotificationChannelManager"; - private static final String PREF_NEED_FIRST_INIT = "needFirstInit"; - private static NotificationChannelManager instance; - - public static NotificationChannelManager getInstance() { - if (instance == null) { - instance = new NotificationChannelManager(); - } - return instance; - } +/** Creates all notification channels for Dialer. */ +@TargetApi(VERSION_CODES.O) +public final class NotificationChannelManager { /** - * Set the channel of notification appropriately. Will create the channel if it does not already - * exist. Safe to call pre-O (will no-op). + * Creates all the notification channels Dialer will need. This method is called at app startup + * and must be fast. Currently it takes between 3 to 7 milliseconds on a Pixel XL. + * + *

An alternative approach would be to lazily create channels when we actualy post a + * notification. The advatange to precreating channels is that: * - *

phoneAccount should only be null if channelName is {@link Channel#DEFAULT} or {@link - * Channel#MISSED_CALL} since these do not have account-specific settings. + *

    + *
  • channels will be available to user right away. For example, users can customize voicemail + * sounds when they first get their device without waiting for a voicemail to arrive first. + *
  • code that posts a notification can be simpler + *
  • channel management code is simpler and it's easier to ensure that the correct set of + * channels are visible. + *
      */ - @TargetApi(26) - public static void applyChannel( - @NonNull Notification.Builder notification, - @NonNull Context context, - @Channel String channelName, - @Nullable PhoneAccountHandle phoneAccount) { - checkNullity(channelName, phoneAccount); - - if (BuildCompat.isAtLeastO()) { - NotificationChannel channel = - NotificationChannelManager.getInstance().getChannel(context, channelName, phoneAccount); - notification.setChannelId(channel.getId()); - } - } - - private static void checkNullity( - @Channel String channelName, @Nullable PhoneAccountHandle phoneAccount) { - if (phoneAccount != null || channelAllowsNullPhoneAccountHandle(channelName)) { - return; - } - - // TODO (b/36568553): don't throw an exception once most cases have been identified - IllegalArgumentException exception = - new IllegalArgumentException( - "Phone account handle must not be null on channel " + channelName); - if (BuildType.get() == BuildType.RELEASE) { - LogUtil.e("NotificationChannelManager.applyChannel", null, exception); - } else { - throw exception; - } - } - - private static boolean channelAllowsNullPhoneAccountHandle(@Channel String channelName) { - switch (channelName) { - case Channel.DEFAULT: - case Channel.MISSED_CALL: - return true; - default: - return false; - } - } + public static void initChannels(@NonNull Context context) { + Assert.checkArgument(BuildCompat.isAtLeastO()); + Assert.isNotNull(context); - /** The base Channel IDs for {@link NotificationChannel} */ - @Retention(RetentionPolicy.SOURCE) - @StringDef({ - Channel.INCOMING_CALL, - Channel.ONGOING_CALL, - Channel.ONGOING_CALL_OLD, - Channel.MISSED_CALL, - Channel.VOICEMAIL, - Channel.EXTERNAL_CALL, - Channel.DEFAULT - }) - public @interface Channel { - @Deprecated String ONGOING_CALL_OLD = "ongoingCall"; - String INCOMING_CALL = "incomingCall"; - String ONGOING_CALL = "ongoingCall2"; - String MISSED_CALL = "missedCall"; - String VOICEMAIL = "voicemail"; - String EXTERNAL_CALL = "externalCall"; - String DEFAULT = "default"; - } - - @Channel - private static final String[] prepopulatedAccountChannels = - new String[] {Channel.INCOMING_CALL, Channel.ONGOING_CALL, Channel.VOICEMAIL}; - - @Channel - private static final String[] prepopulatedGlobalChannels = - new String[] {Channel.MISSED_CALL, Channel.DEFAULT}; - - private NotificationChannelManager() {} - - public void firstInitIfNeeded(@NonNull Context context) { - if (BuildCompat.isAtLeastO()) { - DialerExecutors.createNonUiTaskBuilder(this::firstInitIfNeededSync) - .build() - .executeSerial(context); - } - } - - private boolean firstInitIfNeededSync(@NonNull Context context) { - if (needsFirstInit(context)) { - initChannels(context); - return true; - } - return false; - } - - public boolean needsFirstInit(@NonNull Context context) { - return (BuildCompat.isAtLeastO() - && getSharedPreferences(context).getBoolean(PREF_NEED_FIRST_INIT, true)); - } - - @RequiresApi(VERSION_CODES.N) - private SharedPreferences getSharedPreferences(@NonNull Context context) { - // Use device protected storage since in some cases this will need to be accessed while device - // is locked - context = context.createDeviceProtectedStorageContext(); - return context.getSharedPreferences(PREFS_FILENAME, Context.MODE_PRIVATE); - } - - @RequiresApi(26) - public Intent getSettingsIntentForChannel( - @NonNull Context context, @Channel String channelName, PhoneAccountHandle accountHandle) { - checkNullity(channelName, accountHandle); - Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS); - intent.putExtra( - Settings.EXTRA_CHANNEL_ID, getChannel(context, channelName, accountHandle).getId()); - intent.putExtra(Settings.EXTRA_APP_PACKAGE, context.getPackageName()); - return intent; - } + NotificationManager notificationManager = context.getSystemService(NotificationManager.class); + Set desiredChannelIds = getAllDesiredChannelIds(context); + Set existingChannelIds = getAllExistingChannelIds(context); - @TargetApi(26) - @SuppressWarnings("AndroidApiChecker") - public void initChannels(@NonNull Context context) { - if (!BuildCompat.isAtLeastO()) { + if (desiredChannelIds.equals(existingChannelIds)) { return; } - LogUtil.enterBlock("NotificationChannelManager.initChannels"); - List phoneAccounts = TelecomUtil.getCallCapablePhoneAccounts(context); - - // Remove notification channels for PhoneAccounts that don't exist anymore - NotificationManager notificationManager = context.getSystemService(NotificationManager.class); - List notificationChannelGroups = - notificationManager.getNotificationChannelGroups(); - notificationChannelGroups - .stream() - .filter(group -> !idExists(group.getId(), phoneAccounts)) - .forEach(group -> deleteGroup(notificationManager, group)); - - for (PhoneAccountHandle phoneAccountHandle : phoneAccounts) { - for (@Channel String channel : prepopulatedAccountChannels) { - getChannel(context, channel, phoneAccountHandle); + LogUtil.i( + "NotificationChannelManager.initChannels", + "doing an expensive initialization of all notification channels"); + LogUtil.i( + "NotificationChannelManager.initChannels", "desired channel IDs: " + desiredChannelIds); + LogUtil.i( + "NotificationChannelManager.initChannels", "existing channel IDs: " + existingChannelIds); + + // Delete any old channels that we don't use any more. This is safe because if we're recreate + // this later then any user settings will be restored. An example is SIM specific voicemail + // channel that gets deleted when the user removes the SIM and is then restored when the user + // re-inserts the SIM. + for (String existingChannelId : existingChannelIds) { + if (!desiredChannelIds.contains(existingChannelId)) { + notificationManager.deleteNotificationChannel(existingChannelId); } } - for (@Channel String channel : prepopulatedGlobalChannels) { - getChannel(context, channel, null); - } - getSharedPreferences(context).edit().putBoolean(PREF_NEED_FIRST_INIT, false).apply(); - } - - @TargetApi(26) - private void deleteGroup( - @NonNull NotificationManager notificationManager, @NonNull NotificationChannelGroup group) { - for (NotificationChannel channel : group.getChannels()) { - notificationManager.deleteNotificationChannel(channel.getId()); - } - notificationManager.deleteNotificationChannelGroup(group.getId()); - } - - private boolean idExists(String id, List phoneAccountHandles) { - for (PhoneAccountHandle handle : phoneAccountHandles) { - if (Objects.equals(handle.getId(), id)) { - return true; - } - } - return false; + // Just recreate all desired channels. We won't do this often so it's ok to do this now. + createIncomingCallChannel(context); + createOngoingCallChannel(context); + createMissedCallChannel(context); + createDefaultChannel(context); + VoicemailChannelUtils.createAllChannels(context); } @NonNull - @RequiresApi(26) - private NotificationChannel getChannel( - @NonNull Context context, - @Channel String channelName, - @Nullable PhoneAccountHandle phoneAccount) { - String channelId = channelNameToId(channelName, phoneAccount); - NotificationChannel channel = getNotificationManager(context).getNotificationChannel(channelId); - if (channel == null) { - channel = createChannel(context, channelName, phoneAccount); - } - return channel; + public static String getVoicemailChannelId( + @NonNull Context context, @Nullable PhoneAccountHandle handle) { + Assert.checkArgument(BuildCompat.isAtLeastO()); + Assert.isNotNull(context); + return VoicemailChannelUtils.getChannelId(context, handle); } - private static String channelNameToId( - @Channel String name, @Nullable PhoneAccountHandle phoneAccountHandle) { - if (phoneAccountHandle == null) { - return name; - } else { - return name + ":" + phoneAccountHandle.getId(); - } - } - - @RequiresApi(26) - private NotificationChannel createChannel( - Context context, - @Channel String channelName, - @Nullable PhoneAccountHandle phoneAccountHandle) { - String channelId = channelNameToId(channelName, phoneAccountHandle); - - if (phoneAccountHandle != null) { - PhoneAccount account = getTelecomManager(context).getPhoneAccount(phoneAccountHandle); - NotificationChannelGroup group = - new NotificationChannelGroup( - phoneAccountHandle.getId(), - (account == null) ? phoneAccountHandle.getId() : account.getLabel().toString()); - getNotificationManager(context) - .createNotificationChannelGroup(group); // No-op if already exists - } else if (!channelAllowsNullPhoneAccountHandle(channelName)) { - LogUtil.w( - "NotificationChannelManager.createChannel", - "Null PhoneAccountHandle with channel " + channelName); - } - - Uri silentRingtone = Uri.EMPTY; - - CharSequence name; - int importance; - boolean canShowBadge; - boolean lights; - boolean vibration; - Uri sound; - switch (channelName) { - case Channel.INCOMING_CALL: - name = context.getText(R.string.notification_channel_incoming_call); - importance = NotificationManager.IMPORTANCE_MAX; - canShowBadge = false; - lights = true; - vibration = false; - sound = silentRingtone; - break; - case Channel.MISSED_CALL: - name = context.getText(R.string.notification_channel_missed_call); - importance = NotificationManager.IMPORTANCE_DEFAULT; - canShowBadge = true; - lights = true; - vibration = true; - sound = silentRingtone; - break; - case Channel.ONGOING_CALL: - name = context.getText(R.string.notification_channel_ongoing_call); - importance = NotificationManager.IMPORTANCE_DEFAULT; - canShowBadge = false; - lights = false; - vibration = false; - sound = silentRingtone; - deleteOldOngoingCallChannelIfNeeded(context, phoneAccountHandle); - break; - case Channel.VOICEMAIL: - name = context.getText(R.string.notification_channel_voicemail); - importance = NotificationManager.IMPORTANCE_DEFAULT; - canShowBadge = true; - lights = true; - vibration = - TelephonyManagerCompat.isVoicemailVibrationEnabled( - getTelephonyManager(context), phoneAccountHandle); - sound = - TelephonyManagerCompat.getVoicemailRingtoneUri( - getTelephonyManager(context), phoneAccountHandle); - break; - case Channel.EXTERNAL_CALL: - name = context.getText(R.string.notification_channel_external_call); - importance = NotificationManager.IMPORTANCE_HIGH; - canShowBadge = false; - lights = true; - vibration = true; - sound = null; - break; - case Channel.DEFAULT: - name = context.getText(R.string.notification_channel_misc); - importance = NotificationManager.IMPORTANCE_DEFAULT; - canShowBadge = false; - lights = true; - vibration = true; - sound = null; - break; - default: - throw new IllegalArgumentException("Unknown channel: " + channelName); - } - - NotificationChannel channel = new NotificationChannel(channelId, name, importance); - channel.setShowBadge(canShowBadge); - if (sound != null) { - // silentRingtone acts as a sentinel value to indicate that setSound should still be called, - // but with a null value to indicate no sound. - channel.setSound( - sound.equals(silentRingtone) ? null : sound, - new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_NOTIFICATION).build()); - } - channel.enableLights(lights); - channel.enableVibration(vibration); - getNotificationManager(context).createNotificationChannel(channel); - return channel; - } - - @RequiresApi(26) - private void deleteOldOngoingCallChannelIfNeeded( - @NonNull Context context, PhoneAccountHandle phoneAccountHandle) { - String channelId = channelNameToId(Channel.ONGOING_CALL_OLD, phoneAccountHandle); - NotificationManager notificationManager = getNotificationManager(context); - NotificationChannel channel = notificationManager.getNotificationChannel(channelId); - if (channel != null) { - LogUtil.i( - "NotificationManager.deleteOldOngoingCallChannelIfNeeded", - "Old ongoing channel found. Deleting to create new channel"); - notificationManager.deleteNotificationChannel(channel.getId()); - } - } - - private static NotificationManager getNotificationManager(@NonNull Context context) { - return context.getSystemService(NotificationManager.class); - } - - private static TelephonyManager getTelephonyManager(@NonNull Context context) { - return context.getSystemService(TelephonyManager.class); + private static Set getAllExistingChannelIds(@NonNull Context context) { + Set result = new ArraySet<>(); + NotificationManager notificationManager = context.getSystemService(NotificationManager.class); + for (NotificationChannel channel : notificationManager.getNotificationChannels()) { + result.add(channel.getId()); + } + return result; + } + + private static Set getAllDesiredChannelIds(@NonNull Context context) { + Set result = new ArraySet<>(); + result.add(NotificationChannelId.INCOMING_CALL); + result.add(NotificationChannelId.ONGOING_CALL); + result.add(NotificationChannelId.MISSED_CALL); + result.add(NotificationChannelId.DEFAULT); + result.addAll(VoicemailChannelUtils.getAllChannelIds(context)); + return result; + } + + private static void createIncomingCallChannel(@NonNull Context context) { + NotificationChannel channel = + new NotificationChannel( + NotificationChannelId.INCOMING_CALL, + context.getText(R.string.notification_channel_incoming_call), + NotificationManager.IMPORTANCE_MAX); + channel.setShowBadge(false); + channel.enableLights(true); + channel.enableVibration(false); + channel.setSound( + null, new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_NOTIFICATION).build()); + context.getSystemService(NotificationManager.class).createNotificationChannel(channel); + } + + private static void createOngoingCallChannel(@NonNull Context context) { + NotificationChannel channel = + new NotificationChannel( + NotificationChannelId.ONGOING_CALL, + context.getText(R.string.notification_channel_ongoing_call), + NotificationManager.IMPORTANCE_DEFAULT); + channel.setShowBadge(false); + channel.enableLights(false); + channel.enableVibration(false); + channel.setSound( + null, new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_NOTIFICATION).build()); + context.getSystemService(NotificationManager.class).createNotificationChannel(channel); + } + + private static void createMissedCallChannel(@NonNull Context context) { + NotificationChannel channel = + new NotificationChannel( + NotificationChannelId.MISSED_CALL, + context.getText(R.string.notification_channel_missed_call), + NotificationManager.IMPORTANCE_DEFAULT); + channel.setShowBadge(true); + channel.enableLights(true); + channel.enableVibration(true); + channel.setSound( + null, new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_NOTIFICATION).build()); + context.getSystemService(NotificationManager.class).createNotificationChannel(channel); + } + + private static void createDefaultChannel(@NonNull Context context) { + NotificationChannel channel = + new NotificationChannel( + NotificationChannelId.DEFAULT, + context.getText(R.string.notification_channel_misc), + NotificationManager.IMPORTANCE_DEFAULT); + channel.setShowBadge(false); + channel.enableLights(true); + channel.enableVibration(true); + context.getSystemService(NotificationManager.class).createNotificationChannel(channel); } - private static TelecomManager getTelecomManager(@NonNull Context context) { - return context.getSystemService(TelecomManager.class); - } + private NotificationChannelManager() {} } diff --git a/java/com/android/dialer/notification/PackageUpdatedReceiver.java b/java/com/android/dialer/notification/PackageUpdatedReceiver.java deleted file mode 100644 index feed40263..000000000 --- a/java/com/android/dialer/notification/PackageUpdatedReceiver.java +++ /dev/null @@ -1,37 +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 - */ - -package com.android.dialer.notification; - -import android.annotation.TargetApi; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.support.v4.os.BuildCompat; - -/** Inits the notification channels when Dialer or OS is updated */ -public class PackageUpdatedReceiver extends BroadcastReceiver { - - @Override - @TargetApi(26) - public void onReceive(Context context, Intent intent) { - if (!BuildCompat.isAtLeastO()) { - return; - } - context = context.createDeviceProtectedStorageContext(); - NotificationChannelManager.getInstance().initChannels(context); - } -} diff --git a/java/com/android/dialer/notification/VoicemailChannelUtils.java b/java/com/android/dialer/notification/VoicemailChannelUtils.java new file mode 100644 index 000000000..dc74799ca --- /dev/null +++ b/java/com/android/dialer/notification/VoicemailChannelUtils.java @@ -0,0 +1,217 @@ +/* + * 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.notification; + +import android.annotation.TargetApi; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.content.Context; +import android.media.AudioAttributes; +import android.os.Build.VERSION_CODES; +import android.provider.Settings; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v4.os.BuildCompat; +import android.telecom.PhoneAccount; +import android.telecom.PhoneAccountHandle; +import android.telecom.TelecomManager; +import android.telephony.TelephonyManager; +import android.text.TextUtils; +import android.util.ArraySet; +import com.android.dialer.common.Assert; +import com.android.dialer.common.LogUtil; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +/** Utilities for working with voicemail channels. */ +@TargetApi(VERSION_CODES.O) +/* package */ final class VoicemailChannelUtils { + private static final String GLOBAL_VOICEMAIL_CHANNEL_ID = "phone_voicemail"; + private static final String PER_ACCOUNT_VOICEMAIL_CHANNEL_ID_PREFIX = "phone_voicemail_account_"; + + static Set getAllChannelIds(@NonNull Context context) { + Assert.checkArgument(BuildCompat.isAtLeastO()); + Assert.isNotNull(context); + + Set result = new ArraySet<>(); + if (isSingleSimDevice(context)) { + result.add(GLOBAL_VOICEMAIL_CHANNEL_ID); + } else { + for (PhoneAccountHandle handle : getAllEligableAccounts(context)) { + result.add(getChannelIdForAccount(handle)); + } + } + return result; + } + + static void createAllChannels(@NonNull Context context) { + Assert.checkArgument(BuildCompat.isAtLeastO()); + Assert.isNotNull(context); + + if (isSingleSimDevice(context)) { + createGlobalVoicemailChannel(context); + } else { + for (PhoneAccountHandle handle : getAllEligableAccounts(context)) { + createVoicemailChannelForAccount(context, handle); + } + } + } + + @NonNull + static String getChannelId(@NonNull Context context, @Nullable PhoneAccountHandle handle) { + Assert.checkArgument(BuildCompat.isAtLeastO()); + Assert.isNotNull(context); + + // Most devices we deal with have a single SIM slot. No need to distinguish between phone + // accounts. + if (isSingleSimDevice(context)) { + return GLOBAL_VOICEMAIL_CHANNEL_ID; + } + + // We can get a null phone account at random points (modem reboot, etc...). Gracefully degrade + // by using the default channel. + if (handle == null) { + LogUtil.i( + "VoicemailChannelUtils.getChannelId", + "no phone account on a multi-SIM device, using default channel"); + return NotificationChannelId.DEFAULT; + } + + // Voicemail notifications should always be associated with a SIM based phone account. + if (!isChannelAllowedForAccount(context, handle)) { + LogUtil.i( + "VoicemailChannelUtils.getChannelId", + "phone account is not for a SIM, using default channel"); + return NotificationChannelId.DEFAULT; + } + + // Now we're in the multi-SIM case. + String channelId = getChannelIdForAccount(handle); + if (!doesChannelExist(context, channelId)) { + LogUtil.i( + "VoicemailChannelUtils.getChannelId", + "voicemail channel not found for phone account (possible SIM swap?), creating a new one"); + createVoicemailChannelForAccount(context, handle); + } + return channelId; + } + + private static boolean doesChannelExist(@NonNull Context context, @NonNull String channelId) { + return context.getSystemService(NotificationManager.class).getNotificationChannel(channelId) + != null; + } + + private static String getChannelIdForAccount(@NonNull PhoneAccountHandle handle) { + Assert.isNotNull(handle); + return PER_ACCOUNT_VOICEMAIL_CHANNEL_ID_PREFIX + ":" + handle.getId(); + } + + /** + * Creates a voicemail channel but doesn't associate it with a SIM. For devices with only one SIM + * slot this is ideal because there won't be duplication in the settings UI. + */ + private static void createGlobalVoicemailChannel(@NonNull Context context) { + NotificationChannel channel = newChannel(context, GLOBAL_VOICEMAIL_CHANNEL_ID, null); + + TelecomManager telecomManager = context.getSystemService(TelecomManager.class); + PhoneAccountHandle handle = + telecomManager.getDefaultOutgoingPhoneAccount(PhoneAccount.SCHEME_TEL); + if (handle == null) { + LogUtil.i( + "VoicemailChannelUtils.createGlobalVoicemailChannel", + "phone account is null, not migrating sound settings"); + } else if (!isChannelAllowedForAccount(context, handle)) { + LogUtil.i( + "VoicemailChannelUtils.createGlobalVoicemailChannel", + "phone account is not eligable, not migrating sound settings"); + } else { + migrateVoicemailSoundSettings(context, channel, handle); + } + context.getSystemService(NotificationManager.class).createNotificationChannel(channel); + } + + private static List getAllEligableAccounts(@NonNull Context context) { + List handles = new ArrayList<>(); + TelecomManager telecomManager = context.getSystemService(TelecomManager.class); + for (PhoneAccountHandle handle : telecomManager.getCallCapablePhoneAccounts()) { + if (isChannelAllowedForAccount(context, handle)) { + handles.add(handle); + } + } + return handles; + } + + private static void createVoicemailChannelForAccount( + @NonNull Context context, @NonNull PhoneAccountHandle handle) { + PhoneAccount phoneAccount = + context.getSystemService(TelecomManager.class).getPhoneAccount(handle); + NotificationChannel channel = + newChannel(context, getChannelIdForAccount(handle), phoneAccount.getLabel()); + migrateVoicemailSoundSettings(context, channel, handle); + context.getSystemService(NotificationManager.class).createNotificationChannel(channel); + } + + private static void migrateVoicemailSoundSettings( + @NonNull Context context, + @NonNull NotificationChannel channel, + @NonNull PhoneAccountHandle handle) { + TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class); + channel.enableVibration(telephonyManager.isVoicemailVibrationEnabled(handle)); + channel.setSound( + telephonyManager.getVoicemailRingtoneUri(handle), + new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_NOTIFICATION).build()); + } + + private static boolean isChannelAllowedForAccount( + @NonNull Context context, @NonNull PhoneAccountHandle handle) { + PhoneAccount phoneAccount = + context.getSystemService(TelecomManager.class).getPhoneAccount(handle); + if (phoneAccount == null) { + return false; + } + if (!phoneAccount.hasCapabilities(PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION)) { + return false; + } + return true; + } + + private static NotificationChannel newChannel( + @NonNull Context context, @NonNull String channelId, @Nullable CharSequence nameSuffix) { + CharSequence name = context.getText(R.string.notification_channel_voicemail); + // TODO: Use a string resource template after v10. + if (!TextUtils.isEmpty(nameSuffix)) { + name = TextUtils.concat(name, ": ", nameSuffix); + } + + NotificationChannel channel = + new NotificationChannel(channelId, name, NotificationManager.IMPORTANCE_DEFAULT); + channel.setShowBadge(true); + channel.enableLights(true); + channel.enableVibration(true); + channel.setSound( + Settings.System.DEFAULT_NOTIFICATION_URI, + new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_NOTIFICATION).build()); + return channel; + } + + private static boolean isSingleSimDevice(@NonNull Context context) { + return context.getSystemService(TelephonyManager.class).getPhoneCount() <= 1; + } + + private VoicemailChannelUtils() {} +} diff --git a/java/com/android/dialer/notification/res/values-af/strings.xml b/java/com/android/dialer/notification/res/values-af/strings.xml index 08dd754dd..e48249b3c 100644 --- a/java/com/android/dialer/notification/res/values-af/strings.xml +++ b/java/com/android/dialer/notification/res/values-af/strings.xml @@ -21,6 +21,5 @@ "Deurlopende oproepe" "Gemiste oproepe" "Stemboodskappe" - "Ekterne oproepe" "Verstek" diff --git a/java/com/android/dialer/notification/res/values-am/strings.xml b/java/com/android/dialer/notification/res/values-am/strings.xml index 56d6c2ca1..0983e0591 100644 --- a/java/com/android/dialer/notification/res/values-am/strings.xml +++ b/java/com/android/dialer/notification/res/values-am/strings.xml @@ -21,6 +21,5 @@ "በመካሄድ ላይ ያሉ ጥሪዎች" "ያመለጡ ጥሪዎች" "የድምፅ መልዕክቶች" - "ውጫዊ ጥሪዎች" "ነባሪ" diff --git a/java/com/android/dialer/notification/res/values-ar/strings.xml b/java/com/android/dialer/notification/res/values-ar/strings.xml index 71857c274..ab6059ff1 100644 --- a/java/com/android/dialer/notification/res/values-ar/strings.xml +++ b/java/com/android/dialer/notification/res/values-ar/strings.xml @@ -21,6 +21,5 @@ "المكالمات الجارية" "المكالمات الفائتة" "رسائل البريد الصوتي" - "المكالمات الخارجية" "افتراضي" diff --git a/java/com/android/dialer/notification/res/values-az/strings.xml b/java/com/android/dialer/notification/res/values-az/strings.xml index f907e554e..425f30ad7 100644 --- a/java/com/android/dialer/notification/res/values-az/strings.xml +++ b/java/com/android/dialer/notification/res/values-az/strings.xml @@ -21,6 +21,5 @@ "Gedən zənglər" "Buraxılmış zənglər" "Səsli məktublar" - "External calls" "Defolt" 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 index 4d5b5e78a..4598e7644 100644 --- 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 @@ -21,6 +21,5 @@ "Pozivi u toku" "Propušteni pozivi" "Govorne poruke" - "Spoljni pozivi" "Podrazumevano" diff --git a/java/com/android/dialer/notification/res/values-be/strings.xml b/java/com/android/dialer/notification/res/values-be/strings.xml index 70defe342..586a36c31 100644 --- a/java/com/android/dialer/notification/res/values-be/strings.xml +++ b/java/com/android/dialer/notification/res/values-be/strings.xml @@ -21,6 +21,5 @@ "Адбываючыяся выклікі" "Прапушчаныя выклікі" "Галасавая пошта" - "Знешнія выклікі" "Стандартны" diff --git a/java/com/android/dialer/notification/res/values-bg/strings.xml b/java/com/android/dialer/notification/res/values-bg/strings.xml index 1ec202e6c..9bc8f8f02 100644 --- a/java/com/android/dialer/notification/res/values-bg/strings.xml +++ b/java/com/android/dialer/notification/res/values-bg/strings.xml @@ -21,6 +21,5 @@ "Текущи обаждания" "Пропуснати обаждания" "Гласови съобщения" - "Външни обаждания" "По подразбиране" diff --git a/java/com/android/dialer/notification/res/values-bn/strings.xml b/java/com/android/dialer/notification/res/values-bn/strings.xml index 886f8317d..1d7781797 100644 --- a/java/com/android/dialer/notification/res/values-bn/strings.xml +++ b/java/com/android/dialer/notification/res/values-bn/strings.xml @@ -21,6 +21,5 @@ "সংযুক্ত কল" "মিস করা কল" "ভয়েসমেল" - "বাহ্যিক কল" "ডিফল্ট" diff --git a/java/com/android/dialer/notification/res/values-bs/strings.xml b/java/com/android/dialer/notification/res/values-bs/strings.xml index e408a6468..dedbb1c2d 100644 --- a/java/com/android/dialer/notification/res/values-bs/strings.xml +++ b/java/com/android/dialer/notification/res/values-bs/strings.xml @@ -21,6 +21,5 @@ "Tekući pozivi" "Propušteni pozivi" "Poruke govorne pošte" - "Vanjski pozivi" "Zadano" diff --git a/java/com/android/dialer/notification/res/values-ca/strings.xml b/java/com/android/dialer/notification/res/values-ca/strings.xml index ea81b627a..1c19d0f74 100644 --- a/java/com/android/dialer/notification/res/values-ca/strings.xml +++ b/java/com/android/dialer/notification/res/values-ca/strings.xml @@ -21,6 +21,5 @@ "Trucades en curs" "Trucades perdudes" "Missatges de veu" - "Trucades externes" "Predeterminat" diff --git a/java/com/android/dialer/notification/res/values-cs/strings.xml b/java/com/android/dialer/notification/res/values-cs/strings.xml index 9ea7b61ca..c428ca2f3 100644 --- a/java/com/android/dialer/notification/res/values-cs/strings.xml +++ b/java/com/android/dialer/notification/res/values-cs/strings.xml @@ -21,6 +21,5 @@ "Probíhající hovory" "Zmeškané hovory" "Hlasové zprávy" - "Externí hovory" "Výchozí" diff --git a/java/com/android/dialer/notification/res/values-da/strings.xml b/java/com/android/dialer/notification/res/values-da/strings.xml index e4fc4dded..7f0ce9f10 100644 --- a/java/com/android/dialer/notification/res/values-da/strings.xml +++ b/java/com/android/dialer/notification/res/values-da/strings.xml @@ -21,6 +21,5 @@ "Igangværende opkald" "Ubesvarede opkald" "Talebeskeder" - "Eksterne opkald" "Standard" diff --git a/java/com/android/dialer/notification/res/values-de/strings.xml b/java/com/android/dialer/notification/res/values-de/strings.xml index 7fce6bf47..86b752016 100644 --- a/java/com/android/dialer/notification/res/values-de/strings.xml +++ b/java/com/android/dialer/notification/res/values-de/strings.xml @@ -21,6 +21,5 @@ "Laufende Anrufe" "Entgangene Anrufe" "Mailboxnachrichten" - "Externe Anrufe" "Standard" diff --git a/java/com/android/dialer/notification/res/values-el/strings.xml b/java/com/android/dialer/notification/res/values-el/strings.xml index a25bb43e9..812dc2564 100644 --- a/java/com/android/dialer/notification/res/values-el/strings.xml +++ b/java/com/android/dialer/notification/res/values-el/strings.xml @@ -21,6 +21,5 @@ "Κλήσεις σε εξέλιξη" "Αναπάντητες κλήσεις" "Μηνύματα αυτόματου τηλεφωνητή" - "Εξωτερικές κλήσεις" "Προεπιλογή" diff --git a/java/com/android/dialer/notification/res/values-en-rAU/strings.xml b/java/com/android/dialer/notification/res/values-en-rAU/strings.xml index 7d4bd825b..43b722beb 100644 --- a/java/com/android/dialer/notification/res/values-en-rAU/strings.xml +++ b/java/com/android/dialer/notification/res/values-en-rAU/strings.xml @@ -21,6 +21,5 @@ "Ongoing calls" "Missed calls" "Voicemail" - "External calls" "Default" diff --git a/java/com/android/dialer/notification/res/values-en-rGB/strings.xml b/java/com/android/dialer/notification/res/values-en-rGB/strings.xml index 7d4bd825b..43b722beb 100644 --- a/java/com/android/dialer/notification/res/values-en-rGB/strings.xml +++ b/java/com/android/dialer/notification/res/values-en-rGB/strings.xml @@ -21,6 +21,5 @@ "Ongoing calls" "Missed calls" "Voicemail" - "External calls" "Default" diff --git a/java/com/android/dialer/notification/res/values-en-rIN/strings.xml b/java/com/android/dialer/notification/res/values-en-rIN/strings.xml index 7d4bd825b..43b722beb 100644 --- a/java/com/android/dialer/notification/res/values-en-rIN/strings.xml +++ b/java/com/android/dialer/notification/res/values-en-rIN/strings.xml @@ -21,6 +21,5 @@ "Ongoing calls" "Missed calls" "Voicemail" - "External calls" "Default" diff --git a/java/com/android/dialer/notification/res/values-es-rUS/strings.xml b/java/com/android/dialer/notification/res/values-es-rUS/strings.xml index fe8fe1354..c56edcfe6 100644 --- a/java/com/android/dialer/notification/res/values-es-rUS/strings.xml +++ b/java/com/android/dialer/notification/res/values-es-rUS/strings.xml @@ -21,6 +21,5 @@ "Llamadas en curso" "Llamadas perdidas" "Mensajes de voz" - "Llamadas externas" "Predeterminado" diff --git a/java/com/android/dialer/notification/res/values-es/strings.xml b/java/com/android/dialer/notification/res/values-es/strings.xml index fe8fe1354..c56edcfe6 100644 --- a/java/com/android/dialer/notification/res/values-es/strings.xml +++ b/java/com/android/dialer/notification/res/values-es/strings.xml @@ -21,6 +21,5 @@ "Llamadas en curso" "Llamadas perdidas" "Mensajes de voz" - "Llamadas externas" "Predeterminado" diff --git a/java/com/android/dialer/notification/res/values-et/strings.xml b/java/com/android/dialer/notification/res/values-et/strings.xml index 41623951f..9c60a3195 100644 --- a/java/com/android/dialer/notification/res/values-et/strings.xml +++ b/java/com/android/dialer/notification/res/values-et/strings.xml @@ -21,6 +21,5 @@ "Käimasolevad kõned" "Vastamata kõned" "Kõnepostisõnumid" - "Välised kõned" "Vaikeseade" diff --git a/java/com/android/dialer/notification/res/values-eu/strings.xml b/java/com/android/dialer/notification/res/values-eu/strings.xml index 326ac0ab6..d94ac0ab6 100644 --- a/java/com/android/dialer/notification/res/values-eu/strings.xml +++ b/java/com/android/dialer/notification/res/values-eu/strings.xml @@ -21,6 +21,5 @@ "Abian diren deiak" "Dei galduak" "Ahots-mezuak" - "Kanpoko deiak" "Lehenetsia" diff --git a/java/com/android/dialer/notification/res/values-fa/strings.xml b/java/com/android/dialer/notification/res/values-fa/strings.xml index f1a7efc3d..edbc98336 100644 --- a/java/com/android/dialer/notification/res/values-fa/strings.xml +++ b/java/com/android/dialer/notification/res/values-fa/strings.xml @@ -21,6 +21,5 @@ "تماس‌های درحال انجام" "تماس‌های بی‌پاسخ" "پست‌های صوتی" - "تماس‌های خارجی" "پیش‌فرض" diff --git a/java/com/android/dialer/notification/res/values-fi/strings.xml b/java/com/android/dialer/notification/res/values-fi/strings.xml index c88c2325a..87652f8a8 100644 --- a/java/com/android/dialer/notification/res/values-fi/strings.xml +++ b/java/com/android/dialer/notification/res/values-fi/strings.xml @@ -21,6 +21,5 @@ "Käynnissä olevat puhelut" "Vastaamattomat puhelut" "Vastaajaviestit" - "Ulkopuoliset puhelut" "Oletus" diff --git a/java/com/android/dialer/notification/res/values-fr-rCA/strings.xml b/java/com/android/dialer/notification/res/values-fr-rCA/strings.xml index a21d6b28b..5a2d7dcfe 100644 --- a/java/com/android/dialer/notification/res/values-fr-rCA/strings.xml +++ b/java/com/android/dialer/notification/res/values-fr-rCA/strings.xml @@ -21,6 +21,5 @@ "Appels en cours" "Appels manqués" "Messages vocaux" - "Appels externes" "Par défaut" diff --git a/java/com/android/dialer/notification/res/values-fr/strings.xml b/java/com/android/dialer/notification/res/values-fr/strings.xml index a21d6b28b..5a2d7dcfe 100644 --- a/java/com/android/dialer/notification/res/values-fr/strings.xml +++ b/java/com/android/dialer/notification/res/values-fr/strings.xml @@ -21,6 +21,5 @@ "Appels en cours" "Appels manqués" "Messages vocaux" - "Appels externes" "Par défaut" diff --git a/java/com/android/dialer/notification/res/values-gl/strings.xml b/java/com/android/dialer/notification/res/values-gl/strings.xml index 3b57a59b3..0e7fb612b 100644 --- a/java/com/android/dialer/notification/res/values-gl/strings.xml +++ b/java/com/android/dialer/notification/res/values-gl/strings.xml @@ -21,6 +21,5 @@ "Chamadas saíntes" "Chamadas perdidas" "Correos de voz" - "Chamadas externas" "Predeterminado" diff --git a/java/com/android/dialer/notification/res/values-gu/strings.xml b/java/com/android/dialer/notification/res/values-gu/strings.xml index f185e5971..a4a0a7ae1 100644 --- a/java/com/android/dialer/notification/res/values-gu/strings.xml +++ b/java/com/android/dialer/notification/res/values-gu/strings.xml @@ -21,6 +21,5 @@ "ચાલુ કૉલ" "છૂટેલા કૉલ" "વૉઇસમેઇલ" - "બાહ્ય કૉલ" "ડિફૉલ્ટ" diff --git a/java/com/android/dialer/notification/res/values-hi/strings.xml b/java/com/android/dialer/notification/res/values-hi/strings.xml index 89c8e5547..69ed9b0b2 100644 --- a/java/com/android/dialer/notification/res/values-hi/strings.xml +++ b/java/com/android/dialer/notification/res/values-hi/strings.xml @@ -21,6 +21,5 @@ "चल रहे कॉल" "छूटे कॉल" "वॉइसमेल" - "बाहरी कॉल" "डिफ़ॉल्ट" diff --git a/java/com/android/dialer/notification/res/values-hr/strings.xml b/java/com/android/dialer/notification/res/values-hr/strings.xml index 9f786d7d8..a5924c3ce 100644 --- a/java/com/android/dialer/notification/res/values-hr/strings.xml +++ b/java/com/android/dialer/notification/res/values-hr/strings.xml @@ -21,6 +21,5 @@ "Pozivi u tijeku" "Propušteni pozivi" "Poruke govorne pošte" - "Vanjski pozivi" "Zadano" diff --git a/java/com/android/dialer/notification/res/values-hu/strings.xml b/java/com/android/dialer/notification/res/values-hu/strings.xml index 09fa795d6..719252f0f 100644 --- a/java/com/android/dialer/notification/res/values-hu/strings.xml +++ b/java/com/android/dialer/notification/res/values-hu/strings.xml @@ -21,6 +21,5 @@ "Kimenő hívások" "Nem fogadott hívások" "Hangüzenetek" - "Külső hívások" "Alapértelmezett" diff --git a/java/com/android/dialer/notification/res/values-hy/strings.xml b/java/com/android/dialer/notification/res/values-hy/strings.xml index 693898a55..6bb2c34e3 100644 --- a/java/com/android/dialer/notification/res/values-hy/strings.xml +++ b/java/com/android/dialer/notification/res/values-hy/strings.xml @@ -21,6 +21,5 @@ "Ընթացիկ զանգեր" "Բաց թողնված զանգեր" "Ձայնային փոստ" - "Արտաքին զանգեր" "Կանխադրված" diff --git a/java/com/android/dialer/notification/res/values-in/strings.xml b/java/com/android/dialer/notification/res/values-in/strings.xml index 405b2927d..88ef3d524 100644 --- a/java/com/android/dialer/notification/res/values-in/strings.xml +++ b/java/com/android/dialer/notification/res/values-in/strings.xml @@ -21,6 +21,5 @@ "Panggilan keluar" "Panggilan tak terjawab" "Pesan suara" - "Panggilan eksternal" "Default" diff --git a/java/com/android/dialer/notification/res/values-is/strings.xml b/java/com/android/dialer/notification/res/values-is/strings.xml index be84917fc..166d97443 100644 --- a/java/com/android/dialer/notification/res/values-is/strings.xml +++ b/java/com/android/dialer/notification/res/values-is/strings.xml @@ -21,6 +21,5 @@ "Símtöl í gangi" "Ósvöruð símtöl" "Talhólfsskilaboð" - "Utanaðkomandi símtöl" "Sjálfgefið" diff --git a/java/com/android/dialer/notification/res/values-it/strings.xml b/java/com/android/dialer/notification/res/values-it/strings.xml index 1ac6e2d41..7b55da991 100644 --- a/java/com/android/dialer/notification/res/values-it/strings.xml +++ b/java/com/android/dialer/notification/res/values-it/strings.xml @@ -21,6 +21,5 @@ "Chiamate in uscita" "Chiamate perse" "Messaggi vocali" - "Chiamate esterne" "Predefinito" diff --git a/java/com/android/dialer/notification/res/values-iw/strings.xml b/java/com/android/dialer/notification/res/values-iw/strings.xml index ed07b8643..2b8b9df33 100644 --- a/java/com/android/dialer/notification/res/values-iw/strings.xml +++ b/java/com/android/dialer/notification/res/values-iw/strings.xml @@ -21,6 +21,5 @@ "שיחות יוצאות" "שיחות שלא נענו" "הודעות קוליות" - "שיחות חיצוניות" "ברירת מחדל" diff --git a/java/com/android/dialer/notification/res/values-ja/strings.xml b/java/com/android/dialer/notification/res/values-ja/strings.xml index 3265d7266..2ff8da7d0 100644 --- a/java/com/android/dialer/notification/res/values-ja/strings.xml +++ b/java/com/android/dialer/notification/res/values-ja/strings.xml @@ -21,6 +21,5 @@ "通話中" "不在着信" "ボイスメール" - "外部通話" "デフォルト" diff --git a/java/com/android/dialer/notification/res/values-ka/strings.xml b/java/com/android/dialer/notification/res/values-ka/strings.xml index 6d81465e2..73394efeb 100644 --- a/java/com/android/dialer/notification/res/values-ka/strings.xml +++ b/java/com/android/dialer/notification/res/values-ka/strings.xml @@ -21,6 +21,5 @@ "გამავალი ზარები" "გამოტოვებული ზარები" "ხმოვანი ფოსტა" - "გარე ზარები" "ნაგულისხმევი" diff --git a/java/com/android/dialer/notification/res/values-kk/strings.xml b/java/com/android/dialer/notification/res/values-kk/strings.xml index 35733fb04..8151c9ca9 100644 --- a/java/com/android/dialer/notification/res/values-kk/strings.xml +++ b/java/com/android/dialer/notification/res/values-kk/strings.xml @@ -21,6 +21,5 @@ "Қазіргі қоңыраулар" "Қабылданбаған қоңыраулар" "Дауыстық хабарлар" - "Сыртқы қоңыраулар" "Әдепкі" diff --git a/java/com/android/dialer/notification/res/values-km/strings.xml b/java/com/android/dialer/notification/res/values-km/strings.xml index 42bc11350..22131ff39 100644 --- a/java/com/android/dialer/notification/res/values-km/strings.xml +++ b/java/com/android/dialer/notification/res/values-km/strings.xml @@ -21,6 +21,5 @@ "ការ​ហៅ​បន្ត" "ការ​ហៅ​ដែល​មិន​បាន​ទទួល" "សារ​ជា​សំឡេង" - "ការ​ហៅខាង​ក្រៅ" "លំ​នាំ​ដើម" diff --git a/java/com/android/dialer/notification/res/values-kn/strings.xml b/java/com/android/dialer/notification/res/values-kn/strings.xml index 45f26e378..d6e55bdb1 100644 --- a/java/com/android/dialer/notification/res/values-kn/strings.xml +++ b/java/com/android/dialer/notification/res/values-kn/strings.xml @@ -21,6 +21,5 @@ "ಚಾಲ್ತಿಯಲ್ಲಿರುವ ಕರೆಗಳು" "ಮಿಸ್ಡ್‌ ಕರೆಗಳು" "ಧ್ವನಿಮೇಲ್‌ಗಳು" - "ಹೊರಗಿನ ಕರೆಗಳು" "ಡಿಫಾಲ್ಟ್" diff --git a/java/com/android/dialer/notification/res/values-ko/strings.xml b/java/com/android/dialer/notification/res/values-ko/strings.xml index d806cad06..5a667176d 100644 --- a/java/com/android/dialer/notification/res/values-ko/strings.xml +++ b/java/com/android/dialer/notification/res/values-ko/strings.xml @@ -21,6 +21,5 @@ "진행 중인 전화" "부재중 전화" "음성사서함" - "외부 전화" "기본" diff --git a/java/com/android/dialer/notification/res/values-ky/strings.xml b/java/com/android/dialer/notification/res/values-ky/strings.xml index eb6adf6e7..c5259315a 100644 --- a/java/com/android/dialer/notification/res/values-ky/strings.xml +++ b/java/com/android/dialer/notification/res/values-ky/strings.xml @@ -21,6 +21,5 @@ "Учурдагы чалуулар" "Кабыл алынбаган чалуулар" "Үнкаттар" - "Тышкы чалуулар" "Демейки" diff --git a/java/com/android/dialer/notification/res/values-lo/strings.xml b/java/com/android/dialer/notification/res/values-lo/strings.xml index f439807de..a52d9df14 100644 --- a/java/com/android/dialer/notification/res/values-lo/strings.xml +++ b/java/com/android/dialer/notification/res/values-lo/strings.xml @@ -21,6 +21,5 @@ "ສາຍໂທອອກ" "ສາຍບໍ່ໄດ້ຮັບ" "ຂໍ້ຄວາມສຽງ" - "ສາຍພາຍນອກ" "ຄ່າເລີ່ມຕົ້ນ" diff --git a/java/com/android/dialer/notification/res/values-lt/strings.xml b/java/com/android/dialer/notification/res/values-lt/strings.xml index f08697ad6..6f26d3e66 100644 --- a/java/com/android/dialer/notification/res/values-lt/strings.xml +++ b/java/com/android/dialer/notification/res/values-lt/strings.xml @@ -21,6 +21,5 @@ "Vykstantys skambučiai" "Praleisti skambučiai" "Balso pašto pranešimai" - "Išoriniai skambučiai" "Numatytasis" diff --git a/java/com/android/dialer/notification/res/values-lv/strings.xml b/java/com/android/dialer/notification/res/values-lv/strings.xml index d465b682d..1819d810a 100644 --- a/java/com/android/dialer/notification/res/values-lv/strings.xml +++ b/java/com/android/dialer/notification/res/values-lv/strings.xml @@ -21,6 +21,5 @@ "Aktīvie zvani" "Neatbildētie zvani" "Balss pasta ziņojumi" - "Ārējie zvani" "Noklusējums" diff --git a/java/com/android/dialer/notification/res/values-mk/strings.xml b/java/com/android/dialer/notification/res/values-mk/strings.xml index 838065ba9..56459c479 100644 --- a/java/com/android/dialer/notification/res/values-mk/strings.xml +++ b/java/com/android/dialer/notification/res/values-mk/strings.xml @@ -21,6 +21,5 @@ "Појдовни повици" "Пропуштени повици" "Говорни пораки" - "Надворешни повици" "Стандардно" diff --git a/java/com/android/dialer/notification/res/values-ml/strings.xml b/java/com/android/dialer/notification/res/values-ml/strings.xml index 448186a36..49a64e8f5 100644 --- a/java/com/android/dialer/notification/res/values-ml/strings.xml +++ b/java/com/android/dialer/notification/res/values-ml/strings.xml @@ -21,6 +21,5 @@ "നിലവിലുള്ള കോളുകൾ" "മിസ്‌ഡ് കോളുകൾ" "വോയ്‌സ്മെയിലുകൾ" - "എക്‌സ്റ്റേണൽ കോളുകൾ" "ഡിഫോൾട്ട്" diff --git a/java/com/android/dialer/notification/res/values-mn/strings.xml b/java/com/android/dialer/notification/res/values-mn/strings.xml index 3dca52e6b..28297b3c1 100644 --- a/java/com/android/dialer/notification/res/values-mn/strings.xml +++ b/java/com/android/dialer/notification/res/values-mn/strings.xml @@ -21,6 +21,5 @@ "Үргэлжилж буй дуудлага" "Аваагүй дуудлага" "Дуут шуудан" - "Гадаад дуудлага" "Өгөгдмөл" diff --git a/java/com/android/dialer/notification/res/values-mr/strings.xml b/java/com/android/dialer/notification/res/values-mr/strings.xml index 568537640..38fbd606a 100644 --- a/java/com/android/dialer/notification/res/values-mr/strings.xml +++ b/java/com/android/dialer/notification/res/values-mr/strings.xml @@ -21,6 +21,5 @@ "सुरू असलेले कॉल" "सुटलेले कॉल" "व्हॉइसमेल" - "बाह्य कॉल" "डीफॉल्ट" diff --git a/java/com/android/dialer/notification/res/values-ms/strings.xml b/java/com/android/dialer/notification/res/values-ms/strings.xml index a1961c4a4..ec7be04ef 100644 --- a/java/com/android/dialer/notification/res/values-ms/strings.xml +++ b/java/com/android/dialer/notification/res/values-ms/strings.xml @@ -21,6 +21,5 @@ "Panggilan sedang berlangsung" "Panggilan terlepas" "Mel suara" - "Panggilan luar" "Lalai" diff --git a/java/com/android/dialer/notification/res/values-my/strings.xml b/java/com/android/dialer/notification/res/values-my/strings.xml index 26398b459..44df84798 100644 --- a/java/com/android/dialer/notification/res/values-my/strings.xml +++ b/java/com/android/dialer/notification/res/values-my/strings.xml @@ -21,6 +21,5 @@ "လက်ရှိခေါ်ဆိုမှုများ" "လွဲသွားသော ခေါ်ဆိုမှုများ" "အသံစာပို့စနစ်များ" - "ပြင်ပခေါ်ဆိုမှုများ" "မူရင်း" diff --git a/java/com/android/dialer/notification/res/values-nb/strings.xml b/java/com/android/dialer/notification/res/values-nb/strings.xml index e4ccd48a0..8e63fd24b 100644 --- a/java/com/android/dialer/notification/res/values-nb/strings.xml +++ b/java/com/android/dialer/notification/res/values-nb/strings.xml @@ -21,6 +21,5 @@ "Pågående samtaler" "Tapte anrop" "Talepost" - "Eksterne anrop" "Standard" diff --git a/java/com/android/dialer/notification/res/values-ne/strings.xml b/java/com/android/dialer/notification/res/values-ne/strings.xml index 8ccd2997a..e653bb3f8 100644 --- a/java/com/android/dialer/notification/res/values-ne/strings.xml +++ b/java/com/android/dialer/notification/res/values-ne/strings.xml @@ -21,6 +21,5 @@ "जारी रहेका कलहरू" "छुटेका कलहरू" "भ्वाइस मेलहरू" - "बाह्य कलहरू" "पूर्वनिर्धारित मान" diff --git a/java/com/android/dialer/notification/res/values-nl/strings.xml b/java/com/android/dialer/notification/res/values-nl/strings.xml index e46dd19e3..094cc357f 100644 --- a/java/com/android/dialer/notification/res/values-nl/strings.xml +++ b/java/com/android/dialer/notification/res/values-nl/strings.xml @@ -21,6 +21,5 @@ "Actieve oproepen" "Gemiste oproepen" "Voicemails" - "Externe oproepen" "Standaard" diff --git a/java/com/android/dialer/notification/res/values-no/strings.xml b/java/com/android/dialer/notification/res/values-no/strings.xml index e4ccd48a0..8e63fd24b 100644 --- a/java/com/android/dialer/notification/res/values-no/strings.xml +++ b/java/com/android/dialer/notification/res/values-no/strings.xml @@ -21,6 +21,5 @@ "Pågående samtaler" "Tapte anrop" "Talepost" - "Eksterne anrop" "Standard" diff --git a/java/com/android/dialer/notification/res/values-pa/strings.xml b/java/com/android/dialer/notification/res/values-pa/strings.xml index 40709c1ac..c4ee97b22 100644 --- a/java/com/android/dialer/notification/res/values-pa/strings.xml +++ b/java/com/android/dialer/notification/res/values-pa/strings.xml @@ -21,6 +21,5 @@ "ਆਊਟਗੋਇੰਗ ਕਾਲਾਂ" "ਖੁੰਝੀਆਂ ਕਾਲਾਂ" "ਵੌਇਸਮੇਲਾਂ" - "ਬਾਹਰੀ ਕਾਲਾਂ" "ਪੂਰਵ-ਨਿਰਧਾਰਤ" diff --git a/java/com/android/dialer/notification/res/values-pl/strings.xml b/java/com/android/dialer/notification/res/values-pl/strings.xml index 73b795cff..4b3346001 100644 --- a/java/com/android/dialer/notification/res/values-pl/strings.xml +++ b/java/com/android/dialer/notification/res/values-pl/strings.xml @@ -21,6 +21,5 @@ "Połączenia trwające" "Połączenia nieodebrane" "Wiadomości głosowe" - "Połączenia zewnętrzne" "Domyślny" diff --git a/java/com/android/dialer/notification/res/values-pt-rBR/strings.xml b/java/com/android/dialer/notification/res/values-pt-rBR/strings.xml index f6e41cb11..4b988c3cc 100644 --- a/java/com/android/dialer/notification/res/values-pt-rBR/strings.xml +++ b/java/com/android/dialer/notification/res/values-pt-rBR/strings.xml @@ -21,6 +21,5 @@ "Chamadas em andamento" "Chamadas perdidas" "Correios de voz" - "Chamadas externas" "Padrão" diff --git a/java/com/android/dialer/notification/res/values-pt-rPT/strings.xml b/java/com/android/dialer/notification/res/values-pt-rPT/strings.xml index ec42a5bf5..45b31ebd0 100644 --- a/java/com/android/dialer/notification/res/values-pt-rPT/strings.xml +++ b/java/com/android/dialer/notification/res/values-pt-rPT/strings.xml @@ -21,6 +21,5 @@ "Chamadas efetuadas" "Chamadas não atendidas" "Mensagens de correio de voz" - "Chamadas externas" "Predefinição" diff --git a/java/com/android/dialer/notification/res/values-pt/strings.xml b/java/com/android/dialer/notification/res/values-pt/strings.xml index f6e41cb11..4b988c3cc 100644 --- a/java/com/android/dialer/notification/res/values-pt/strings.xml +++ b/java/com/android/dialer/notification/res/values-pt/strings.xml @@ -21,6 +21,5 @@ "Chamadas em andamento" "Chamadas perdidas" "Correios de voz" - "Chamadas externas" "Padrão" diff --git a/java/com/android/dialer/notification/res/values-ro/strings.xml b/java/com/android/dialer/notification/res/values-ro/strings.xml index 7deeabba3..040c58ad2 100644 --- a/java/com/android/dialer/notification/res/values-ro/strings.xml +++ b/java/com/android/dialer/notification/res/values-ro/strings.xml @@ -21,6 +21,5 @@ "Apeluri în desfășurare" "Apeluri nepreluate" "Mesaje vocale" - "Apeluri externe" "Prestabilit" diff --git a/java/com/android/dialer/notification/res/values-ru/strings.xml b/java/com/android/dialer/notification/res/values-ru/strings.xml index 3a1140455..a8117990a 100644 --- a/java/com/android/dialer/notification/res/values-ru/strings.xml +++ b/java/com/android/dialer/notification/res/values-ru/strings.xml @@ -21,6 +21,5 @@ "Текущие вызовы" "Пропущенные вызовы" "Голосовые сообщения" - "Внешние вызовы" "По умолчанию" diff --git a/java/com/android/dialer/notification/res/values-si/strings.xml b/java/com/android/dialer/notification/res/values-si/strings.xml index bf0a5a798..3ad0af729 100644 --- a/java/com/android/dialer/notification/res/values-si/strings.xml +++ b/java/com/android/dialer/notification/res/values-si/strings.xml @@ -21,6 +21,5 @@ "යන ඇමතුම්" "මඟ හැරුණු ඇමතුම්" "හඬ තැපැල්" - "බාහිර ඇමතුම්" "පෙරනිමි" diff --git a/java/com/android/dialer/notification/res/values-sk/strings.xml b/java/com/android/dialer/notification/res/values-sk/strings.xml index 4a67e60d2..30941bcd5 100644 --- a/java/com/android/dialer/notification/res/values-sk/strings.xml +++ b/java/com/android/dialer/notification/res/values-sk/strings.xml @@ -21,6 +21,5 @@ "Prebiehajúce hovory" "Zmeškané hovory" "Hlasové správy" - "Externé hovory" "Predvolené" diff --git a/java/com/android/dialer/notification/res/values-sl/strings.xml b/java/com/android/dialer/notification/res/values-sl/strings.xml index e54111d12..70474b87b 100644 --- a/java/com/android/dialer/notification/res/values-sl/strings.xml +++ b/java/com/android/dialer/notification/res/values-sl/strings.xml @@ -21,6 +21,5 @@ "Aktivni klici" "Neodgovorjeni klici" "Sporočila v odzivniku" - "Zunanji klici" "Privzeto" diff --git a/java/com/android/dialer/notification/res/values-sq/strings.xml b/java/com/android/dialer/notification/res/values-sq/strings.xml index 42d4daac3..03bc24775 100644 --- a/java/com/android/dialer/notification/res/values-sq/strings.xml +++ b/java/com/android/dialer/notification/res/values-sq/strings.xml @@ -21,6 +21,5 @@ "Telefonatat në vazhdim" "Telefonatat e humbura" "Postat zanore" - "Telefonatat e jashtme" "I parazgjedhur" diff --git a/java/com/android/dialer/notification/res/values-sr/strings.xml b/java/com/android/dialer/notification/res/values-sr/strings.xml index 10477170f..8326c0403 100644 --- a/java/com/android/dialer/notification/res/values-sr/strings.xml +++ b/java/com/android/dialer/notification/res/values-sr/strings.xml @@ -21,6 +21,5 @@ "Позиви у току" "Пропуштени позиви" "Говорне поруке" - "Спољни позиви" "Подразумевано" diff --git a/java/com/android/dialer/notification/res/values-sv/strings.xml b/java/com/android/dialer/notification/res/values-sv/strings.xml index 6c9ff83b7..e3170d48f 100644 --- a/java/com/android/dialer/notification/res/values-sv/strings.xml +++ b/java/com/android/dialer/notification/res/values-sv/strings.xml @@ -21,6 +21,5 @@ "Pågående samtal" "Missade samtal" "Röstmeddelanden" - "Externa samtal" "Standard" diff --git a/java/com/android/dialer/notification/res/values-sw/strings.xml b/java/com/android/dialer/notification/res/values-sw/strings.xml index a493f8897..d0a65b08c 100644 --- a/java/com/android/dialer/notification/res/values-sw/strings.xml +++ b/java/com/android/dialer/notification/res/values-sw/strings.xml @@ -21,6 +21,5 @@ "Simu zinazoendelea" "Simu ambazo hukujibu" "Ujumbe wa sauti" - "Simu za nje" "Chaguo-msingi" diff --git a/java/com/android/dialer/notification/res/values-ta/strings.xml b/java/com/android/dialer/notification/res/values-ta/strings.xml index d3000cf90..8a6ae89a8 100644 --- a/java/com/android/dialer/notification/res/values-ta/strings.xml +++ b/java/com/android/dialer/notification/res/values-ta/strings.xml @@ -21,6 +21,5 @@ "செயலில் உள்ள அழைப்புகள்" "தவறிய அழைப்புகள்" "குரலஞ்சல்கள்" - "வெளி அழைப்புகள்" "இயல்பு" diff --git a/java/com/android/dialer/notification/res/values-te/strings.xml b/java/com/android/dialer/notification/res/values-te/strings.xml index b14b21071..b1911d34d 100644 --- a/java/com/android/dialer/notification/res/values-te/strings.xml +++ b/java/com/android/dialer/notification/res/values-te/strings.xml @@ -21,6 +21,5 @@ "కొనసాగుతున్న కాల్‌లు" "సమాధానమివ్వని కాల్‌లు" "వాయిస్ మెయిల్‌లు" - "బాహ్య కాల్‌లు" "డిఫాల్ట్" diff --git a/java/com/android/dialer/notification/res/values-th/strings.xml b/java/com/android/dialer/notification/res/values-th/strings.xml index 45248bbbe..b2949e42f 100644 --- a/java/com/android/dialer/notification/res/values-th/strings.xml +++ b/java/com/android/dialer/notification/res/values-th/strings.xml @@ -21,6 +21,5 @@ "สายที่สนทนาอยู่" "สายที่ไม่ได้รับ" "ข้อความเสียง" - "สายนอก" "ค่าเริ่มต้น" diff --git a/java/com/android/dialer/notification/res/values-tl/strings.xml b/java/com/android/dialer/notification/res/values-tl/strings.xml index 3e88a055f..1219ad86f 100644 --- a/java/com/android/dialer/notification/res/values-tl/strings.xml +++ b/java/com/android/dialer/notification/res/values-tl/strings.xml @@ -21,6 +21,5 @@ "Mga kasalukuyang tawag" "Mga hindi nasagot na tawag" "Mga voicemail" - "Mga external na tawag" "Default" diff --git a/java/com/android/dialer/notification/res/values-tr/strings.xml b/java/com/android/dialer/notification/res/values-tr/strings.xml index d4e063bc2..71c91c806 100644 --- a/java/com/android/dialer/notification/res/values-tr/strings.xml +++ b/java/com/android/dialer/notification/res/values-tr/strings.xml @@ -21,6 +21,5 @@ "Devam eden çağrılar" "Cevapsız çağrılar" "Sesli mesajlar" - "Harici çağrılar" "Varsayılan" diff --git a/java/com/android/dialer/notification/res/values-uk/strings.xml b/java/com/android/dialer/notification/res/values-uk/strings.xml index a83a58460..a002f42e1 100644 --- a/java/com/android/dialer/notification/res/values-uk/strings.xml +++ b/java/com/android/dialer/notification/res/values-uk/strings.xml @@ -21,6 +21,5 @@ "Поточні виклики" "Пропущені виклики" "Голосова пошта" - "Зовнішні виклики" "За умовчанням" diff --git a/java/com/android/dialer/notification/res/values-ur/strings.xml b/java/com/android/dialer/notification/res/values-ur/strings.xml index ba6e0d1da..805fe08f8 100644 --- a/java/com/android/dialer/notification/res/values-ur/strings.xml +++ b/java/com/android/dialer/notification/res/values-ur/strings.xml @@ -21,6 +21,5 @@ "جاری کالیں" "چھوٹی ہوئی کالیں" "صوتی میلز" - "بیرونی کالیں" "ڈیفالٹ" diff --git a/java/com/android/dialer/notification/res/values-uz/strings.xml b/java/com/android/dialer/notification/res/values-uz/strings.xml index d45ff47d2..16075b031 100644 --- a/java/com/android/dialer/notification/res/values-uz/strings.xml +++ b/java/com/android/dialer/notification/res/values-uz/strings.xml @@ -21,6 +21,5 @@ "Davom etayotgan suhbatlar" "Javobsiz chaqiruvlar" "Ovozli xabarlar" - "Tashqi chaqiruvlar" "Standart" diff --git a/java/com/android/dialer/notification/res/values-vi/strings.xml b/java/com/android/dialer/notification/res/values-vi/strings.xml index 6df88721e..b6ab3d2d8 100644 --- a/java/com/android/dialer/notification/res/values-vi/strings.xml +++ b/java/com/android/dialer/notification/res/values-vi/strings.xml @@ -21,6 +21,5 @@ "Cuộc gọi đến" "Cuộc gọi nhỡ" "Thư thoại" - "Cuộc gọi bên ngoài" "Mặc định" diff --git a/java/com/android/dialer/notification/res/values-zh-rCN/strings.xml b/java/com/android/dialer/notification/res/values-zh-rCN/strings.xml index fa5f0a657..1ef46c2b9 100644 --- a/java/com/android/dialer/notification/res/values-zh-rCN/strings.xml +++ b/java/com/android/dialer/notification/res/values-zh-rCN/strings.xml @@ -21,6 +21,5 @@ "正在进行的通话" "未接电话" "语音邮件" - "外部来电" "默认" diff --git a/java/com/android/dialer/notification/res/values-zh-rHK/strings.xml b/java/com/android/dialer/notification/res/values-zh-rHK/strings.xml index 307a7f9bf..43a6fabf6 100644 --- a/java/com/android/dialer/notification/res/values-zh-rHK/strings.xml +++ b/java/com/android/dialer/notification/res/values-zh-rHK/strings.xml @@ -21,6 +21,5 @@ "進行中的通話" "未接來電" "留言信箱" - "外部通話" "預設" diff --git a/java/com/android/dialer/notification/res/values-zh-rTW/strings.xml b/java/com/android/dialer/notification/res/values-zh-rTW/strings.xml index 054a2d737..35236be1d 100644 --- a/java/com/android/dialer/notification/res/values-zh-rTW/strings.xml +++ b/java/com/android/dialer/notification/res/values-zh-rTW/strings.xml @@ -21,6 +21,5 @@ "進行中的通話" "未接來電" "語音留言" - "外部通話" "預設" diff --git a/java/com/android/dialer/notification/res/values-zu/strings.xml b/java/com/android/dialer/notification/res/values-zu/strings.xml index 744ffc816..f3d95531f 100644 --- a/java/com/android/dialer/notification/res/values-zu/strings.xml +++ b/java/com/android/dialer/notification/res/values-zu/strings.xml @@ -21,6 +21,5 @@ "Amakholi aqhubekayo" "Amakholi akuphuthile" "Amavoyisimeyili" - "Amakholi angaphandle" "Okuzenzakalelayo" diff --git a/java/com/android/dialer/notification/res/values/ids.xml b/java/com/android/dialer/notification/res/values/ids.xml deleted file mode 100644 index c965f319d..000000000 --- a/java/com/android/dialer/notification/res/values/ids.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - diff --git a/java/com/android/dialer/notification/res/values/strings.xml b/java/com/android/dialer/notification/res/values/strings.xml index cb3119f67..a3c6935aa 100644 --- a/java/com/android/dialer/notification/res/values/strings.xml +++ b/java/com/android/dialer/notification/res/values/strings.xml @@ -20,7 +20,6 @@ Ongoing calls Missed calls Voicemails - External calls Default diff --git a/java/com/android/dialer/oem/CequintCallerIdManager.java b/java/com/android/dialer/oem/CequintCallerIdManager.java index 095ee4e66..86097c41a 100644 --- a/java/com/android/dialer/oem/CequintCallerIdManager.java +++ b/java/com/android/dialer/oem/CequintCallerIdManager.java @@ -18,7 +18,6 @@ package com.android.dialer.oem; import android.annotation.TargetApi; import android.content.Context; import android.content.pm.PackageManager; -import android.database.ContentObserver; import android.database.Cursor; import android.net.Uri; import android.os.Build.VERSION_CODES; @@ -29,9 +28,8 @@ import android.support.annotation.WorkerThread; import android.telephony.PhoneNumberUtils; import android.text.TextUtils; import com.android.dialer.common.Assert; -import com.android.dialer.common.ConfigProviderBindings; import com.android.dialer.common.LogUtil; -import com.android.dialer.util.PermissionsUtil; +import com.android.dialer.configprovider.ConfigProviderBindings; import java.util.concurrent.ConcurrentHashMap; /** @@ -73,17 +71,12 @@ public class CequintCallerIdManager { private static final String IMAGE = "cid_pLogo"; private static final String DISPLAY_NAME = "cid_pDisplayName"; - // TODO: Revisit it and maybe remove it if it's not necessary. - private static final ConcurrentHashMap callLogCache = - new ConcurrentHashMap<>(); - private static final ConcurrentHashMap incallIncomingCallCache = - new ConcurrentHashMap<>(); - private static final ConcurrentHashMap incallOutgoingCallCache = - new ConcurrentHashMap<>(); - private static boolean hasRegisteredContentObserver; private static boolean hasAlreadyCheckedCequintCallerIdPackage; private static boolean isCequintCallerIdEnabled; + // TODO: Revisit it and maybe remove it if it's not necessary. + private final ConcurrentHashMap callLogCache; + /** Cequint caller id contact information. */ public static class CequintCallerIdContact { public final String name; @@ -117,27 +110,8 @@ public class CequintCallerIdManager { return isCequintCallerIdEnabled; } - @WorkerThread - @Nullable - public static CequintCallerIdContact getCequintCallerIdContact(Context context, String number) { - Assert.isWorkerThread(); - LogUtil.d( - "CequintCallerIdManager.getCequintCallerIdContact", - "number: %s", - LogUtil.sanitizePhoneNumber(number)); - if (callLogCache.containsKey(number)) { - return callLogCache.get(number); - } - CequintCallerIdContact cequintCallerIdContact = - lookup( - context, - CONTENT_URI, - PhoneNumberUtils.stripSeparators(number), - new String[] {"system"}); - if (cequintCallerIdContact != null) { - callLogCache.put(number, cequintCallerIdContact); - } - return cequintCallerIdContact; + public static CequintCallerIdManager createInstanceForCallLog() { + return new CequintCallerIdManager(); } @WorkerThread @@ -151,12 +125,6 @@ public class CequintCallerIdManager { LogUtil.sanitizePhoneNumber(number), LogUtil.sanitizePii(cnapName), isIncoming); - registerContentObserver(context); - if (isIncoming && incallIncomingCallCache.containsKey(number)) { - return incallIncomingCallCache.get(number); - } else if (!isIncoming && incallOutgoingCallCache.containsKey(number)) { - return incallOutgoingCallCache.get(number); - } int flag = 0; if (isIncoming) { flag |= CALLER_ID_LOOKUP_INCOMING_CALL; @@ -165,14 +133,28 @@ public class CequintCallerIdManager { flag |= CALLER_ID_LOOKUP_USER_PROVIDED_CID; } String[] flags = {cnapName, String.valueOf(flag)}; + return lookup(context, CONTENT_URI_FOR_INCALL, number, flags); + } + + @WorkerThread + @Nullable + public CequintCallerIdContact getCequintCallerIdContact(Context context, String number) { + Assert.isWorkerThread(); + LogUtil.d( + "CequintCallerIdManager.getCequintCallerIdContact", + "number: %s", + LogUtil.sanitizePhoneNumber(number)); + if (callLogCache.containsKey(number)) { + return callLogCache.get(number); + } CequintCallerIdContact cequintCallerIdContact = - lookup(context, CONTENT_URI_FOR_INCALL, number, flags); + lookup( + context, + CONTENT_URI, + PhoneNumberUtils.stripSeparators(number), + new String[] {"system"}); if (cequintCallerIdContact != null) { - if (isIncoming) { - incallIncomingCallCache.put(number, cequintCallerIdContact); - } else { - incallOutgoingCallCache.put(number, cequintCallerIdContact); - } + callLogCache.put(number, cequintCallerIdContact); } return cequintCallerIdContact; } @@ -285,33 +267,7 @@ public class CequintCallerIdManager { return geoDescription; } - private static synchronized void registerContentObserver(Context context) { - if (!PermissionsUtil.hasCequintPermissions(context)) { - LogUtil.i("CequintCallerIdManager.registerContentObserver", "no cequint permissions"); - return; - } - - if (hasRegisteredContentObserver) { - return; - } - ContentObserver contentObserver = - new ContentObserver(null) { - @Override - public void onChange(boolean selfChange) { - invalidateCache(); - } - }; - - context - .getContentResolver() - .registerContentObserver(CONTENT_URI_FOR_INCALL, true, contentObserver); - hasRegisteredContentObserver = true; - } - - private static void invalidateCache() { - incallIncomingCallCache.clear(); - incallOutgoingCallCache.clear(); + private CequintCallerIdManager() { + callLogCache = new ConcurrentHashMap<>(); } - - private CequintCallerIdManager() {} } diff --git a/java/com/android/dialer/oem/MotorolaHiddenMenuKeySequence.java b/java/com/android/dialer/oem/MotorolaHiddenMenuKeySequence.java index 9cf145b7a..79abff08e 100644 --- a/java/com/android/dialer/oem/MotorolaHiddenMenuKeySequence.java +++ b/java/com/android/dialer/oem/MotorolaHiddenMenuKeySequence.java @@ -67,9 +67,7 @@ public class MotorolaHiddenMenuKeySequence { } private MotorolaHiddenMenuKeySequence(Context context) { - featureHiddenMenuEnabled = - MotorolaUtils.isSpnMatched(context) - && context.getResources().getBoolean(R.bool.motorola_feature_hidden_menu); + featureHiddenMenuEnabled = MotorolaUtils.isSupportingHiddenMenu(context); // In case we do have a SPN from resource we need to match from service; otherwise we are // free to go if (featureHiddenMenuEnabled) { diff --git a/java/com/android/dialer/oem/MotorolaUtils.java b/java/com/android/dialer/oem/MotorolaUtils.java index db2b8909a..ffab8ea23 100644 --- a/java/com/android/dialer/oem/MotorolaUtils.java +++ b/java/com/android/dialer/oem/MotorolaUtils.java @@ -18,8 +18,11 @@ package com.android.dialer.oem; import android.content.Context; import android.content.res.Resources; import android.telephony.TelephonyManager; -import com.android.dialer.common.ConfigProviderBindings; +import com.android.dialer.common.LogUtil; import com.android.dialer.common.PackageUtils; +import com.android.dialer.configprovider.ConfigProviderBindings; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; /** Util class for Motorola OEM devices. */ public class MotorolaUtils { @@ -39,6 +42,8 @@ public class MotorolaUtils { // This is used to check if a Motorola device supports WiFi call feature, by checking if a certain // package is enabled. private static final String WIFI_CALL_PACKAGE_NAME = "com.motorola.sprintwfc"; + // Thi is used to check if a Motorola device supports hidden menu feature. + private static final String HIDDEN_MENU_FEATURE = "com.motorola.software.sprint.hidden_menu"; // Feature flag indicates it's a HD call, currently this is only used by Motorola system build. // TODO(b/35359461): Use reference to android.provider.CallLog once it's in new SDK. @@ -64,6 +69,10 @@ public class MotorolaUtils { } } + static boolean isSupportingHiddenMenu(Context context) { + return context.getPackageManager().hasSystemFeature(HIDDEN_MENU_FEATURE); + } + public static boolean shouldBlinkHdIconWhenConnectingCall(Context context) { return ConfigProviderBindings.get(context) .getBoolean(CONFIG_HD_CODEC_BLINKING_ICON_WHEN_CONNECTING_CALL_ENABLED, true) @@ -102,6 +111,22 @@ public class MotorolaUtils { return MotorolaHiddenMenuKeySequence.handleCharSequence(context, input); } + public static boolean isWifiCallingAvailable(Context context) { + if (!isSupportingSprintWifiCall(context)) { + return false; + } + TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class); + try { + Method method = TelephonyManager.class.getMethod("isWifiCallingAvailable"); + boolean isWifiCallingAvailable = (boolean) method.invoke(telephonyManager); + LogUtil.d("MotorolaUtils.isWifiCallingAvailable", "%b", isWifiCallingAvailable); + return isWifiCallingAvailable; + } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { + LogUtil.e("MotorolaUtils.isWifiCallingAvailable", "", e); + } + return false; + } + private static boolean isSupportingSprintHdCodec(Context context) { return isSpnMatched(context) && context.getResources().getBoolean(R.bool.motorola_sprint_hd_codec) diff --git a/java/com/android/dialer/oem/res/values-mcc310-mnc000/motorola_config.xml b/java/com/android/dialer/oem/res/values-mcc310-mnc000/motorola_config.xml index 7f63bee75..ac3397520 100644 --- a/java/com/android/dialer/oem/res/values-mcc310-mnc000/motorola_config.xml +++ b/java/com/android/dialer/oem/res/values-mcc310-mnc000/motorola_config.xml @@ -1,6 +1,21 @@ + + true - true Sprint \ No newline at end of file diff --git a/java/com/android/dialer/oem/res/values-mcc310-mnc120/motorola_config.xml b/java/com/android/dialer/oem/res/values-mcc310-mnc120/motorola_config.xml index 39b72cdd1..c5cb0d1f7 100644 --- a/java/com/android/dialer/oem/res/values-mcc310-mnc120/motorola_config.xml +++ b/java/com/android/dialer/oem/res/values-mcc310-mnc120/motorola_config.xml @@ -1,5 +1,20 @@ + + true - true \ No newline at end of file diff --git a/java/com/android/dialer/oem/res/values-mcc311-mnc490/motorola_config.xml b/java/com/android/dialer/oem/res/values-mcc311-mnc490/motorola_config.xml index 39b72cdd1..c5cb0d1f7 100644 --- a/java/com/android/dialer/oem/res/values-mcc311-mnc490/motorola_config.xml +++ b/java/com/android/dialer/oem/res/values-mcc311-mnc490/motorola_config.xml @@ -1,5 +1,20 @@ + + true - true \ No newline at end of file diff --git a/java/com/android/dialer/oem/res/values-mcc311-mnc870/motorola_config.xml b/java/com/android/dialer/oem/res/values-mcc311-mnc870/motorola_config.xml index 39b72cdd1..c5cb0d1f7 100644 --- a/java/com/android/dialer/oem/res/values-mcc311-mnc870/motorola_config.xml +++ b/java/com/android/dialer/oem/res/values-mcc311-mnc870/motorola_config.xml @@ -1,5 +1,20 @@ + + true - true \ No newline at end of file diff --git a/java/com/android/dialer/oem/res/values-mcc312-mnc530/motorola_config.xml b/java/com/android/dialer/oem/res/values-mcc312-mnc530/motorola_config.xml index 39b72cdd1..c5cb0d1f7 100644 --- a/java/com/android/dialer/oem/res/values-mcc312-mnc530/motorola_config.xml +++ b/java/com/android/dialer/oem/res/values-mcc312-mnc530/motorola_config.xml @@ -1,5 +1,20 @@ + + true - true \ No newline at end of file diff --git a/java/com/android/dialer/oem/res/values-mcc316-mnc010/motorola_config.xml b/java/com/android/dialer/oem/res/values-mcc316-mnc010/motorola_config.xml index 39b72cdd1..c5cb0d1f7 100644 --- a/java/com/android/dialer/oem/res/values-mcc316-mnc010/motorola_config.xml +++ b/java/com/android/dialer/oem/res/values-mcc316-mnc010/motorola_config.xml @@ -1,5 +1,20 @@ + + true - true \ No newline at end of file diff --git a/java/com/android/dialer/oem/res/values/motorola_config.xml b/java/com/android/dialer/oem/res/values/motorola_config.xml index f875d573d..46e7a16b6 100644 --- a/java/com/android/dialer/oem/res/values/motorola_config.xml +++ b/java/com/android/dialer/oem/res/values/motorola_config.xml @@ -1,12 +1,25 @@ + + false - - false - diff --git a/java/com/android/dialer/p13n/inference/P13nRanking.java b/java/com/android/dialer/p13n/inference/P13nRanking.java index 0682e85db..79b4d7136 100644 --- a/java/com/android/dialer/p13n/inference/P13nRanking.java +++ b/java/com/android/dialer/p13n/inference/P13nRanking.java @@ -22,7 +22,7 @@ import android.support.annotation.MainThread; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.android.dialer.common.Assert; -import com.android.dialer.common.ConfigProviderBindings; +import com.android.dialer.configprovider.ConfigProviderBindings; import com.android.dialer.p13n.inference.protocol.P13nRanker; import com.android.dialer.p13n.inference.protocol.P13nRankerFactory; import java.util.List; diff --git a/java/com/android/dialer/performancereport/PerformanceReport.java b/java/com/android/dialer/performancereport/PerformanceReport.java new file mode 100644 index 000000000..27fd7485b --- /dev/null +++ b/java/com/android/dialer/performancereport/PerformanceReport.java @@ -0,0 +1,155 @@ +/* + * 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.performancereport; + +import android.os.SystemClock; +import android.support.annotation.Nullable; +import android.support.v7.widget.RecyclerView; +import android.widget.AbsListView; +import com.android.dialer.common.LogUtil; +import com.android.dialer.logging.UiAction; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; + +/** Tracks UI performance for a call. */ +public final class PerformanceReport { + + private static final long INVALID_TIME = -1; + private static final long ACTIVE_DURATION = TimeUnit.MINUTES.toMillis(5); + + private static final List actions = new ArrayList<>(); + private static final List actionTimestamps = new ArrayList<>(); + + private static final RecyclerView.OnScrollListener recordOnScrollListener = + new RecyclerView.OnScrollListener() { + @Override + public void onScrollStateChanged(RecyclerView recyclerView, int newState) { + if (newState == RecyclerView.SCROLL_STATE_SETTLING) { + PerformanceReport.recordClick(UiAction.Type.SCROLL); + } + super.onScrollStateChanged(recyclerView, newState); + } + }; + + private static boolean recording = false; + private static long appLaunchTimeMillis = INVALID_TIME; + private static long firstClickTimeMillis = INVALID_TIME; + private static long lastActionTimeMillis = INVALID_TIME; + + @Nullable private static UiAction.Type ignoreActionOnce = null; + + private PerformanceReport() {} + + public static void startRecording() { + LogUtil.enterBlock("PerformanceReport.startRecording"); + + appLaunchTimeMillis = SystemClock.elapsedRealtime(); + lastActionTimeMillis = appLaunchTimeMillis; + if (!actions.isEmpty()) { + actions.clear(); + actionTimestamps.clear(); + } + recording = true; + } + + public static void stopRecording() { + LogUtil.enterBlock("PerformanceReport.stopRecording"); + recording = false; + } + + public static void recordClick(UiAction.Type action) { + if (!recording) { + return; + } + + if (action == ignoreActionOnce) { + LogUtil.i("PerformanceReport.recordClick", "%s is ignored", action.toString()); + ignoreActionOnce = null; + return; + } + ignoreActionOnce = null; + + LogUtil.v("PerformanceReport.recordClick", action.toString()); + + // Timeout + long currentTime = SystemClock.elapsedRealtime(); + if (currentTime - lastActionTimeMillis > ACTIVE_DURATION) { + startRecording(); + recordClick(action); + return; + } + + lastActionTimeMillis = currentTime; + if (actions.isEmpty()) { + firstClickTimeMillis = currentTime; + } + actions.add(action); + actionTimestamps.add(currentTime - appLaunchTimeMillis); + } + + public static void recordScrollStateChange(int scrollState) { + if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) { + recordClick(UiAction.Type.SCROLL); + } + } + + public static void logOnScrollStateChange(RecyclerView recyclerView) { + // Remove the listener in case it was added before + recyclerView.removeOnScrollListener(recordOnScrollListener); + recyclerView.addOnScrollListener(recordOnScrollListener); + } + + public static boolean isRecording() { + return recording; + } + + public static long getTimeSinceAppLaunch() { + if (appLaunchTimeMillis == INVALID_TIME) { + return INVALID_TIME; + } + return SystemClock.elapsedRealtime() - appLaunchTimeMillis; + } + + public static long getTimeSinceFirstClick() { + if (firstClickTimeMillis == INVALID_TIME) { + return INVALID_TIME; + } + return SystemClock.elapsedRealtime() - firstClickTimeMillis; + } + + public static List getActions() { + return actions; + } + + public static List getActionTimestamps() { + return actionTimestamps; + } + + @Nullable + public static UiAction.Type getIgnoreActionOnce() { + return ignoreActionOnce; + } + + public static void setIgnoreActionOnce(@Nullable UiAction.Type ignoreActionOnce) { + PerformanceReport.ignoreActionOnce = ignoreActionOnce; + LogUtil.i( + "PerformanceReport.setIgnoreActionOnce", + "next action will be ignored once if it is %s", + ignoreActionOnce.toString()); + } +} diff --git a/java/com/android/dialer/phonenumbercache/CachedNumberLookupService.java b/java/com/android/dialer/phonenumbercache/CachedNumberLookupService.java index 2aed9e75e..c398251e4 100644 --- a/java/com/android/dialer/phonenumbercache/CachedNumberLookupService.java +++ b/java/com/android/dialer/phonenumbercache/CachedNumberLookupService.java @@ -49,6 +49,8 @@ public interface CachedNumberLookupService { boolean canReportAsInvalid(ContactSource.Type sourceType, String objectId); + boolean reportAsInvalid(Context context, CachedContactInfo cachedContactInfo); + /** @return return {@link Uri} to the photo or return {@code null} when failing to add photo */ @Nullable Uri addPhoto(Context context, String number, InputStream in); diff --git a/java/com/android/dialer/phonenumbercache/ContactInfo.java b/java/com/android/dialer/phonenumbercache/ContactInfo.java index 5546553f9..aef7374e4 100644 --- a/java/com/android/dialer/phonenumbercache/ContactInfo.java +++ b/java/com/android/dialer/phonenumbercache/ContactInfo.java @@ -17,7 +17,7 @@ package com.android.dialer.phonenumbercache; import android.net.Uri; -import android.support.annotation.Nullable; +import android.support.annotation.NonNull; import android.text.TextUtils; import com.android.contacts.common.ContactsUtils.UserType; import com.android.contacts.common.util.UriUtils; @@ -59,7 +59,7 @@ public class ContactInfo { public boolean isBadData; public String objectId; public @UserType long userType; - public @Nullable ContactSource.Type sourceType = ContactSource.Type.UNKNOWN_SOURCE_TYPE; + public @NonNull ContactSource.Type sourceType = ContactSource.Type.UNKNOWN_SOURCE_TYPE; /** * True if local contact exists. This is only used for Cequint Caller ID so it won't overwrite * photo if local contact exists. diff --git a/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java b/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java index bd4ba9764..4fa3147eb 100644 --- a/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java +++ b/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java @@ -203,6 +203,7 @@ public class ContactInfoHelper { return info; } + @Nullable public ContactInfo lookupNumber(String number, String countryIso) { return lookupNumber(number, countryIso, -1); } @@ -223,12 +224,14 @@ public class ContactInfoHelper { @SuppressWarnings("ReferenceEquality") public ContactInfo lookupNumber(String number, String countryIso, long directoryId) { if (TextUtils.isEmpty(number)) { + LogUtil.d("ContactInfoHelper.lookupNumber", "number is empty"); return null; } ContactInfo info; if (PhoneNumberHelper.isUriNumber(number)) { + LogUtil.d("ContactInfoHelper.lookupNumber", "number is sip"); // The number is a SIP address.. info = lookupContactFromUri(getContactInfoLookupUri(number, directoryId)); if (info == null || info == ContactInfo.EMPTY) { @@ -246,6 +249,7 @@ public class ContactInfoHelper { final ContactInfo updatedInfo; if (info == null) { // The lookup failed. + LogUtil.d("ContactInfoHelper.lookupNumber", "lookup failed"); updatedInfo = null; } else { // If we did not find a matching contact, generate an empty contact info for the number. @@ -325,9 +329,11 @@ public class ContactInfoHelper { */ ContactInfo lookupContactFromUri(Uri uri) { if (uri == null) { + LogUtil.d("ContactInfoHelper.lookupContactFromUri", "uri is null"); return null; } if (!PermissionsUtil.hasContactsReadPermissions(mContext)) { + LogUtil.d("ContactInfoHelper.lookupContactFromUri", "no contact permission, return empty"); return ContactInfo.EMPTY; } @@ -336,10 +342,12 @@ public class ContactInfoHelper { String[] projection = PhoneQuery.getPhoneLookupProjection(uri); phoneLookupCursor = mContext.getContentResolver().query(uri, projection, null, null, null); } catch (NullPointerException e) { + LogUtil.e("ContactInfoHelper.lookupContactFromUri", "phone lookup", e); // Trap NPE from pre-N CP2 return null; } if (phoneLookupCursor == null) { + LogUtil.d("ContactInfoHelper.lookupContactFromUri", "phoneLookupCursor is null"); return null; } @@ -408,19 +416,32 @@ public class ContactInfoHelper { private ContactInfo queryContactInfoForPhoneNumber( String number, String countryIso, long directoryId) { if (TextUtils.isEmpty(number)) { + LogUtil.d("ContactInfoHelper.queryContactInfoForPhoneNumber", "number is empty"); return null; } ContactInfo info = lookupContactFromUri(getContactInfoLookupUri(number, directoryId)); + if (info == null) { + LogUtil.d("ContactInfoHelper.queryContactInfoForPhoneNumber", "info looked up is null"); + } if (info != null && info != ContactInfo.EMPTY) { info.formattedNumber = formatPhoneNumber(number, null, countryIso); + if (directoryId == -1) { + // Contact found in the default directory + info.sourceType = ContactSource.Type.SOURCE_TYPE_DIRECTORY; + } else { + // Contact found in the extended directory specified by directoryId + info.sourceType = ContactSource.Type.SOURCE_TYPE_EXTENDED; + } } else if (mCachedNumberLookupService != null) { CachedContactInfo cacheInfo = mCachedNumberLookupService.lookupCachedContactFromNumber(mContext, number); if (cacheInfo != null) { - info = cacheInfo.getContactInfo().isBadData ? null : cacheInfo.getContactInfo(); - } else { - info = null; + if (!cacheInfo.getContactInfo().isBadData) { + info = cacheInfo.getContactInfo(); + } else { + LogUtil.i("ContactInfoHelper.queryContactInfoForPhoneNumber", "info is bad data"); + } } } return info; @@ -601,13 +622,17 @@ public class ContactInfoHelper { * will be updated if available. */ @WorkerThread - public void updateFromCequintCallerId(ContactInfo info, String number) { + public void updateFromCequintCallerId( + @Nullable CequintCallerIdManager cequintCallerIdManager, ContactInfo info, String number) { Assert.isWorkerThread(); if (!CequintCallerIdManager.isCequintCallerIdEnabled(mContext)) { return; } + if (cequintCallerIdManager == null) { + return; + } CequintCallerIdContact cequintCallerIdContact = - CequintCallerIdManager.getCequintCallerIdContact(mContext, number); + cequintCallerIdManager.getCequintCallerIdContact(mContext, number); if (cequintCallerIdContact == null) { return; } diff --git a/java/com/android/dialer/phonenumberproto/Converter.java b/java/com/android/dialer/phonenumberproto/Converter.java new file mode 100644 index 000000000..453b98844 --- /dev/null +++ b/java/com/android/dialer/phonenumberproto/Converter.java @@ -0,0 +1,120 @@ +/* + * 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.phonenumberproto; + +import com.android.dialer.DialerInternalPhoneNumber; +import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber; + +/** + * Methods for converting from {@link PhoneNumber} POJOs to {@link DialerInternalPhoneNumber} protos + * and back. + */ +class Converter { + + static DialerInternalPhoneNumber pojoToProto(PhoneNumber pojo) { + DialerInternalPhoneNumber.Builder proto = DialerInternalPhoneNumber.newBuilder(); + if (pojo.hasCountryCode()) { + proto.setCountryCode(pojo.getCountryCode()); + } + if (pojo.hasCountryCodeSource()) { + switch (pojo.getCountryCodeSource()) { + case FROM_NUMBER_WITH_PLUS_SIGN: + proto.setCountryCodeSource( + DialerInternalPhoneNumber.CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN); + break; + case FROM_NUMBER_WITH_IDD: + proto.setCountryCodeSource( + DialerInternalPhoneNumber.CountryCodeSource.FROM_NUMBER_WITH_IDD); + break; + case FROM_NUMBER_WITHOUT_PLUS_SIGN: + proto.setCountryCodeSource( + DialerInternalPhoneNumber.CountryCodeSource.FROM_NUMBER_WITHOUT_PLUS_SIGN); + break; + case FROM_DEFAULT_COUNTRY: + proto.setCountryCodeSource( + DialerInternalPhoneNumber.CountryCodeSource.FROM_DEFAULT_COUNTRY); + break; + default: + throw new IllegalArgumentException( + "unsupported country code source: " + pojo.getCountryCodeSource()); + } + } + if (pojo.hasExtension()) { + proto.setExtension(pojo.getExtension()); + } + if (pojo.hasItalianLeadingZero()) { + proto.setItalianLeadingZero(pojo.isItalianLeadingZero()); + } + if (pojo.hasNationalNumber()) { + proto.setNationalNumber(pojo.getNationalNumber()); + } + if (pojo.hasNumberOfLeadingZeros()) { + proto.setNumberOfLeadingZeros(pojo.getNumberOfLeadingZeros()); + } + if (pojo.hasPreferredDomesticCarrierCode()) { + proto.setPreferredDomesticCarrierCode(pojo.getPreferredDomesticCarrierCode()); + } + if (pojo.hasRawInput()) { + proto.setRawInput(pojo.getRawInput()); + } + return proto.build(); + } + + static PhoneNumber protoToPojo(DialerInternalPhoneNumber proto) { + PhoneNumber pojo = new PhoneNumber(); + if (proto.hasCountryCode()) { + pojo.setCountryCode(proto.getCountryCode()); + } + if (proto.hasCountryCodeSource()) { + switch (proto.getCountryCodeSource()) { + case FROM_NUMBER_WITH_PLUS_SIGN: + pojo.setCountryCodeSource(PhoneNumber.CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN); + break; + case FROM_NUMBER_WITH_IDD: + pojo.setCountryCodeSource(PhoneNumber.CountryCodeSource.FROM_NUMBER_WITH_IDD); + break; + case FROM_NUMBER_WITHOUT_PLUS_SIGN: + pojo.setCountryCodeSource(PhoneNumber.CountryCodeSource.FROM_NUMBER_WITHOUT_PLUS_SIGN); + break; + case FROM_DEFAULT_COUNTRY: + pojo.setCountryCodeSource(PhoneNumber.CountryCodeSource.FROM_DEFAULT_COUNTRY); + break; + default: + throw new IllegalArgumentException( + "unsupported country code source: " + proto.getCountryCodeSource()); + } + } + if (proto.hasExtension()) { + pojo.setExtension(proto.getExtension()); + } + if (proto.hasItalianLeadingZero()) { + pojo.setItalianLeadingZero(proto.getItalianLeadingZero()); + } + if (proto.hasNationalNumber()) { + pojo.setNationalNumber(proto.getNationalNumber()); + } + if (proto.hasNumberOfLeadingZeros()) { + pojo.setNumberOfLeadingZeros(proto.getNumberOfLeadingZeros()); + } + if (proto.hasPreferredDomesticCarrierCode()) { + pojo.setPreferredDomesticCarrierCode(proto.getPreferredDomesticCarrierCode()); + } + if (proto.hasRawInput()) { + pojo.setRawInput(proto.getRawInput()); + } + return pojo; + } +} diff --git a/java/com/android/dialer/phonenumberproto/DialerPhoneNumberUtil.java b/java/com/android/dialer/phonenumberproto/DialerPhoneNumberUtil.java new file mode 100644 index 000000000..cc509f41b --- /dev/null +++ b/java/com/android/dialer/phonenumberproto/DialerPhoneNumberUtil.java @@ -0,0 +1,108 @@ +/* + * 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.phonenumberproto; + +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.annotation.WorkerThread; +import com.android.dialer.DialerInternalPhoneNumber; +import com.android.dialer.DialerPhoneNumber; +import com.android.dialer.DialerPhoneNumber.RawInput; +import com.android.dialer.common.Assert; +import com.android.dialer.common.LogUtil; +import com.google.i18n.phonenumbers.NumberParseException; +import com.google.i18n.phonenumbers.PhoneNumberUtil; +import com.google.i18n.phonenumbers.PhoneNumberUtil.MatchType; + +/** + * Wrapper for selected methods in {@link PhoneNumberUtil} which uses the {@link DialerPhoneNumber} + * lite proto instead of the {@link com.google.i18n.phonenumbers.Phonenumber.PhoneNumber} POJO. + * + *

      All methods should be called on a worker thread. + */ +public class DialerPhoneNumberUtil { + private final PhoneNumberUtil phoneNumberUtil; + + @WorkerThread + public DialerPhoneNumberUtil(@NonNull PhoneNumberUtil phoneNumberUtil) { + Assert.isWorkerThread(); + this.phoneNumberUtil = Assert.isNotNull(phoneNumberUtil); + } + + /** + * Parses the provided raw phone number into a {@link DialerPhoneNumber}. + * + * @see PhoneNumberUtil#parse(String, String) + */ + @WorkerThread + public DialerPhoneNumber parse(@Nullable String numberToParse, @Nullable String defaultRegion) { + Assert.isWorkerThread(); + + DialerPhoneNumber.Builder dialerPhoneNumber = DialerPhoneNumber.newBuilder(); + RawInput.Builder rawInput = RawInput.newBuilder(); + // Numbers can be null or empty for incoming "unknown" calls. + if (numberToParse != null) { + rawInput.setNumber(numberToParse); + } + if (defaultRegion != null) { + rawInput.setCountryIso(defaultRegion); + } + dialerPhoneNumber.setRawInput(rawInput.build()); + + try { + dialerPhoneNumber.setDialerInternalPhoneNumber( + Converter.pojoToProto(phoneNumberUtil.parse(numberToParse, defaultRegion))); + } catch (NumberParseException e) { + LogUtil.w("DialerPhoneNumberUtil.parse", "couldn't parse phone number", e); + } + return dialerPhoneNumber.build(); + } + + /** + * Returns true if the two numbers were parseable by libphonenumber and are an {@link + * MatchType#EXACT_MATCH} or if they have the same raw input. + */ + @WorkerThread + public boolean isExactMatch( + @NonNull DialerPhoneNumber firstNumberIn, @NonNull DialerPhoneNumber secondNumberIn) { + Assert.isWorkerThread(); + if (!Assert.isNotNull(firstNumberIn).hasDialerInternalPhoneNumber() + || !Assert.isNotNull(secondNumberIn).hasDialerInternalPhoneNumber()) { + return firstNumberIn.getRawInput().equals(secondNumberIn.getRawInput()); + } + return isNumberMatch( + firstNumberIn.getDialerInternalPhoneNumber(), + secondNumberIn.getDialerInternalPhoneNumber()) + == MatchType.EXACT_MATCH; + } + + /** + * Compares the provided phone numbers. + * + * @see PhoneNumberUtil#isNumberMatch(com.google.i18n.phonenumbers.Phonenumber.PhoneNumber, + * com.google.i18n.phonenumbers.Phonenumber.PhoneNumber) + */ + @WorkerThread + private MatchType isNumberMatch( + @NonNull DialerInternalPhoneNumber firstNumberIn, + @NonNull DialerInternalPhoneNumber secondNumberIn) { + Assert.isWorkerThread(); + return phoneNumberUtil.isNumberMatch( + Converter.protoToPojo(Assert.isNotNull(firstNumberIn)), + Converter.protoToPojo(Assert.isNotNull(secondNumberIn))); + } +} diff --git a/java/com/android/dialer/phonenumberproto/dialer_phone_number.proto b/java/com/android/dialer/phonenumberproto/dialer_phone_number.proto new file mode 100644 index 000000000..a0f362631 --- /dev/null +++ b/java/com/android/dialer/phonenumberproto/dialer_phone_number.proto @@ -0,0 +1,172 @@ +// 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 + +syntax = "proto2"; + +option java_package = "com.android.dialer"; +option java_multiple_files = true; +option optimize_for = LITE_RUNTIME; + +package com.android.dialer; + +// A phone number for use in the dialer application. It consists of a +// DialerInternalPhoneNumber, which is a copy of libphonenumber's PhoneNumber +// proto, and the raw input used to create it. +message DialerPhoneNumber { + // libphonenumber representation of the phone number. May be empty if the raw + // input failed to parse, in which case raw_input should be used. + optional DialerInternalPhoneNumber dialer_internal_phone_number = 1; + + // The raw input which was used to create a DialerPhoneNumber. + message RawInput { + // The phone number as it was entered or received. + optional string number = 1; + // The ISO 3166-1 two letter country code of the country where the user made + // or received the call. + optional string country_iso = 2; + } + // Prefer to use dialer_internal_phone_number if present. + optional RawInput raw_input = 2; +} + +// This is a copy of libphonenumber proto file for use in the dialer codebase. +// We cannot depend on the real libphonenumber proto because it is not exposed +// in any open source library. As such, this file could fall out of sync with +// that proto over time. +// +// The only difference between this proto and the libphonenumber proto (as of +// when this file was created) is the package name and proto name. +// +// If the libphonenumber proto becomes accessible some day, it may be possible +// to remove this proto and use the real libphonenumber proto assuming this +// proto is kept wire-compatible with it. +message DialerInternalPhoneNumber { + // The country calling code for this number, as defined by the International + // Telecommunication Union (ITU). For example, this would be 1 for NANPA + // countries, and 33 for France. + required int32 country_code = 1; + + // The National (significant) Number, as defined in International + // Telecommunication Union (ITU) Recommendation E.164, without any leading + // zero. The leading-zero is stored separately if required, since this is an + // uint64 and hence cannot store such information. Do not use this field + // directly: if you want the national significant number, call the + // getNationalSignificantNumber method of PhoneNumberUtil. + // + // For countries which have the concept of an "area code" or "national + // destination code", this is included in the National (significant) Number. + // Although the ITU says the maximum length should be 15, we have found longer + // numbers in some countries e.g. Germany. + // Note that the National (significant) Number does not contain the National + // (trunk) prefix. Obviously, as a uint64, it will never contain any + // formatting (hyphens, spaces, parentheses), nor any alphanumeric spellings. + required uint64 national_number = 2 [jstype = JS_NUMBER]; + + // Extension is not standardized in ITU recommendations, except for being + // defined as a series of numbers with a maximum length of 40 digits. It is + // defined as a string here to accommodate for the possible use of a leading + // zero in the extension (organizations have complete freedom to do so, as + // there is no standard defined). Other than digits, some other dialling + // characters such as "," (indicating a wait) may be stored here. + optional string extension = 3; + + // In some countries, the national (significant) number starts with one or + // more "0"s without this being a national prefix or trunk code of some kind. + // For example, the leading zero in the national (significant) number of an + // Italian phone number indicates the number is a fixed-line number. There + // have been plans to migrate fixed-line numbers to start with the digit two + // since December 2000, but it has not happened yet. See + // http://en.wikipedia.org/wiki/%2B39 for more details. + // + // These fields can be safely ignored (there is no need to set them) for most + // countries. Some limited number of countries behave like Italy - for these + // cases, if the leading zero(s) of a number would be retained even when + // dialling internationally, set this flag to true, and also set the number of + // leading zeros. + // + // Clients who use the parsing or conversion functionality of the i18n phone + // number libraries (go/phonenumbers) will have these fields set if necessary + // automatically. + optional bool italian_leading_zero = 4; + optional int32 number_of_leading_zeros = 8 [default = 1]; + + // The next few fields are non-essential fields for a phone number. They + // retain extra information about the form the phone number was in when it was + // provided to us to parse. They can be safely ignored by most clients. To + // populate them, call parseAndKeepRawInput on PhoneNumberUtil. + + // This field is used to store the raw input string containing phone numbers + // before it was canonicalized by the library. For example, it could be used + // to store alphanumerical numbers such as "1-800-GOOG-411". + optional string raw_input = 5; + + // The source from which the country_code is derived. This is not set in the + // general parsing method, but in the method that parses and keeps raw_input. + // New fields could be added upon request. + enum CountryCodeSource { + // The country_code is derived based on a phone number with a leading "+", + // e.g. the French number "+33 1 42 68 53 00". + FROM_NUMBER_WITH_PLUS_SIGN = 1; + + // The country_code is derived based on a phone number with a leading IDD, + // e.g. the French number "011 33 1 42 68 53 00", as it is dialled from US. + FROM_NUMBER_WITH_IDD = 5; + + // The country_code is derived based on a phone number without a leading + // "+", e.g. the French number "33 1 42 68 53 00" when defaultCountry is + // supplied as France. + FROM_NUMBER_WITHOUT_PLUS_SIGN = 10; + + // The country_code is derived NOT based on the phone number itself, but + // from the defaultCountry parameter provided in the parsing function by the + // clients. This happens mostly for numbers written in the national format + // (without country code). For example, this would be set when parsing the + // French number "01 42 68 53 00", when defaultCountry is supplied as + // France. + FROM_DEFAULT_COUNTRY = 20; + } + + // The source from which the country_code is derived. + optional CountryCodeSource country_code_source = 6; + + // The carrier selection code that is preferred when calling this phone number + // domestically. This also includes codes that need to be dialed in some + // countries when calling from landlines to mobiles or vice versa. For + // example, in Columbia, a "3" needs to be dialed before the phone number + // itself when calling from a mobile phone to a domestic landline phone and + // vice versa. + // + // Note this is the "preferred" code, which means other codes may work as + // well. + optional string preferred_domestic_carrier_code = 7; +} + +// Examples: +// +// Google MTV, +1 650-253-0000, (650) 253-0000 +// country_code: 1 +// national_number: 6502530000 +// +// Google Paris, +33 (0)1 42 68 53 00, 01 42 68 53 00 +// country_code: 33 +// national_number: 142685300 +// +// Google Beijing, +86-10-62503000, (010) 62503000 +// country_code: 86 +// national_number: 1062503000 +// +// Google Italy, +39 02-36618 300, 02-36618 300 +// country_code: 39 +// national_number: 236618300 +// italian_leading_zero: true \ No newline at end of file diff --git a/java/com/android/dialer/postcall/AndroidManifest.xml b/java/com/android/dialer/postcall/AndroidManifest.xml index 79ca5d5eb..22c77dd93 100644 --- a/java/com/android/dialer/postcall/AndroidManifest.xml +++ b/java/com/android/dialer/postcall/AndroidManifest.xml @@ -21,7 +21,7 @@ diff --git a/java/com/android/dialer/postcall/PostCall.java b/java/com/android/dialer/postcall/PostCall.java index 586b47395..b17a9b66d 100644 --- a/java/com/android/dialer/postcall/PostCall.java +++ b/java/com/android/dialer/postcall/PostCall.java @@ -26,24 +26,23 @@ import android.support.design.widget.Snackbar; import android.telephony.TelephonyManager; import android.view.View; import android.view.View.OnClickListener; -import com.android.dialer.buildtype.BuildType; -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.configprovider.ConfigProvider; +import com.android.dialer.configprovider.ConfigProviderBindings; import com.android.dialer.enrichedcall.EnrichedCallCapabilities; import com.android.dialer.enrichedcall.EnrichedCallComponent; import com.android.dialer.enrichedcall.EnrichedCallManager; import com.android.dialer.logging.DialerImpression; import com.android.dialer.logging.Logger; +import com.android.dialer.performancereport.PerformanceReport; import com.android.dialer.util.DialerUtils; import com.android.dialer.util.IntentUtil; /** Helper class to handle all post call actions. */ public class PostCall { - private static final String KEY_POST_CALL_CALL_CONNECT_TIME = "post_call_call_connect_time"; private static final String KEY_POST_CALL_CALL_DISCONNECT_TIME = "post_call_call_disconnect_time"; + private static final String KEY_POST_CALL_CALL_CONNECT_TIME = "post_call_call_connect_time"; private static final String KEY_POST_CALL_CALL_NUMBER = "post_call_call_number"; private static final String KEY_POST_CALL_MESSAGE_SENT = "post_call_message_sent"; @@ -55,6 +54,8 @@ public class PostCall { promptUserToViewSentMessage(activity, rootView); } else if (shouldPromptUserToSendMessage(activity)) { promptUserToSendMessage(activity, rootView); + } else { + clear(activity); } } } @@ -160,6 +161,19 @@ public class PostCall { .apply(); } + /** + * Restart performance recording if there is a recent call (disconnect time to now is under + * threshold) + */ + public static void restartPerformanceRecordingIfARecentCallExist(Context context) { + long disconnectTimeMillis = + DialerUtils.getDefaultSharedPreferenceForDeviceProtectedStorageContext(context) + .getLong(PostCall.KEY_POST_CALL_CALL_DISCONNECT_TIME, -1); + if (disconnectTimeMillis != -1 && PerformanceReport.isRecording()) { + PerformanceReport.startRecording(); + } + } + private static void clear(Context context) { activeSnackbar = null; @@ -203,19 +217,7 @@ public class PostCall { } private static boolean isEnabled(Context context) { - @BuildType.Type int type = BuildType.get(); - switch (type) { - case BuildType.BUGFOOD: - case BuildType.DOGFOOD: - case BuildType.FISHFOOD: - case BuildType.TEST: - return ConfigProviderBindings.get(context).getBoolean("enable_post_call", true); - case BuildType.RELEASE: - return ConfigProviderBindings.get(context).getBoolean("enable_post_call_prod", true); - default: - Assert.fail(); - return false; - } + return ConfigProviderBindings.get(context).getBoolean("enable_post_call_prod", true); } private static boolean isSimReady(Context context) { diff --git a/java/com/android/dialer/protos/ProtoParsers.java b/java/com/android/dialer/protos/ProtoParsers.java index b77c0699b..5a60799bc 100644 --- a/java/com/android/dialer/protos/ProtoParsers.java +++ b/java/com/android/dialer/protos/ProtoParsers.java @@ -18,13 +18,10 @@ package com.android.dialer.protos; import android.content.Intent; import android.os.Bundle; -import android.os.Parcel; -import android.os.Parcelable; +import android.support.annotation.NonNull; import com.android.dialer.common.Assert; -import com.google.protobuf.CodedOutputStream; import com.google.protobuf.InvalidProtocolBufferException; import com.google.protobuf.MessageLite; -import java.io.IOException; /** Useful methods for using Protocol Buffers with Android. */ public final class ProtoParsers { @@ -35,11 +32,8 @@ public final class ProtoParsers { @SuppressWarnings("unchecked") // We want to eventually optimize away parser classes, so cast public static T get(Bundle bundle, String key, T defaultInstance) throws InvalidProtocolBufferException { - // Class loaders are unique to each Class instance, so we need to specify how to decode - // the information again, even though we set the class loaders when serializing the data. - bundle.setClassLoader(ProtoParsers.class.getClassLoader()); - InternalDontUse parcelable = bundle.getParcelable(key); - return (T) parcelable.getMessageUnsafe(defaultInstance.getDefaultInstanceForType()); + byte[] bytes = bundle.getByteArray(key); + return (T) mergeFrom(bytes, defaultInstance.getDefaultInstanceForType()); } /** @@ -51,7 +45,7 @@ public final class ProtoParsers { try { return get(bundle, key, defaultInstance); } catch (InvalidProtocolBufferException e) { - throw new RuntimeException(e); + throw Assert.createIllegalStateFailException(e.toString()); } } @@ -68,121 +62,28 @@ public final class ProtoParsers { * Stores a proto in a Bundle, for later retrieval by {@link #get(Bundle, String, MessageLite)} or * {@link #getFromInstanceState(Bundle, String, MessageLite)}. */ - public static void put(Bundle bundle, String key, MessageLite message) { - bundle.putParcelable(key, new InternalDontUse<>(null, message)); + public static void put( + @NonNull Bundle bundle, @NonNull String key, @NonNull MessageLite message) { + Assert.checkState(message != null); + bundle.putByteArray(key, message.toByteArray()); } /** * Stores a proto in an Intent, for later retrieval by {@link #get(Bundle, String, MessageLite)}. * Needs separate method because Intent has similar to but different API than Bundle. */ - public static void put(Intent intent, String key, MessageLite message) { - intent.putExtra(key, new InternalDontUse<>(null, message)); - } - - /** Returns a {@linkplain Parcelable} representation of this protobuf message. */ - public static ParcelableProto asParcelable(T message) { - return new InternalDontUse<>(null, message); - } - - /** - * A protobuf message that can be stored in a {@link Parcel}. - * - *

      Note: This Parcelable can only be used in single app. Attempting to send - * it to another app through an Intent will result in an exception due to Proguard - * obfusation when the target application attempts to load the ParcelableProto class. - */ - public interface ParcelableProto 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 implements ParcelableProto { - /* 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> CREATOR = - new Creator>() { - @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, "Must have a message or bytes"); - 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(CodedOutputStream.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 (InvalidProtocolBufferException e) { - throw new IllegalStateException(e); - } - } - - @SuppressWarnings("unchecked") // We're being deserialized, so there's no real type safety - T getMessageUnsafe(T defaultInstance) throws InvalidProtocolBufferException { - // 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 = (T) defaultInstance.toBuilder().mergeFrom(bytes).build(); - } - return message; - } + public static void put(@NonNull Intent intent, @NonNull String key, MessageLite message) { + Assert.checkState(message != null); + intent.putExtra(key, message.toByteArray()); } /** Parses a proto, throwing parser errors as runtime exceptions. */ @SuppressWarnings("unchecked") // We want to eventually optimize away parser classes - public static T mergeFrom(byte[] bytes, T defaultInstance) { + private static T mergeFrom(byte[] bytes, T defaultInstance) { try { return (T) defaultInstance.toBuilder().mergeFrom(bytes).build(); } catch (InvalidProtocolBufferException e) { - throw new RuntimeException(e); + throw Assert.createIllegalStateFailException(e.toString()); } } } diff --git a/java/com/android/dialer/searchfragment/README.md b/java/com/android/dialer/searchfragment/README.md new file mode 100644 index 000000000..b3b9135e5 --- /dev/null +++ b/java/com/android/dialer/searchfragment/README.md @@ -0,0 +1,62 @@ +# Dialer Search Ui + +searchfragment/ contains all code relevant to loading, rendering and filtering +search results in both dialpad search and regular search. + +## Loading + +### On Device Contacts + +On device contacts loading happens in SearchContactsCursorLoader. It is used in +conjunction with NewSearchFragment and Loader Callbacks to return a cursor from +cp2 containing all of the relevant info needed to rendering. + +### Business Search + +// TODO(calderwoodra) + +### Google Directory Search + +// TODO(calderwoodra) + +## Rendering + +NewSearchFragment, SearchAdapter, SearchContactViewHolder and +SearchCursorManager are used to render contact information. The fragment's +recyclerview, adapter and viewholder work as expected like a normal recyclerview +paradigm. + +The are three things to note about rendering: + +* There are three data sources rendered: On device contacts, business search + results and google directory results. +* SearchContactsCursorLoader returns its cursor from cp2 and we filter/wrap it + with SearchContactCursor to render useful results (see below). +* SearchCursorManager is used to coalesce all three data sources to help with + determining row count, row type and returning the correct data source for + each position. + +## Filtering + +On device contacts are filtered using SearchContactCursor. We wrap the cursor +returned from SearchContactsCursorLoader in NewSearchFragment#onLoadFinished in +order to abstract away the filtering logic from the recyclerview adapter and +viewholders. + +SearchContactCursor applies filtering in SearchContactCursor#filter to remove +duplicate phone numbers returned from cp2 and phone numbers that do not match +the given search query. + +Filtering methods used are: + +* T9/dialpad search methods + * Initial match (957 matches [W]illiam [J]ohn [S]mith) + * Number + name match (1800946 matches [1800-Win]-A-Prize) +* Numeric/dialpad search methods + * Simple number match (510333 matches [510-333]-7596) + * Country-code agnostic matching for E164 normalized numbers (9177 matches + +65[9177]6930) + * Country-code agnostic matching (510333 matches 1-[510-333]-7596) + * Area-code agnostic matching (333 matches 510-[333]-7596) +* Name/keyboard search methods: + * Simple name match (564 matches [Joh]n) diff --git a/java/com/android/dialer/searchfragment/common/AndroidManifest.xml b/java/com/android/dialer/searchfragment/common/AndroidManifest.xml new file mode 100644 index 000000000..178cd83c3 --- /dev/null +++ b/java/com/android/dialer/searchfragment/common/AndroidManifest.xml @@ -0,0 +1,16 @@ + + \ No newline at end of file diff --git a/java/com/android/dialer/searchfragment/common/Projections.java b/java/com/android/dialer/searchfragment/common/Projections.java new file mode 100644 index 000000000..37e20d195 --- /dev/null +++ b/java/com/android/dialer/searchfragment/common/Projections.java @@ -0,0 +1,50 @@ +/* + * 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.searchfragment.common; + +import android.provider.ContactsContract.CommonDataKinds.Phone; + +/** Class containing relevant projections for searching contacts. */ +public class Projections { + + public static final int PHONE_ID = 0; + public static final int PHONE_TYPE = 1; + public static final int PHONE_LABEL = 2; + public static final int PHONE_NUMBER = 3; + public static final int PHONE_DISPLAY_NAME = 4; + public static final int PHONE_PHOTO_ID = 5; + public static final int PHONE_PHOTO_URI = 6; + public static final int PHONE_LOOKUP_KEY = 7; + public static final int PHONE_CARRIER_PRESENCE = 8; + + @SuppressWarnings("unused") + public static final int PHONE_SORT_KEY = 9; + + public static final String[] PHONE_PROJECTION = + new String[] { + Phone._ID, // 0 + Phone.TYPE, // 1 + Phone.LABEL, // 2 + Phone.NUMBER, // 3 + Phone.DISPLAY_NAME_PRIMARY, // 4 + Phone.PHOTO_ID, // 5 + Phone.PHOTO_THUMBNAIL_URI, // 6 + Phone.LOOKUP_KEY, // 7 + Phone.CARRIER_PRESENCE, // 8 + Phone.SORT_KEY_PRIMARY // 9 + }; +} diff --git a/java/com/android/dialer/searchfragment/common/QueryBoldingUtil.java b/java/com/android/dialer/searchfragment/common/QueryBoldingUtil.java new file mode 100644 index 000000000..7bdd69567 --- /dev/null +++ b/java/com/android/dialer/searchfragment/common/QueryBoldingUtil.java @@ -0,0 +1,154 @@ +/* + * 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.searchfragment.common; + +import android.graphics.Typeface; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.text.SpannableString; +import android.text.Spanned; +import android.text.TextUtils; +import android.text.style.StyleSpan; + +/** Utility class for handling bolding queries contained in string. */ +public class QueryBoldingUtil { + + /** + * Compares a name and query and returns a {@link CharSequence} with bolded characters. + * + *

      Some example: + * + *

        + *
      • "query" would bold "John [query] Smith" + *
      • "222" would bold "[AAA] Mom" + *
      • "222" would bold "[A]llen [A]lex [A]aron" + *
      + * + * @param query containing any characters + * @param name of a contact/string that query will compare to + * @return name with query bolded if query can be found in the name. + */ + public static CharSequence getNameWithQueryBolded(@Nullable String query, @NonNull String name) { + if (TextUtils.isEmpty(query)) { + return name; + } + + int index = -1; + int numberOfBoldedCharacters = 0; + + if (QueryFilteringUtil.nameMatchesT9Query(query, name)) { + // Bold the characters that match the t9 query + String t9 = QueryFilteringUtil.getT9Representation(name); + index = QueryFilteringUtil.indexOfQueryNonDigitsIgnored(query, t9); + if (index == -1) { + return getNameWithInitialsBolded(query, name); + } + numberOfBoldedCharacters = query.length(); + + for (int i = 0; i < query.length(); i++) { + char c = query.charAt(i); + if (!Character.isDigit(c)) { + numberOfBoldedCharacters--; + } + } + + for (int i = 0; i < index + numberOfBoldedCharacters; i++) { + if (!Character.isLetterOrDigit(name.charAt(i))) { + if (i < index) { + index++; + } else { + numberOfBoldedCharacters++; + } + } + } + } + + if (index == -1) { + // Bold the query as an exact match in the name + index = name.toLowerCase().indexOf(query); + numberOfBoldedCharacters = query.length(); + } + + return index == -1 ? name : getBoldedString(name, index, numberOfBoldedCharacters); + } + + private static CharSequence getNameWithInitialsBolded(String query, String name) { + SpannableString boldedInitials = new SpannableString(name); + name = name.toLowerCase(); + int initialsBolded = 0; + int nameIndex = -1; + + while (++nameIndex < name.length() && initialsBolded < query.length()) { + if ((nameIndex == 0 || name.charAt(nameIndex - 1) == ' ') + && QueryFilteringUtil.getDigit(name.charAt(nameIndex)) == query.charAt(initialsBolded)) { + boldedInitials.setSpan( + new StyleSpan(Typeface.BOLD), + nameIndex, + nameIndex + 1, + Spanned.SPAN_INCLUSIVE_INCLUSIVE); + initialsBolded++; + } + } + return boldedInitials; + } + + /** + * Compares a number and a query and returns a {@link CharSequence} with bolded characters. + * + *
        + *
      • "123" would bold "(650)34[1-23]24" + *
      • "123" would bold "+1([123])111-2222 + *
      + * + * @param query containing only numbers and phone number related characters "(", ")", "-", "+" + * @param number phone number of a contact that the query will compare to. + * @return number with query bolded if query can be found in the number. + */ + public static CharSequence getNumberWithQueryBolded( + @Nullable String query, @NonNull String number) { + if (TextUtils.isEmpty(query) || !QueryFilteringUtil.numberMatchesNumberQuery(query, number)) { + return number; + } + + int index = QueryFilteringUtil.indexOfQueryNonDigitsIgnored(query, number); + int boldedCharacters = query.length(); + + for (char c : query.toCharArray()) { + if (!Character.isDigit(c)) { + boldedCharacters--; + } + } + + for (int i = 0; i < index + boldedCharacters; i++) { + if (!Character.isDigit(number.charAt(i))) { + if (i <= index) { + index++; + } else { + boldedCharacters++; + } + } + } + return getBoldedString(number, index, boldedCharacters); + } + + private static SpannableString getBoldedString(String s, int index, int numBolded) { + SpannableString span = new SpannableString(s); + span.setSpan( + new StyleSpan(Typeface.BOLD), index, index + numBolded, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); + return span; + } +} diff --git a/java/com/android/dialer/searchfragment/common/QueryFilteringUtil.java b/java/com/android/dialer/searchfragment/common/QueryFilteringUtil.java new file mode 100644 index 000000000..b23315b15 --- /dev/null +++ b/java/com/android/dialer/searchfragment/common/QueryFilteringUtil.java @@ -0,0 +1,141 @@ +/* + * 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.searchfragment.common; + +import android.support.annotation.NonNull; +import android.telephony.PhoneNumberUtils; +import android.text.TextUtils; +import java.util.regex.Pattern; + +/** Utility class for filtering, comparing and handling strings and queries. */ +public class QueryFilteringUtil { + + /** Matches strings with "-", "(", ")", 2-9 of at least length one. */ + static final Pattern T9_PATTERN = Pattern.compile("[\\-()2-9]+"); + + /** + * @return true if the query is of T9 format and the name's T9 representation belongs to the + * query; false otherwise. + */ + public static boolean nameMatchesT9Query(String query, String name) { + if (!T9_PATTERN.matcher(query).matches()) { + return false; + } + + // Substring + if (indexOfQueryNonDigitsIgnored(query, getT9Representation(name)) != -1) { + return true; + } + + // Check matches initials + // TODO investigate faster implementation + query = digitsOnly(query); + int queryIndex = 0; + + String[] names = name.toLowerCase().split("\\s"); + for (int i = 0; i < names.length && queryIndex < query.length(); i++) { + if (TextUtils.isEmpty(names[i])) { + continue; + } + + if (getDigit(names[i].charAt(0)) == query.charAt(queryIndex)) { + queryIndex++; + } + } + + return queryIndex == query.length(); + } + + /** @return true if the number belongs to the query. */ + public static boolean numberMatchesNumberQuery(String query, String number) { + return PhoneNumberUtils.isGlobalPhoneNumber(query) + && indexOfQueryNonDigitsIgnored(query, number) != -1; + } + + /** + * Checks if query is contained in number while ignoring all characters in both that are not + * digits (i.e. {@link Character#isDigit(char)} returns false). + * + * @return index where query is found with all non-digits removed, -1 if it's not found. + */ + static int indexOfQueryNonDigitsIgnored(@NonNull String query, @NonNull String number) { + return digitsOnly(number).indexOf(digitsOnly(query)); + } + + // Returns string with letters replaced with their T9 representation. + static String getT9Representation(String s) { + StringBuilder builder = new StringBuilder(s.length()); + for (char c : s.toLowerCase().toCharArray()) { + builder.append(getDigit(c)); + } + return builder.toString(); + } + + /** @return String s with only digits recognized by Character#isDigit() remaining */ + public static String digitsOnly(String s) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + if (Character.isDigit(c)) { + sb.append(c); + } + } + return sb.toString(); + } + + // Returns the T9 representation of a lower case character, otherwise returns the character. + static char getDigit(char c) { + switch (c) { + case 'a': + case 'b': + case 'c': + return '2'; + case 'd': + case 'e': + case 'f': + return '3'; + case 'g': + case 'h': + case 'i': + return '4'; + case 'j': + case 'k': + case 'l': + return '5'; + case 'm': + case 'n': + case 'o': + return '6'; + case 'p': + case 'q': + case 'r': + case 's': + return '7'; + case 't': + case 'u': + case 'v': + return '8'; + case 'w': + case 'x': + case 'y': + case 'z': + return '9'; + default: + return c; + } + } +} diff --git a/java/com/android/dialer/searchfragment/common/res/layout/search_contact_row.xml b/java/com/android/dialer/searchfragment/common/res/layout/search_contact_row.xml new file mode 100644 index 000000000..dd871af70 --- /dev/null +++ b/java/com/android/dialer/searchfragment/common/res/layout/search_contact_row.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/java/com/android/dialer/searchfragment/common/res/values/dimens.xml b/java/com/android/dialer/searchfragment/common/res/values/dimens.xml new file mode 100644 index 000000000..d5459ddb3 --- /dev/null +++ b/java/com/android/dialer/searchfragment/common/res/values/dimens.xml @@ -0,0 +1,23 @@ + + + + 56dp + 8dp + 8dp + 16dp + 16sp + \ No newline at end of file diff --git a/java/com/android/dialer/searchfragment/cp2/SearchContactCursor.java b/java/com/android/dialer/searchfragment/cp2/SearchContactCursor.java new file mode 100644 index 000000000..a2ef58c3c --- /dev/null +++ b/java/com/android/dialer/searchfragment/cp2/SearchContactCursor.java @@ -0,0 +1,392 @@ +/* + * 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.searchfragment.cp2; + +import android.content.ContentResolver; +import android.database.CharArrayBuffer; +import android.database.ContentObserver; +import android.database.Cursor; +import android.database.DataSetObserver; +import android.net.Uri; +import android.os.Bundle; +import android.support.annotation.IntDef; +import android.support.annotation.Nullable; +import android.text.TextUtils; +import com.android.dialer.searchfragment.common.Projections; +import com.android.dialer.searchfragment.common.QueryFilteringUtil; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.util.ArrayList; +import java.util.List; + +/** + * Wrapper for a cursor returned by {@link SearchContactsCursorLoader}. + * + *

      This cursor removes duplicate phone numbers associated with the same contact and can filter + * contacts based on a query by calling {@link #filter(String)}. + */ +public final class SearchContactCursor implements Cursor { + + private final Cursor cursor; + // List of cursor ids that are valid for displaying after filtering. + private final List queryFilteredPositions = new ArrayList<>(); + + private int currentPosition = 0; + + @Retention(RetentionPolicy.SOURCE) + @IntDef({ + Qualification.NUMBERS_ARE_NOT_DUPLICATES, + Qualification.NEW_NUMBER_IS_MORE_QUALIFIED, + Qualification.CURRENT_MORE_QUALIFIED + }) + private @interface Qualification { + /** Numbers are not duplicates (i.e. neither is more qualified than the other). */ + int NUMBERS_ARE_NOT_DUPLICATES = 0; + /** Number are duplicates and new number is more qualified than the existing number. */ + int NEW_NUMBER_IS_MORE_QUALIFIED = 1; + /** Numbers are duplicates but current/existing number is more qualified than new number. */ + int CURRENT_MORE_QUALIFIED = 2; + } + + /** + * @param cursor with projection {@link Projections#PHONE_PROJECTION}. + * @param query to filter cursor results. + */ + public SearchContactCursor(Cursor cursor, @Nullable String query) { + // TODO investigate copying this into a MatrixCursor and holding in memory + this.cursor = cursor; + filter(query); + } + + /** + * Filters out contacts that do not match the query. + * + *

      The query can have at least 1 of 3 forms: + * + *

        + *
      • A phone number + *
      • A T9 representation of a name (matches {@link QueryFilteringUtil#T9_PATTERN}). + *
      • A name + *
      + * + *

      A contact is considered a match if: + * + *

        + *
      • Its phone number contains the phone number query + *
      • Its name represented in T9 contains the T9 query + *
      • Its name contains the query + *
      + */ + public void filter(@Nullable String query) { + if (query == null) { + query = ""; + } + queryFilteredPositions.clear(); + + // On some devices, contacts have multiple rows with identical phone numbers. These numbers are + // considered duplicates. Since the order might not be guaranteed, we compare all of the numbers + // and hold onto the most qualified one as the one we want to display to the user. + // See #getQualification for details on how qualification is determined. + int previousMostQualifiedPosition = 0; + String previousName = ""; + String previousMostQualifiedNumber = ""; + + query = query.toLowerCase(); + cursor.moveToPosition(-1); + + while (cursor.moveToNext()) { + int position = cursor.getPosition(); + String currentNumber = cursor.getString(Projections.PHONE_NUMBER); + String currentName = cursor.getString(Projections.PHONE_DISPLAY_NAME); + + if (!previousName.equals(currentName)) { + previousName = currentName; + previousMostQualifiedNumber = currentNumber; + previousMostQualifiedPosition = position; + } else { + // Since the contact name is the same, check if this number is a duplicate + switch (getQualification(currentNumber, previousMostQualifiedNumber)) { + case Qualification.CURRENT_MORE_QUALIFIED: + // Number is a less qualified duplicate, ignore it. + continue; + case Qualification.NEW_NUMBER_IS_MORE_QUALIFIED: + // If number wasn't filtered out before, remove it and add it's more qualified version. + if (queryFilteredPositions.contains(previousMostQualifiedPosition)) { + queryFilteredPositions.remove(previousMostQualifiedPosition); + queryFilteredPositions.add(position); + } + previousMostQualifiedNumber = currentNumber; + previousMostQualifiedPosition = position; + continue; + case Qualification.NUMBERS_ARE_NOT_DUPLICATES: + default: + previousMostQualifiedNumber = currentNumber; + previousMostQualifiedPosition = position; + } + } + + if (TextUtils.isEmpty(query) + || QueryFilteringUtil.nameMatchesT9Query(query, previousName) + || QueryFilteringUtil.numberMatchesNumberQuery(query, previousMostQualifiedNumber) + || previousName.contains(query)) { + queryFilteredPositions.add(previousMostQualifiedPosition); + } + } + currentPosition = 0; + cursor.moveToFirst(); + } + + /** + * @param number that may or may not be more qualified than the existing most qualified number + * @param mostQualifiedNumber currently most qualified number associated with same contact + * @return {@link Qualification} where the more qualified number is the number with the most + * digits. If the digits are the same, the number with the most formatting is more qualified. + */ + private @Qualification int getQualification(String number, String mostQualifiedNumber) { + // Ignore formatting + String numberDigits = QueryFilteringUtil.digitsOnly(number); + String qualifiedNumberDigits = QueryFilteringUtil.digitsOnly(mostQualifiedNumber); + + // If the numbers are identical, return version with more formatting + if (qualifiedNumberDigits.equals(numberDigits)) { + if (mostQualifiedNumber.length() >= number.length()) { + return Qualification.CURRENT_MORE_QUALIFIED; + } else { + return Qualification.NEW_NUMBER_IS_MORE_QUALIFIED; + } + } + + // If one number is a suffix of another, then return the longer one. + // If they are equal, then return the current most qualified number. + if (qualifiedNumberDigits.endsWith(numberDigits)) { + return Qualification.CURRENT_MORE_QUALIFIED; + } + if (numberDigits.endsWith(qualifiedNumberDigits)) { + return Qualification.NEW_NUMBER_IS_MORE_QUALIFIED; + } + return Qualification.NUMBERS_ARE_NOT_DUPLICATES; + } + + @Override + public boolean moveToPosition(int position) { + currentPosition = position; + return currentPosition < getCount() + && cursor.moveToPosition(queryFilteredPositions.get(currentPosition)); + } + + @Override + public boolean move(int offset) { + currentPosition += offset; + return moveToPosition(currentPosition); + } + + @Override + public int getCount() { + return queryFilteredPositions.size(); + } + + @Override + public boolean isFirst() { + return currentPosition == 0; + } + + @Override + public boolean isLast() { + return currentPosition == getCount() - 1; + } + + @Override + public int getPosition() { + return currentPosition; + } + + @Override + public boolean moveToFirst() { + return moveToPosition(0); + } + + @Override + public boolean moveToLast() { + return moveToPosition(getCount() - 1); + } + + @Override + public boolean moveToNext() { + return moveToPosition(++currentPosition); + } + + @Override + public boolean moveToPrevious() { + return moveToPosition(--currentPosition); + } + + // Methods below simply call the corresponding method in cursor. + @Override + public boolean isBeforeFirst() { + return cursor.isBeforeFirst(); + } + + @Override + public boolean isAfterLast() { + return cursor.isAfterLast(); + } + + @Override + public int getColumnIndex(String columnName) { + return cursor.getColumnIndex(columnName); + } + + @Override + public int getColumnIndexOrThrow(String columnName) { + return cursor.getColumnIndexOrThrow(columnName); + } + + @Override + public String getColumnName(int columnIndex) { + return cursor.getColumnName(columnIndex); + } + + @Override + public String[] getColumnNames() { + return cursor.getColumnNames(); + } + + @Override + public int getColumnCount() { + return cursor.getColumnCount(); + } + + @Override + public byte[] getBlob(int columnIndex) { + return cursor.getBlob(columnIndex); + } + + @Override + public String getString(int columnIndex) { + return cursor.getString(columnIndex); + } + + @Override + public void copyStringToBuffer(int columnIndex, CharArrayBuffer buffer) { + cursor.copyStringToBuffer(columnIndex, buffer); + } + + @Override + public short getShort(int columnIndex) { + return cursor.getShort(columnIndex); + } + + @Override + public int getInt(int columnIndex) { + return cursor.getInt(columnIndex); + } + + @Override + public long getLong(int columnIndex) { + return cursor.getLong(columnIndex); + } + + @Override + public float getFloat(int columnIndex) { + return cursor.getFloat(columnIndex); + } + + @Override + public double getDouble(int columnIndex) { + return cursor.getDouble(columnIndex); + } + + @Override + public int getType(int columnIndex) { + return cursor.getType(columnIndex); + } + + @Override + public boolean isNull(int columnIndex) { + return cursor.isNull(columnIndex); + } + + @Override + public void deactivate() { + cursor.deactivate(); + } + + @Override + public boolean requery() { + return cursor.requery(); + } + + @Override + public void close() { + cursor.close(); + } + + @Override + public boolean isClosed() { + return cursor.isClosed(); + } + + @Override + public void registerContentObserver(ContentObserver observer) { + cursor.registerContentObserver(observer); + } + + @Override + public void unregisterContentObserver(ContentObserver observer) { + cursor.unregisterContentObserver(observer); + } + + @Override + public void registerDataSetObserver(DataSetObserver observer) { + cursor.registerDataSetObserver(observer); + } + + @Override + public void unregisterDataSetObserver(DataSetObserver observer) { + cursor.unregisterDataSetObserver(observer); + } + + @Override + public void setNotificationUri(ContentResolver cr, Uri uri) { + cursor.setNotificationUri(cr, uri); + } + + @Override + public Uri getNotificationUri() { + return cursor.getNotificationUri(); + } + + @Override + public boolean getWantsAllOnMoveCalls() { + return cursor.getWantsAllOnMoveCalls(); + } + + @Override + public void setExtras(Bundle extras) { + cursor.setExtras(extras); + } + + @Override + public Bundle getExtras() { + return cursor.getExtras(); + } + + @Override + public Bundle respond(Bundle extras) { + return cursor.respond(extras); + } +} diff --git a/java/com/android/dialer/searchfragment/cp2/SearchContactViewHolder.java b/java/com/android/dialer/searchfragment/cp2/SearchContactViewHolder.java new file mode 100644 index 000000000..5f06b5991 --- /dev/null +++ b/java/com/android/dialer/searchfragment/cp2/SearchContactViewHolder.java @@ -0,0 +1,204 @@ +/* + * 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.searchfragment.cp2; + +import android.content.Context; +import android.content.res.Resources; +import android.database.Cursor; +import android.net.Uri; +import android.provider.ContactsContract.CommonDataKinds.Phone; +import android.provider.ContactsContract.Contacts; +import android.support.annotation.IntDef; +import android.support.v7.widget.RecyclerView.ViewHolder; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.ImageView; +import android.widget.QuickContactBadge; +import android.widget.TextView; +import com.android.contacts.common.ContactPhotoManager; +import com.android.contacts.common.lettertiles.LetterTileDrawable; +import com.android.dialer.callintent.CallInitiationType.Type; +import com.android.dialer.callintent.CallIntentBuilder; +import com.android.dialer.common.Assert; +import com.android.dialer.searchfragment.common.Projections; +import com.android.dialer.searchfragment.common.QueryBoldingUtil; +import com.android.dialer.searchfragment.common.R; +import com.android.dialer.telecom.TelecomUtil; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** ViewHolder for a contact row. */ +public final class SearchContactViewHolder extends ViewHolder implements OnClickListener { + + /** IntDef for the different types of actions that can be shown. */ + @Retention(RetentionPolicy.SOURCE) + @IntDef({CallToAction.NONE, CallToAction.VIDEO_CALL, CallToAction.SHARE_AND_CALL}) + @interface CallToAction { + int NONE = 0; + int VIDEO_CALL = 1; + int SHARE_AND_CALL = 2; + } + + private final QuickContactBadge photo; + private final TextView nameOrNumberView; + private final TextView numberView; + private final ImageView callToActionView; + private final Context context; + + private String number; + private @CallToAction int currentAction; + + public SearchContactViewHolder(View view) { + super(view); + view.setOnClickListener(this); + photo = view.findViewById(R.id.photo); + nameOrNumberView = view.findViewById(R.id.primary); + numberView = view.findViewById(R.id.secondary); + callToActionView = view.findViewById(R.id.call_to_action); + context = view.getContext(); + } + + /** + * Binds the ViewHolder with a cursor from {@link SearchContactsCursorLoader} with the data found + * at the cursors set position. + */ + public void bind(Cursor cursor, String query) { + number = cursor.getString(Projections.PHONE_NUMBER); + String name = cursor.getString(Projections.PHONE_DISPLAY_NAME); + String label = getLabel(context.getResources(), cursor); + String secondaryInfo = + TextUtils.isEmpty(label) + ? number + : context.getString( + com.android.contacts.common.R.string.call_subject_type_and_number, label, number); + + nameOrNumberView.setText(QueryBoldingUtil.getNameWithQueryBolded(query, name)); + numberView.setText(QueryBoldingUtil.getNumberWithQueryBolded(query, secondaryInfo)); + setCallToAction(cursor); + + if (shouldShowPhoto(cursor, name)) { + nameOrNumberView.setVisibility(View.VISIBLE); + photo.setVisibility(View.VISIBLE); + String photoUri = cursor.getString(Projections.PHONE_PHOTO_URI); + ContactPhotoManager.getInstance(context) + .loadDialerThumbnailOrPhoto( + photo, + getContactUri(cursor), + cursor.getLong(Projections.PHONE_PHOTO_ID), + photoUri == null ? null : Uri.parse(photoUri), + name, + LetterTileDrawable.TYPE_DEFAULT); + } else { + nameOrNumberView.setVisibility(View.GONE); + photo.setVisibility(View.INVISIBLE); + } + } + + private boolean shouldShowPhoto(Cursor cursor, String currentName) { + int currentPosition = cursor.getPosition(); + if (currentPosition == 0) { + return true; + } else { + cursor.moveToPosition(currentPosition - 1); + String previousName = cursor.getString(Projections.PHONE_DISPLAY_NAME); + cursor.moveToPosition(currentPosition); + return !currentName.equals(previousName); + } + } + + private static Uri getContactUri(Cursor cursor) { + long contactId = cursor.getLong(Projections.PHONE_ID); + String lookupKey = cursor.getString(Projections.PHONE_LOOKUP_KEY); + return Contacts.getLookupUri(contactId, lookupKey); + } + + // TODO: handle CNAP and cequint types. + // TODO: unify this into a utility method with CallLogAdapter#getNumberType + private static String getLabel(Resources resources, Cursor cursor) { + int numberType = cursor.getInt(Projections.PHONE_TYPE); + String numberLabel = cursor.getString(Projections.PHONE_LABEL); + + // Returns empty label instead of "custom" if the custom label is empty. + if (numberType == Phone.TYPE_CUSTOM && TextUtils.isEmpty(numberLabel)) { + return ""; + } + return (String) Phone.getTypeLabel(resources, numberType, numberLabel); + } + + private void setCallToAction(Cursor cursor) { + currentAction = getCallToAction(cursor); + switch (currentAction) { + case CallToAction.NONE: + callToActionView.setVisibility(View.GONE); + callToActionView.setOnClickListener(null); + break; + case CallToAction.SHARE_AND_CALL: + callToActionView.setVisibility(View.VISIBLE); + callToActionView.setImageDrawable( + context.getDrawable(com.android.contacts.common.R.drawable.ic_phone_attach)); + callToActionView.setOnClickListener(this); + break; + case CallToAction.VIDEO_CALL: + callToActionView.setVisibility(View.VISIBLE); + callToActionView.setImageDrawable( + context.getDrawable(R.drawable.quantum_ic_videocam_white_24)); + callToActionView.setOnClickListener(this); + break; + default: + throw Assert.createIllegalStateFailException( + "Invalid Call to action type: " + currentAction); + } + } + + private static @CallToAction int getCallToAction(Cursor cursor) { + int carrierPresence = cursor.getInt(Projections.PHONE_CARRIER_PRESENCE); + if ((carrierPresence & Phone.CARRIER_PRESENCE_VT_CAPABLE) == 1) { + return CallToAction.VIDEO_CALL; + } + + // TODO: enriched calling + return CallToAction.NONE; + } + + @Override + public void onClick(View view) { + if (view == callToActionView) { + switch (currentAction) { + case CallToAction.SHARE_AND_CALL: + callToActionView.setVisibility(View.VISIBLE); + callToActionView.setImageDrawable( + context.getDrawable(com.android.contacts.common.R.drawable.ic_phone_attach)); + // TODO: open call composer. + break; + case CallToAction.VIDEO_CALL: + callToActionView.setVisibility(View.VISIBLE); + callToActionView.setImageDrawable( + context.getDrawable(R.drawable.quantum_ic_videocam_white_24)); + // TODO: place a video call + break; + case CallToAction.NONE: + default: + throw Assert.createIllegalStateFailException( + "Invalid Call to action type: " + currentAction); + } + } else { + // TODO: set the correct call initiation type. + TelecomUtil.placeCall(context, new CallIntentBuilder(number, Type.REGULAR_SEARCH).build()); + } + } +} diff --git a/java/com/android/dialer/searchfragment/cp2/SearchContactsCursorLoader.java b/java/com/android/dialer/searchfragment/cp2/SearchContactsCursorLoader.java new file mode 100644 index 000000000..c72f28b25 --- /dev/null +++ b/java/com/android/dialer/searchfragment/cp2/SearchContactsCursorLoader.java @@ -0,0 +1,42 @@ +/* + * 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.searchfragment.cp2; + +import android.content.Context; +import android.content.CursorLoader; +import android.database.Cursor; +import android.provider.ContactsContract.CommonDataKinds.Phone; +import com.android.dialer.searchfragment.common.Projections; + +/** Cursor Loader for CP2 contacts. */ +public final class SearchContactsCursorLoader extends CursorLoader { + + public SearchContactsCursorLoader(Context context) { + super( + context, + Phone.CONTENT_URI, + Projections.PHONE_PROJECTION, + null, + null, + Phone.SORT_KEY_PRIMARY + " ASC"); + } + + @Override + public Cursor loadInBackground() { + return new SearchContactCursor(super.loadInBackground(), null); + } +} diff --git a/java/com/android/dialer/searchfragment/list/AndroidManifest.xml b/java/com/android/dialer/searchfragment/list/AndroidManifest.xml new file mode 100644 index 000000000..e0890cc2c --- /dev/null +++ b/java/com/android/dialer/searchfragment/list/AndroidManifest.xml @@ -0,0 +1,16 @@ + + \ No newline at end of file diff --git a/java/com/android/dialer/searchfragment/list/HeaderViewHolder.java b/java/com/android/dialer/searchfragment/list/HeaderViewHolder.java new file mode 100644 index 000000000..dd35b13ee --- /dev/null +++ b/java/com/android/dialer/searchfragment/list/HeaderViewHolder.java @@ -0,0 +1,36 @@ +/* + * 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.searchfragment.list; + +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.TextView; + +/** ViewHolder for header rows in {@link NewSearchFragment}. */ +final class HeaderViewHolder extends RecyclerView.ViewHolder { + + private final TextView header; + + HeaderViewHolder(View view) { + super(view); + header = view.findViewById(R.id.header); + } + + public void setHeader(String header) { + this.header.setText(header); + } +} diff --git a/java/com/android/dialer/searchfragment/list/NewSearchFragment.java b/java/com/android/dialer/searchfragment/list/NewSearchFragment.java new file mode 100644 index 000000000..fcc87c386 --- /dev/null +++ b/java/com/android/dialer/searchfragment/list/NewSearchFragment.java @@ -0,0 +1,125 @@ +/* + * 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.searchfragment.list; + +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.ViewGroup; +import com.android.contacts.common.extensions.PhoneDirectoryExtenderAccessor; +import com.android.dialer.common.concurrent.ThreadUtil; +import com.android.dialer.searchfragment.cp2.SearchContactsCursorLoader; +import com.android.dialer.searchfragment.nearbyplaces.NearbyPlacesCursorLoader; + +/** Fragment used for searching contacts. */ +public final class NewSearchFragment extends Fragment implements LoaderCallbacks { + + // Since some of our queries can generate network requests, we should delay them until the user + // stops typing to prevent generating too much network traffic. + private static final int NETWORK_SEARCH_DELAY_MILLIS = 300; + + private static final int CONTACTS_LOADER_ID = 0; + private static final int NEARBY_PLACES_ID = 1; + + private RecyclerView recyclerView; + private SearchAdapter adapter; + private String query; + + private final Runnable loadNearbyPlacesRunnable = + () -> getLoaderManager().restartLoader(NEARBY_PLACES_ID, null, this); + + @Nullable + @Override + public View onCreateView( + LayoutInflater inflater, @Nullable ViewGroup parent, @Nullable Bundle bundle) { + getLoaderManager().initLoader(0, null, this); + View view = inflater.inflate(R.layout.fragment_search, parent, false); + adapter = new SearchAdapter(getContext()); + recyclerView = view.findViewById(R.id.recycler_view); + recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); + recyclerView.setAdapter(adapter); + + getLoaderManager().initLoader(CONTACTS_LOADER_ID, null, this); + loadNearbyPlacesCursor(); + return view; + } + + @Override + public Loader onCreateLoader(int id, Bundle bundle) { + // TODO add enterprise loader + if (id == CONTACTS_LOADER_ID) { + return new SearchContactsCursorLoader(getContext()); + } else if (id == NEARBY_PLACES_ID) { + return new NearbyPlacesCursorLoader(getContext(), query); + } else { + throw new IllegalStateException("Invalid loader id: " + id); + } + } + + @Override + public void onLoadFinished(Loader loader, Cursor cursor) { + if (loader instanceof SearchContactsCursorLoader) { + adapter.setContactsCursor(cursor); + } else if (loader instanceof NearbyPlacesCursorLoader) { + adapter.setNearbyPlacesCursor(cursor); + } else { + throw new IllegalStateException("Invalid loader: " + loader); + } + } + + @Override + public void onLoaderReset(Loader loader) { + adapter.clear(); + recyclerView.setAdapter(null); + } + + public void setQuery(String query) { + this.query = query; + if (adapter != null) { + adapter.setQuery(query); + loadNearbyPlacesCursor(); + } + } + + @Override + public void onDestroy() { + super.onDestroy(); + // close adapters + adapter.setNearbyPlacesCursor(null); + adapter.setContactsCursor(null); + ThreadUtil.getUiThreadHandler().removeCallbacks(loadNearbyPlacesRunnable); + } + + private void loadNearbyPlacesCursor() { + // Cancel existing load if one exists. + ThreadUtil.getUiThreadHandler().removeCallbacks(loadNearbyPlacesRunnable); + + // If nearby places is not enabled, do not try to load them. + if (!PhoneDirectoryExtenderAccessor.get(getContext()).isEnabled(getContext())) { + return; + } + ThreadUtil.getUiThreadHandler() + .postDelayed(loadNearbyPlacesRunnable, NETWORK_SEARCH_DELAY_MILLIS); + } +} diff --git a/java/com/android/dialer/searchfragment/list/SearchAdapter.java b/java/com/android/dialer/searchfragment/list/SearchAdapter.java new file mode 100644 index 000000000..023513e47 --- /dev/null +++ b/java/com/android/dialer/searchfragment/list/SearchAdapter.java @@ -0,0 +1,108 @@ +/* + * 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.searchfragment.list; + +import android.content.Context; +import android.database.Cursor; +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.common.Assert; +import com.android.dialer.searchfragment.cp2.SearchContactViewHolder; +import com.android.dialer.searchfragment.list.SearchCursorManager.RowType; +import com.android.dialer.searchfragment.nearbyplaces.NearbyPlaceViewHolder; + +/** RecyclerView adapter for {@link NewSearchFragment}. */ +class SearchAdapter extends RecyclerView.Adapter { + + private final SearchCursorManager searchCursorManager; + private final Context context; + + private String query; + + SearchAdapter(Context context) { + searchCursorManager = new SearchCursorManager(); + this.context = context; + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup root, @RowType int rowType) { + switch (rowType) { + case RowType.CONTACT_ROW: + return new SearchContactViewHolder( + LayoutInflater.from(context).inflate(R.layout.search_contact_row, root, false)); + case RowType.NEARBY_PLACES_ROW: + return new NearbyPlaceViewHolder( + LayoutInflater.from(context).inflate(R.layout.search_contact_row, root, false)); + case RowType.DIRECTORY_HEADER: + case RowType.NEARBY_PLACES_HEADER: + return new HeaderViewHolder( + LayoutInflater.from(context).inflate(R.layout.header_layout, root, false)); + case RowType.DIRECTORY_ROW: // TODO: add directory rows to search + case RowType.INVALID: + default: + throw Assert.createIllegalStateFailException("Invalid RowType: " + rowType); + } + } + + @Override + public @RowType int getItemViewType(int position) { + return searchCursorManager.getRowType(position); + } + + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + if (holder instanceof SearchContactViewHolder) { + Cursor cursor = searchCursorManager.getCursor(position); + ((SearchContactViewHolder) holder).bind(cursor, query); + } else if (holder instanceof NearbyPlaceViewHolder) { + Cursor cursor = searchCursorManager.getCursor(position); + ((NearbyPlaceViewHolder) holder).bind(cursor, query); + } else if (holder instanceof HeaderViewHolder) { + String header = context.getString(searchCursorManager.getHeaderText(position)); + ((HeaderViewHolder) holder).setHeader(header); + } else { + throw Assert.createIllegalStateFailException("Invalid ViewHolder: " + holder); + } + } + + void setContactsCursor(Cursor cursor) { + searchCursorManager.setContactsCursor(cursor); + notifyDataSetChanged(); + } + + void clear() { + searchCursorManager.clear(); + } + + @Override + public int getItemCount() { + return searchCursorManager.getCount(); + } + + public void setQuery(String query) { + this.query = query; + searchCursorManager.setQuery(query); + notifyDataSetChanged(); + } + + public void setNearbyPlacesCursor(Cursor nearbyPlacesCursor) { + searchCursorManager.setNearbyPlacesCursor(nearbyPlacesCursor); + notifyDataSetChanged(); + } +} diff --git a/java/com/android/dialer/searchfragment/list/SearchCursorManager.java b/java/com/android/dialer/searchfragment/list/SearchCursorManager.java new file mode 100644 index 000000000..216a9ada9 --- /dev/null +++ b/java/com/android/dialer/searchfragment/list/SearchCursorManager.java @@ -0,0 +1,273 @@ +/* + * 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.searchfragment.list; + +import android.database.Cursor; +import android.support.annotation.IntDef; +import android.support.annotation.StringRes; +import com.android.dialer.common.Assert; +import com.android.dialer.searchfragment.cp2.SearchContactCursor; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * Manages all of the cursors needed for {@link SearchAdapter}. + * + *

      This class accepts three cursors: + * + *

        + *
      • A contacts cursor {@link #setContactsCursor(Cursor)} + *
      • A google search results cursor {@link #setNearbyPlacesCursor(Cursor)} + *
      • A work directory cursor {@link #setCorpDirectoryCursor(Cursor)} + *
      + * + *

      The key purpose of this class is to compose three aforementioned cursors together to function + * as one cursor. The key methods needed to utilize this class as a cursor are: + * + *

        + *
      • {@link #getCursor(int)} + *
      • {@link #getCount()} + *
      • {@link #getRowType(int)} + *
      + */ +final class SearchCursorManager { + + /** IntDef for the different types of rows that can be shown when searching. */ + @Retention(RetentionPolicy.SOURCE) + @IntDef({ + SearchCursorManager.RowType.INVALID, + SearchCursorManager.RowType.CONTACT_ROW, + SearchCursorManager.RowType.NEARBY_PLACES_HEADER, + SearchCursorManager.RowType.NEARBY_PLACES_ROW, + SearchCursorManager.RowType.DIRECTORY_HEADER, + SearchCursorManager.RowType.DIRECTORY_ROW + }) + @interface RowType { + int INVALID = 0; + /** A row containing contact information for contacts stored locally on device. */ + int CONTACT_ROW = 1; + /** Header to mark the end of contact rows and start of nearby places rows. */ + int NEARBY_PLACES_HEADER = 2; + /** A row containing nearby places information/search results. */ + int NEARBY_PLACES_ROW = 3; + /** Header to mark the end of the previous row set and start of directory rows. */ + int DIRECTORY_HEADER = 4; + /** A row containing contact information for contacts stored externally in corp directories. */ + int DIRECTORY_ROW = 5; + } + + private Cursor contactsCursor = null; + private Cursor nearbyPlacesCursor = null; + private Cursor corpDirectoryCursor = null; + + void setContactsCursor(Cursor cursor) { + if (cursor == contactsCursor) { + return; + } + + if (contactsCursor != null && !contactsCursor.isClosed()) { + contactsCursor.close(); + } + + if (cursor != null && cursor.getCount() > 0) { + contactsCursor = cursor; + } else { + contactsCursor = null; + } + } + + void setNearbyPlacesCursor(Cursor cursor) { + if (cursor == nearbyPlacesCursor) { + return; + } + + if (nearbyPlacesCursor != null && !nearbyPlacesCursor.isClosed()) { + nearbyPlacesCursor.close(); + } + + if (cursor != null && cursor.getCount() > 0) { + nearbyPlacesCursor = cursor; + } else { + nearbyPlacesCursor = null; + } + } + + void setCorpDirectoryCursor(Cursor cursor) { + if (cursor == corpDirectoryCursor) { + return; + } + + if (corpDirectoryCursor != null && !corpDirectoryCursor.isClosed()) { + corpDirectoryCursor.close(); + } + + if (cursor != null && cursor.getCount() > 0) { + corpDirectoryCursor = cursor; + } else { + corpDirectoryCursor = null; + } + } + + void setQuery(String query) { + if (contactsCursor != null) { + // TODO: abstract this + ((SearchContactCursor) contactsCursor).filter(query); + } + } + + /** @return the sum of counts of all cursors, including headers. */ + int getCount() { + int count = 0; + if (contactsCursor != null) { + count += contactsCursor.getCount(); + } + + if (nearbyPlacesCursor != null) { + count++; // header + count += nearbyPlacesCursor.getCount(); + } + + if (corpDirectoryCursor != null) { + count++; // header + count += corpDirectoryCursor.getCount(); + } + + return count; + } + + @RowType + int getRowType(int position) { + if (contactsCursor != null) { + position -= contactsCursor.getCount(); + + if (position < 0) { + return SearchCursorManager.RowType.CONTACT_ROW; + } + } + + if (nearbyPlacesCursor != null) { + if (position == 0) { + return SearchCursorManager.RowType.NEARBY_PLACES_HEADER; + } else { + position--; // header + } + + position -= nearbyPlacesCursor.getCount(); + + if (position < 0) { + return SearchCursorManager.RowType.NEARBY_PLACES_ROW; + } + } + + if (corpDirectoryCursor != null) { + if (position == 0) { + return SearchCursorManager.RowType.DIRECTORY_HEADER; + } else { + position--; // header + } + + position -= corpDirectoryCursor.getCount(); + + if (position < 0) { + return SearchCursorManager.RowType.DIRECTORY_ROW; + } + } + + throw Assert.createIllegalStateFailException("No valid row type."); + } + + /** + * Gets cursor corresponding to position in coelesced list of search cursors. Callers should + * ensure that {@link #getRowType(int)} doesn't correspond to header position, otherwise an + * exception will be thrown. + * + * @param position in coalecsed list of search cursors + * @return Cursor moved to position specific to passed in position. + */ + Cursor getCursor(int position) { + if (contactsCursor != null) { + int count = contactsCursor.getCount(); + + if (position - count < 0) { + contactsCursor.moveToPosition(position); + return contactsCursor; + } + position -= count; + } + + if (nearbyPlacesCursor != null) { + Assert.checkArgument(position != 0, "No valid cursor, position is nearby places header."); + position--; // header + int count = nearbyPlacesCursor.getCount(); + + if (position - count < 0) { + nearbyPlacesCursor.moveToPosition(position); + return nearbyPlacesCursor; + } + position -= count; + } + + if (corpDirectoryCursor != null) { + Assert.checkArgument(position != 0, "No valid cursor, position is directory search header."); + position--; // header + int count = corpDirectoryCursor.getCount(); + + if (position - count < 0) { + corpDirectoryCursor.moveToPosition(position); + return corpDirectoryCursor; + } + position -= count; + } + + throw Assert.createIllegalStateFailException("No valid cursor."); + } + + @StringRes + int getHeaderText(int position) { + @RowType int rowType = getRowType(position); + switch (rowType) { + case RowType.NEARBY_PLACES_HEADER: + return R.string.nearby_places; + case RowType.DIRECTORY_HEADER: // TODO + case RowType.DIRECTORY_ROW: + case RowType.CONTACT_ROW: + case RowType.NEARBY_PLACES_ROW: + case RowType.INVALID: + default: + throw Assert.createIllegalStateFailException( + "Invalid row type, position " + position + " is rowtype " + rowType); + } + } + + /** removes all cursors. */ + void clear() { + if (contactsCursor != null) { + contactsCursor.close(); + contactsCursor = null; + } + + if (nearbyPlacesCursor != null) { + nearbyPlacesCursor.close(); + nearbyPlacesCursor = null; + } + + if (corpDirectoryCursor != null) { + corpDirectoryCursor.close(); + corpDirectoryCursor = null; + } + } +} diff --git a/java/com/android/dialer/searchfragment/list/res/layout/fragment_search.xml b/java/com/android/dialer/searchfragment/list/res/layout/fragment_search.xml new file mode 100644 index 000000000..06f234889 --- /dev/null +++ b/java/com/android/dialer/searchfragment/list/res/layout/fragment_search.xml @@ -0,0 +1,21 @@ + + + diff --git a/java/com/android/dialer/searchfragment/list/res/layout/header_layout.xml b/java/com/android/dialer/searchfragment/list/res/layout/header_layout.xml new file mode 100644 index 000000000..36af42ed9 --- /dev/null +++ b/java/com/android/dialer/searchfragment/list/res/layout/header_layout.xml @@ -0,0 +1,22 @@ + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/AndroidManifest.xml b/java/com/android/dialer/searchfragment/nearbyplaces/AndroidManifest.xml new file mode 100644 index 000000000..178cd83c3 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/AndroidManifest.xml @@ -0,0 +1,16 @@ + + \ No newline at end of file diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/NearbyPlaceViewHolder.java b/java/com/android/dialer/searchfragment/nearbyplaces/NearbyPlaceViewHolder.java new file mode 100644 index 000000000..b6e5a9013 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/NearbyPlaceViewHolder.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.searchfragment.nearbyplaces; + +import android.content.Context; +import android.database.Cursor; +import android.net.Uri; +import android.provider.ContactsContract; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.QuickContactBadge; +import android.widget.TextView; +import com.android.contacts.common.ContactPhotoManager; +import com.android.contacts.common.lettertiles.LetterTileDrawable; +import com.android.dialer.callintent.CallInitiationType; +import com.android.dialer.callintent.CallIntentBuilder; +import com.android.dialer.searchfragment.common.Projections; +import com.android.dialer.searchfragment.common.QueryBoldingUtil; +import com.android.dialer.searchfragment.common.R; +import com.android.dialer.telecom.TelecomUtil; + +/** ViewHolder for a nearby place row. */ +public final class NearbyPlaceViewHolder extends RecyclerView.ViewHolder + implements View.OnClickListener { + + private final Context context; + private final TextView placeName; + private final TextView placeAddress; + private final QuickContactBadge photo; + + private String number; + + public NearbyPlaceViewHolder(View view) { + super(view); + view.setOnClickListener(this); + photo = view.findViewById(R.id.photo); + placeName = view.findViewById(R.id.primary); + placeAddress = view.findViewById(R.id.secondary); + context = view.getContext(); + } + + /** + * Binds the ViewHolder with a cursor from {@link NearbyPlacesCursorLoader} with the data found at + * the cursors set position. + */ + public void bind(Cursor cursor, String query) { + number = cursor.getString(Projections.PHONE_NUMBER); + String name = cursor.getString(Projections.PHONE_DISPLAY_NAME); + String address = cursor.getString(Projections.PHONE_LABEL); + + placeName.setText(QueryBoldingUtil.getNameWithQueryBolded(query, name)); + placeAddress.setText(QueryBoldingUtil.getNameWithQueryBolded(query, address)); + + String photoUri = cursor.getString(Projections.PHONE_PHOTO_URI); + ContactPhotoManager.getInstance(context) + .loadDialerThumbnailOrPhoto( + photo, + getContactUri(cursor), + cursor.getLong(Projections.PHONE_PHOTO_ID), + photoUri == null ? null : Uri.parse(photoUri), + name, + LetterTileDrawable.TYPE_DEFAULT); + } + + private static Uri getContactUri(Cursor cursor) { + long contactId = cursor.getLong(Projections.PHONE_ID); + String lookupKey = cursor.getString(Projections.PHONE_LOOKUP_KEY); + return ContactsContract.Contacts.getLookupUri(contactId, lookupKey); + } + + @Override + public void onClick(View v) { + TelecomUtil.placeCall( + context, new CallIntentBuilder(number, CallInitiationType.Type.REGULAR_SEARCH).build()); + } +} diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/NearbyPlacesCursorLoader.java b/java/com/android/dialer/searchfragment/nearbyplaces/NearbyPlacesCursorLoader.java new file mode 100644 index 000000000..9f3193e92 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/NearbyPlacesCursorLoader.java @@ -0,0 +1,43 @@ +/* + * 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.searchfragment.nearbyplaces; + +import android.content.Context; +import android.content.CursorLoader; +import android.net.Uri; +import android.provider.ContactsContract; +import com.android.contacts.common.extensions.PhoneDirectoryExtenderAccessor; +import com.android.dialer.searchfragment.common.Projections; + +/** Cursor loader for nearby places search results. */ +public final class NearbyPlacesCursorLoader extends CursorLoader { + + private static final String MAX_RESULTS = "3"; + + public NearbyPlacesCursorLoader(Context context, String query) { + super(context, getContentUri(context, query), Projections.PHONE_PROJECTION, null, null, null); + } + + private static Uri getContentUri(Context context, String query) { + return PhoneDirectoryExtenderAccessor.get(context) + .getContentUri() + .buildUpon() + .appendPath(query) + .appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY, MAX_RESULTS) + .build(); + } +} diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-af/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-af/strings.xml new file mode 100644 index 000000000..21eb4b11d --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-af/strings.xml @@ -0,0 +1,21 @@ + + + + + "Nabygeleë plekke" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-am/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-am/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-am/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ar/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ar/strings.xml new file mode 100644 index 000000000..d68b4d1ee --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ar/strings.xml @@ -0,0 +1,21 @@ + + + + + "الأماكن المجاورة" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-az/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-az/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-az/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-b+sr+Latn/strings.xml new file mode 100644 index 000000000..bb9f06fe7 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-b+sr+Latn/strings.xml @@ -0,0 +1,21 @@ + + + + + "Obližnja mesta" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-be/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-be/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-be/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-bg/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-bg/strings.xml new file mode 100644 index 000000000..e8839532a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-bg/strings.xml @@ -0,0 +1,21 @@ + + + + + "Места в района" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-bn/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-bn/strings.xml new file mode 100644 index 000000000..4bc3fedb4 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-bn/strings.xml @@ -0,0 +1,21 @@ + + + + + "আশপাশের জায়গাগুলি" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-bs/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-bs/strings.xml new file mode 100644 index 000000000..f3fb92187 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-bs/strings.xml @@ -0,0 +1,21 @@ + + + + + "Mjesta u blizini" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ca/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ca/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ca/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-cs/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-cs/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-cs/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-da/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-da/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-da/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-de/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-de/strings.xml new file mode 100644 index 000000000..9e2db4a32 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-de/strings.xml @@ -0,0 +1,21 @@ + + + + + "Orte in der Nähe" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-el/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-el/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-el/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-en-rAU/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-en-rAU/strings.xml new file mode 100644 index 000000000..077827315 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-en-rAU/strings.xml @@ -0,0 +1,21 @@ + + + + + "Places nearby" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-en-rGB/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-en-rGB/strings.xml new file mode 100644 index 000000000..077827315 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-en-rGB/strings.xml @@ -0,0 +1,21 @@ + + + + + "Places nearby" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-en-rIN/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-en-rIN/strings.xml new file mode 100644 index 000000000..077827315 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-en-rIN/strings.xml @@ -0,0 +1,21 @@ + + + + + "Places nearby" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-es-rUS/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-es-rUS/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-es-rUS/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-es/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-es/strings.xml new file mode 100644 index 000000000..fada6bcaf --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-es/strings.xml @@ -0,0 +1,21 @@ + + + + + "Sitios cercanos" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-et/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-et/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-et/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-eu/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-eu/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-eu/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-fa/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-fa/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-fa/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-fi/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-fi/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-fi/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-fr-rCA/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-fr-rCA/strings.xml new file mode 100644 index 000000000..d65e7bd55 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-fr-rCA/strings.xml @@ -0,0 +1,21 @@ + + + + + "Adresses à proximité" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-fr/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-fr/strings.xml new file mode 100644 index 000000000..d65e7bd55 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-fr/strings.xml @@ -0,0 +1,21 @@ + + + + + "Adresses à proximité" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-gl/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-gl/strings.xml new file mode 100644 index 000000000..5a4cce7e0 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-gl/strings.xml @@ -0,0 +1,21 @@ + + + + + "Lugares próximos" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-gu/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-gu/strings.xml new file mode 100644 index 000000000..ee32e466f --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-gu/strings.xml @@ -0,0 +1,21 @@ + + + + + "નજીકના સ્થળો" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-hi/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-hi/strings.xml new file mode 100644 index 000000000..079c03e04 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-hi/strings.xml @@ -0,0 +1,21 @@ + + + + + "आस-पास के स्थल" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-hr/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-hr/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-hr/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-hu/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-hu/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-hu/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-hy/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-hy/strings.xml new file mode 100644 index 000000000..3a2ba3938 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-hy/strings.xml @@ -0,0 +1,21 @@ + + + + + "Մոտակա վայրեր" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-in/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-in/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-in/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-is/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-is/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-is/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-it/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-it/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-it/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-iw/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-iw/strings.xml new file mode 100644 index 000000000..0f07995f3 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-iw/strings.xml @@ -0,0 +1,21 @@ + + + + + "מקומות קרובים" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ja/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ja/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ja/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ka/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ka/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ka/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-kk/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-kk/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-kk/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-km/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-km/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-km/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-kn/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-kn/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-kn/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ko/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ko/strings.xml new file mode 100644 index 000000000..f05a33289 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ko/strings.xml @@ -0,0 +1,21 @@ + + + + + "주변 장소" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ky/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ky/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ky/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-lo/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-lo/strings.xml new file mode 100644 index 000000000..2ff0e8548 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-lo/strings.xml @@ -0,0 +1,21 @@ + + + + + "ສະຖານທີ່ໃກ້ຄຽງ" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-lt/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-lt/strings.xml new file mode 100644 index 000000000..9baf54044 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-lt/strings.xml @@ -0,0 +1,21 @@ + + + + + "Netoliese esančios vietos" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-lv/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-lv/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-lv/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-mk/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-mk/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-mk/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ml/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ml/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ml/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-mn/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-mn/strings.xml new file mode 100644 index 000000000..707a6c955 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-mn/strings.xml @@ -0,0 +1,21 @@ + + + + + "Ойролцоох газрууд" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-mr/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-mr/strings.xml new file mode 100644 index 000000000..862cd0419 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-mr/strings.xml @@ -0,0 +1,21 @@ + + + + + "जवळपासची ठिकाणे" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ms/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ms/strings.xml new file mode 100644 index 000000000..aed0bbb4d --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ms/strings.xml @@ -0,0 +1,21 @@ + + + + + "Tempat berdekatan" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-my/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-my/strings.xml new file mode 100644 index 000000000..74e60a089 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-my/strings.xml @@ -0,0 +1,21 @@ + + + + + "အနီးတဝိုက်ရှိ နေရာများ" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-nb/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-nb/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-nb/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ne/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ne/strings.xml new file mode 100644 index 000000000..29b6854fe --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ne/strings.xml @@ -0,0 +1,21 @@ + + + + + "नजिकका स्थानहरू" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-nl/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-nl/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-nl/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-no/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-no/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-no/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-pa/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-pa/strings.xml new file mode 100644 index 000000000..1d4d472a3 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-pa/strings.xml @@ -0,0 +1,21 @@ + + + + + "ਨਜ਼ਦੀਕੀ ਸਥਾਨ" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-pl/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-pl/strings.xml new file mode 100644 index 000000000..c00b6081a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-pl/strings.xml @@ -0,0 +1,21 @@ + + + + + "Miejsca w pobliżu" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-pt-rBR/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-pt-rBR/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-pt-rBR/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-pt-rPT/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-pt-rPT/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-pt-rPT/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-pt/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-pt/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-pt/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ro/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ro/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ro/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ru/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ru/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ru/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-si/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-si/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-si/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-sk/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-sk/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-sk/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-sl/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-sl/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-sl/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-sq/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-sq/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-sq/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-sr/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-sr/strings.xml new file mode 100644 index 000000000..21af04328 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-sr/strings.xml @@ -0,0 +1,21 @@ + + + + + "Оближња места" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-sv/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-sv/strings.xml new file mode 100644 index 000000000..c309b8df4 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-sv/strings.xml @@ -0,0 +1,21 @@ + + + + + "Platser i närheten" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-sw/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-sw/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-sw/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ta/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ta/strings.xml new file mode 100644 index 000000000..ce7496e53 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ta/strings.xml @@ -0,0 +1,21 @@ + + + + + "அருகிலுள்ள இடங்கள்" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-te/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-te/strings.xml new file mode 100644 index 000000000..c8229fb64 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-te/strings.xml @@ -0,0 +1,21 @@ + + + + + "సమీప స్థలాలు" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-th/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-th/strings.xml new file mode 100644 index 000000000..1167d2f57 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-th/strings.xml @@ -0,0 +1,21 @@ + + + + + "สถานที่ใกล้เคียง" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-tl/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-tl/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-tl/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-tr/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-tr/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-tr/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-uk/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-uk/strings.xml new file mode 100644 index 000000000..a3936be25 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-uk/strings.xml @@ -0,0 +1,21 @@ + + + + + "Місця поблизу" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ur/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ur/strings.xml new file mode 100644 index 000000000..1a220b3c2 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-ur/strings.xml @@ -0,0 +1,21 @@ + + + + + "قریبی مقامات" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-uz/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-uz/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-uz/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-vi/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-vi/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-vi/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-zh-rCN/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-zh-rCN/strings.xml new file mode 100644 index 000000000..e060cb589 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-zh-rCN/strings.xml @@ -0,0 +1,21 @@ + + + + + "附近的地点" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-zh-rHK/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-zh-rHK/strings.xml new file mode 100644 index 000000000..5cdf5b9a7 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-zh-rHK/strings.xml @@ -0,0 +1,21 @@ + + + + + "附近地點" + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-zh-rTW/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-zh-rTW/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-zh-rTW/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values-zu/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-zu/strings.xml new file mode 100644 index 000000000..8039ea04a --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values-zu/strings.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/res/values/strings.xml b/java/com/android/dialer/searchfragment/nearbyplaces/res/values/strings.xml new file mode 100644 index 000000000..ed8068018 --- /dev/null +++ b/java/com/android/dialer/searchfragment/nearbyplaces/res/values/strings.xml @@ -0,0 +1,20 @@ + + + + + Nearby places + \ No newline at end of file diff --git a/java/com/android/dialer/shortcuts/AndroidManifest.xml b/java/com/android/dialer/shortcuts/AndroidManifest.xml index 71320517d..15f77944e 100644 --- a/java/com/android/dialer/shortcuts/AndroidManifest.xml +++ b/java/com/android/dialer/shortcuts/AndroidManifest.xml @@ -20,7 +20,7 @@ android:minSdkVersion="23" android:targetSdkVersion="26"/> - + , Boolean> isVoicemailNumberCache = + new ConcurrentHashMap<>(); + + @VisibleForTesting(otherwise = VisibleForTesting.NONE) + public static void setInstanceForTesting(TelecomUtilImpl instanceForTesting) { + instance = instanceForTesting; + } public static void showInCallScreen(Context context, boolean showDialpad) { if (hasReadPhoneStatePermission(context)) { @@ -125,18 +141,30 @@ public class TelecomUtil { } public static boolean isInCall(Context context) { - if (hasReadPhoneStatePermission(context)) { - return getTelecomManager(context).isInCall(); - } - return false; + return instance.isInCall(context); } + /** + * {@link TelecomManager#isVoiceMailNumber(PhoneAccountHandle, String)} takes about 10ms, which is + * way too slow for regular purposes. This method will cache the result for the life time of the + * process. The cache will not be invalidated, for example, if the voicemail number is changed by + * setting up apps like Google Voicemail, the result will be wrong. These events are rare. + */ public static boolean isVoicemailNumber( Context context, PhoneAccountHandle accountHandle, String number) { + if (TextUtils.isEmpty(number)) { + return false; + } + Pair cacheKey = new Pair<>(accountHandle, number); + if (isVoicemailNumberCache.containsKey(cacheKey)) { + return isVoicemailNumberCache.get(cacheKey); + } + boolean result = false; if (hasReadPhoneStatePermission(context)) { - return getTelecomManager(context).isVoiceMailNumber(accountHandle, number); + result = getTelecomManager(context).isVoiceMailNumber(accountHandle, number); } - return false; + isVoicemailNumberCache.put(cacheKey, result); + return result; } @Nullable @@ -189,43 +217,47 @@ public class TelecomUtil { } private static boolean hasPermission(Context context, String permission) { - if (hasPermissionForTesting != null) { - return hasPermissionForTesting; - } - return ContextCompat.checkSelfPermission(context, permission) - == PackageManager.PERMISSION_GRANTED; - } - - public static boolean isDefaultDialer(Context context) { - if (isDefaultDialerForTesting != null) { - return isDefaultDialerForTesting; - } - final boolean result = - TextUtils.equals( - context.getPackageName(), getTelecomManager(context).getDefaultDialerPackage()); - if (result) { - sWarningLogged = false; - } else { - if (!sWarningLogged) { - // Log only once to prevent spam. - LogUtil.w(TAG, "Dialer is not currently set to be default dialer"); - sWarningLogged = true; - } - } - return result; + return instance.hasPermission(context, permission); } private static TelecomManager getTelecomManager(Context context) { return (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE); } - @VisibleForTesting(otherwise = VisibleForTesting.NONE) - public static void setIsDefaultDialerForTesting(Boolean defaultDialer) { - isDefaultDialerForTesting = defaultDialer; + public static boolean isDefaultDialer(Context context) { + return instance.isDefaultDialer(context); } - @VisibleForTesting(otherwise = VisibleForTesting.NONE) - public static void setHasPermissionForTesting(Boolean hasPermission) { - hasPermissionForTesting = hasPermission; + /** Contains an implementation for {@link TelecomUtil} methods */ + @VisibleForTesting() + public static class TelecomUtilImpl { + + public boolean isInCall(Context context) { + if (hasReadPhoneStatePermission(context)) { + return getTelecomManager(context).isInCall(); + } + return false; + } + + public boolean hasPermission(Context context, String permission) { + return ContextCompat.checkSelfPermission(context, permission) + == PackageManager.PERMISSION_GRANTED; + } + + public boolean isDefaultDialer(Context context) { + final boolean result = + TextUtils.equals( + context.getPackageName(), getTelecomManager(context).getDefaultDialerPackage()); + if (result) { + sWarningLogged = false; + } else { + if (!sWarningLogged) { + // Log only once to prevent spam. + LogUtil.w(TAG, "Dialer is not currently set to be default dialer"); + sWarningLogged = true; + } + } + return result; + } } } diff --git a/java/com/android/dialer/theme/res/values-af/strings.xml b/java/com/android/dialer/theme/res/values-af/strings.xml index f263a8186..17e6ceac4 100644 --- a/java/com/android/dialer/theme/res/values-af/strings.xml +++ b/java/com/android/dialer/theme/res/values-af/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Telefoonhokkie" "Foon" + "Kameratoestemming is geaktiveer" + "Video-oproep" "Bel"
      diff --git a/java/com/android/dialer/theme/res/values-am/strings.xml b/java/com/android/dialer/theme/res/values-am/strings.xml index 4f3624428..5b0b2fd1f 100644 --- a/java/com/android/dialer/theme/res/values-am/strings.xml +++ b/java/com/android/dialer/theme/res/values-am/strings.xml @@ -21,5 +21,7 @@ "%s %d" "የሕዝብ ስልክ" "ስልክ" + "የካሜራ ፈቃድ ነቅቷል" + "የቪዲዮ ጥሪ" "ደውል" diff --git a/java/com/android/dialer/theme/res/values-ar/strings.xml b/java/com/android/dialer/theme/res/values-ar/strings.xml index 951bde2c0..ea3468e61 100644 --- a/java/com/android/dialer/theme/res/values-ar/strings.xml +++ b/java/com/android/dialer/theme/res/values-ar/strings.xml @@ -21,5 +21,7 @@ "%s %d" "هاتف يعمل بالعملة" "الهاتف" + "تم تمكين إذن الكاميرا" + "مكالمة فيديو" "اتصال" diff --git a/java/com/android/dialer/theme/res/values-az/strings.xml b/java/com/android/dialer/theme/res/values-az/strings.xml index 08eaf337b..91ead1b68 100644 --- a/java/com/android/dialer/theme/res/values-az/strings.xml +++ b/java/com/android/dialer/theme/res/values-az/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Taksofon" "Telefon" + "Kamera icazəsi aktiv edildi" + "Video zəng" "Zəng edin" 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 index 01cdb4722..a1e59654f 100644 --- 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 @@ -21,5 +21,7 @@ "%s %d" "Telefonska govornica" "Telefon" + "Omogućena je dozvola za kameru" + "Uputi video poziv" "Pozovi" diff --git a/java/com/android/dialer/theme/res/values-be/strings.xml b/java/com/android/dialer/theme/res/values-be/strings.xml index 49be019bf..881aa7f20 100644 --- a/java/com/android/dialer/theme/res/values-be/strings.xml +++ b/java/com/android/dialer/theme/res/values-be/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Таксафон" "Тэлефон" + "Уключаны дазвол на выкарыстанне камеры" + "Відэавыклік" "Выклікаць" diff --git a/java/com/android/dialer/theme/res/values-bg/strings.xml b/java/com/android/dialer/theme/res/values-bg/strings.xml index 87af9f0fd..debc23803 100644 --- a/java/com/android/dialer/theme/res/values-bg/strings.xml +++ b/java/com/android/dialer/theme/res/values-bg/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Обществен телефон" "Телефон" + "Активирано бе разрешението за камерата" + "Видеообаждане" "Обаждане" diff --git a/java/com/android/dialer/theme/res/values-bn/strings.xml b/java/com/android/dialer/theme/res/values-bn/strings.xml index ab1c65b5d..806ee8e02 100644 --- a/java/com/android/dialer/theme/res/values-bn/strings.xml +++ b/java/com/android/dialer/theme/res/values-bn/strings.xml @@ -21,5 +21,7 @@ "%s %d" "পে ফোন" "ফোন" + "ক্যামেরার অনুমতি সক্ষম করা হয়েছে" + "ভিডিও কল" "কল করুন" diff --git a/java/com/android/dialer/theme/res/values-bs/strings.xml b/java/com/android/dialer/theme/res/values-bs/strings.xml index 01cdb4722..bed71a230 100644 --- a/java/com/android/dialer/theme/res/values-bs/strings.xml +++ b/java/com/android/dialer/theme/res/values-bs/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Telefonska govornica" "Telefon" + "Dozvola za kameru je omogućena" + "Videopoziv" "Pozovi" diff --git a/java/com/android/dialer/theme/res/values-ca/strings.xml b/java/com/android/dialer/theme/res/values-ca/strings.xml index 1e21a1f76..5140ca574 100644 --- a/java/com/android/dialer/theme/res/values-ca/strings.xml +++ b/java/com/android/dialer/theme/res/values-ca/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Telèfon públic" "Telèfon" + "S\'ha activat el permís d\'accés a la càmera" + "Videotrucada" "Truca" diff --git a/java/com/android/dialer/theme/res/values-cs/strings.xml b/java/com/android/dialer/theme/res/values-cs/strings.xml index ca7bad9bb..a951fe7a8 100644 --- a/java/com/android/dialer/theme/res/values-cs/strings.xml +++ b/java/com/android/dialer/theme/res/values-cs/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Telefonní automat" "Telefon" + "Byl povolen přístup k fotoaparátu" + "Zahájit videohovor" "Volat" diff --git a/java/com/android/dialer/theme/res/values-da/strings.xml b/java/com/android/dialer/theme/res/values-da/strings.xml index c606b281e..54f185041 100644 --- a/java/com/android/dialer/theme/res/values-da/strings.xml +++ b/java/com/android/dialer/theme/res/values-da/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Mønttelefon" "Opkald" + "Kameratilladelse er aktiveret" + "Videoopkald" "Ring op" diff --git a/java/com/android/dialer/theme/res/values-de/strings.xml b/java/com/android/dialer/theme/res/values-de/strings.xml index d214287c2..0c97581cb 100644 --- a/java/com/android/dialer/theme/res/values-de/strings.xml +++ b/java/com/android/dialer/theme/res/values-de/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Münztelefon" "Telefon" + "Berechtigung für Kamera aktiviert" + "Videoanruf" "Anrufen" diff --git a/java/com/android/dialer/theme/res/values-el/strings.xml b/java/com/android/dialer/theme/res/values-el/strings.xml index abe1d3f18..1c34a69c7 100644 --- a/java/com/android/dialer/theme/res/values-el/strings.xml +++ b/java/com/android/dialer/theme/res/values-el/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Τηλέφωνο με χρέωση" "Τηλέφωνο" + "Το δικαίωμα χρήσης της κάμερας έχει ενεργοποιηθεί" + "Βιντεοκλήση" "Κλήση" diff --git a/java/com/android/dialer/theme/res/values-en-rAU/strings.xml b/java/com/android/dialer/theme/res/values-en-rAU/strings.xml index b086b4ca5..136d7df33 100644 --- a/java/com/android/dialer/theme/res/values-en-rAU/strings.xml +++ b/java/com/android/dialer/theme/res/values-en-rAU/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Payphone" "Phone" + "Camera permission enabled" + "Video call" "Call" diff --git a/java/com/android/dialer/theme/res/values-en-rGB/strings.xml b/java/com/android/dialer/theme/res/values-en-rGB/strings.xml index b086b4ca5..136d7df33 100644 --- a/java/com/android/dialer/theme/res/values-en-rGB/strings.xml +++ b/java/com/android/dialer/theme/res/values-en-rGB/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Payphone" "Phone" + "Camera permission enabled" + "Video call" "Call" diff --git a/java/com/android/dialer/theme/res/values-en-rIN/strings.xml b/java/com/android/dialer/theme/res/values-en-rIN/strings.xml index b086b4ca5..136d7df33 100644 --- a/java/com/android/dialer/theme/res/values-en-rIN/strings.xml +++ b/java/com/android/dialer/theme/res/values-en-rIN/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Payphone" "Phone" + "Camera permission enabled" + "Video call" "Call" diff --git a/java/com/android/dialer/theme/res/values-es-rUS/strings.xml b/java/com/android/dialer/theme/res/values-es-rUS/strings.xml index aee2d0a9d..90837b76a 100644 --- a/java/com/android/dialer/theme/res/values-es-rUS/strings.xml +++ b/java/com/android/dialer/theme/res/values-es-rUS/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Teléfono público" "Teléfono" + "Se activó el permiso de la cámara" + "Videollamada" "Llamar" diff --git a/java/com/android/dialer/theme/res/values-es/strings.xml b/java/com/android/dialer/theme/res/values-es/strings.xml index 343ac2158..c2d3ee3d4 100644 --- a/java/com/android/dialer/theme/res/values-es/strings.xml +++ b/java/com/android/dialer/theme/res/values-es/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Teléfono público" "Teléfono" + "Se ha habilitado el acceso a la cámara" + "Videollamada" "Llamar" diff --git a/java/com/android/dialer/theme/res/values-et/strings.xml b/java/com/android/dialer/theme/res/values-et/strings.xml index 5b1e6c044..269fa6403 100644 --- a/java/com/android/dialer/theme/res/values-et/strings.xml +++ b/java/com/android/dialer/theme/res/values-et/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Telefoniautomaat" "Telefon" + "Kaameraluba on antud" + "Videokõne" "Helista" diff --git a/java/com/android/dialer/theme/res/values-eu/strings.xml b/java/com/android/dialer/theme/res/values-eu/strings.xml index dbb4f703c..14345f05f 100644 --- a/java/com/android/dialer/theme/res/values-eu/strings.xml +++ b/java/com/android/dialer/theme/res/values-eu/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Telefono publikoa" "Telefonoa" + "Kamera atzitzeko baimena eman da" + "Bideo-deia" "Deitu" diff --git a/java/com/android/dialer/theme/res/values-fa/strings.xml b/java/com/android/dialer/theme/res/values-fa/strings.xml index 99bed5f22..f751f3404 100644 --- a/java/com/android/dialer/theme/res/values-fa/strings.xml +++ b/java/com/android/dialer/theme/res/values-fa/strings.xml @@ -21,5 +21,7 @@ "%d %s" "تلفن عمومی" "تلفن" + "مجوز دوربین فعال شد" + "تماس ویدیویی" "تماس" diff --git a/java/com/android/dialer/theme/res/values-fi/strings.xml b/java/com/android/dialer/theme/res/values-fi/strings.xml index a180be565..0c09d7f43 100644 --- a/java/com/android/dialer/theme/res/values-fi/strings.xml +++ b/java/com/android/dialer/theme/res/values-fi/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Maksupuhelin" "Puhelin" + "Kameran käyttöoikeus myönnettiin" + "Videopuhelu" "Soita" diff --git a/java/com/android/dialer/theme/res/values-fr-rCA/strings.xml b/java/com/android/dialer/theme/res/values-fr-rCA/strings.xml index 18a70bbe8..7d901ca39 100644 --- a/java/com/android/dialer/theme/res/values-fr-rCA/strings.xml +++ b/java/com/android/dialer/theme/res/values-fr-rCA/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Cabine téléphonique" "Téléphone" + "Autorisation d\'accès à l\'appareil photo activée" + "Appel vidéo" "Appeler" diff --git a/java/com/android/dialer/theme/res/values-fr/strings.xml b/java/com/android/dialer/theme/res/values-fr/strings.xml index 18a70bbe8..1c30ef1e7 100644 --- a/java/com/android/dialer/theme/res/values-fr/strings.xml +++ b/java/com/android/dialer/theme/res/values-fr/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Cabine téléphonique" "Téléphone" + "Autorisation d\'accès à l\'appareil photo accordée" + "Appel vidéo" "Appeler" diff --git a/java/com/android/dialer/theme/res/values-gl/strings.xml b/java/com/android/dialer/theme/res/values-gl/strings.xml index fbbad6c07..083d395ad 100644 --- a/java/com/android/dialer/theme/res/values-gl/strings.xml +++ b/java/com/android/dialer/theme/res/values-gl/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Teléfono público" "Teléfono" + "Activouse o permiso de acceso á cámara" + "Videochamada" "Chamar" diff --git a/java/com/android/dialer/theme/res/values-gu/strings.xml b/java/com/android/dialer/theme/res/values-gu/strings.xml index 9b38dcd3f..4baba6971 100644 --- a/java/com/android/dialer/theme/res/values-gu/strings.xml +++ b/java/com/android/dialer/theme/res/values-gu/strings.xml @@ -21,5 +21,7 @@ "%s %d" "પેફોન" "ફોન" + "કૅમેરાની પરવાનગી સક્ષમ કરી" + "વિડિઓ કૉલ" "કૉલ કરો" diff --git a/java/com/android/dialer/theme/res/values-hi/strings.xml b/java/com/android/dialer/theme/res/values-hi/strings.xml index ee360b404..758be5d22 100644 --- a/java/com/android/dialer/theme/res/values-hi/strings.xml +++ b/java/com/android/dialer/theme/res/values-hi/strings.xml @@ -21,5 +21,7 @@ "%s %d" "पे-फ़ोन" "फ़ोन" + "कैमरे की अनुमति सक्षम की गई" + "वीडियो कॉल" "कॉल करें" diff --git a/java/com/android/dialer/theme/res/values-hr/strings.xml b/java/com/android/dialer/theme/res/values-hr/strings.xml index 92e19567d..89a5aeec2 100644 --- a/java/com/android/dialer/theme/res/values-hr/strings.xml +++ b/java/com/android/dialer/theme/res/values-hr/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Javna telefonska govornica" "Telefon" + "Omogućen je pristup kameri" + "Videopoziv" "Pozovi" diff --git a/java/com/android/dialer/theme/res/values-hu/strings.xml b/java/com/android/dialer/theme/res/values-hu/strings.xml index dfcc876e4..30051d430 100644 --- a/java/com/android/dialer/theme/res/values-hu/strings.xml +++ b/java/com/android/dialer/theme/res/values-hu/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Nyilvános telefon" "Telefon" + "Kameraengedély megadva" + "Videohívás" "Hívás" diff --git a/java/com/android/dialer/theme/res/values-hy/strings.xml b/java/com/android/dialer/theme/res/values-hy/strings.xml index 3b4e862b3..6577dab16 100644 --- a/java/com/android/dialer/theme/res/values-hy/strings.xml +++ b/java/com/android/dialer/theme/res/values-hy/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Բջջային տերմինալ" "Հեռախոս" + "Տեսախցիկից օգտվելու թույլտվությունը տրամադրված է" + "Տեսազանգ" "Զանգել" diff --git a/java/com/android/dialer/theme/res/values-in/strings.xml b/java/com/android/dialer/theme/res/values-in/strings.xml index eda15a299..d2d72b832 100644 --- a/java/com/android/dialer/theme/res/values-in/strings.xml +++ b/java/com/android/dialer/theme/res/values-in/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Telepon Umum" "Telepon" + "Izin kamera diaktifkan" + "Video call" "Telepon" diff --git a/java/com/android/dialer/theme/res/values-is/strings.xml b/java/com/android/dialer/theme/res/values-is/strings.xml index cda7fc8fe..ff3faf836 100644 --- a/java/com/android/dialer/theme/res/values-is/strings.xml +++ b/java/com/android/dialer/theme/res/values-is/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Símasjálfsali" "Sími" + "Myndavélarheimild virk" + "Hringja myndsímtal" "Hringja" diff --git a/java/com/android/dialer/theme/res/values-it/strings.xml b/java/com/android/dialer/theme/res/values-it/strings.xml index fa2caa6bb..4b26288ac 100644 --- a/java/com/android/dialer/theme/res/values-it/strings.xml +++ b/java/com/android/dialer/theme/res/values-it/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Cabina telefonica" "Telefono" + "Autorizzazioni della fotocamera attivate" + "Videochiamata" "Chiama" diff --git a/java/com/android/dialer/theme/res/values-iw/strings.xml b/java/com/android/dialer/theme/res/values-iw/strings.xml index 18d87eaf7..09abf2ed1 100644 --- a/java/com/android/dialer/theme/res/values-iw/strings.xml +++ b/java/com/android/dialer/theme/res/values-iw/strings.xml @@ -21,5 +21,7 @@ "%s %d" "טלפון ציבורי" "טלפון" + "הרשאת הגישה למצלמה הופעלה" + "שיחת וידאו" "התקשר" diff --git a/java/com/android/dialer/theme/res/values-ja/strings.xml b/java/com/android/dialer/theme/res/values-ja/strings.xml index 39215598c..551d67983 100644 --- a/java/com/android/dialer/theme/res/values-ja/strings.xml +++ b/java/com/android/dialer/theme/res/values-ja/strings.xml @@ -21,5 +21,7 @@ "%s%d)" "公衆電話" "電話" + "カメラへのアクセスを自動で許可しました" + "ビデオハングアウト" "発信" diff --git a/java/com/android/dialer/theme/res/values-ka/strings.xml b/java/com/android/dialer/theme/res/values-ka/strings.xml index 18e7cb34d..ab225954e 100644 --- a/java/com/android/dialer/theme/res/values-ka/strings.xml +++ b/java/com/android/dialer/theme/res/values-ka/strings.xml @@ -21,5 +21,7 @@ "%s %d" "გადახდის ტელეფონი" "ტელეფონი" + "კამერაზე წვდომის ნებართვა ჩართულია" + "ვიდეოზარი" "დარეკვა" diff --git a/java/com/android/dialer/theme/res/values-kk/strings.xml b/java/com/android/dialer/theme/res/values-kk/strings.xml index f9c62d32e..d3a1b7bb9 100644 --- a/java/com/android/dialer/theme/res/values-kk/strings.xml +++ b/java/com/android/dialer/theme/res/values-kk/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Автомат-телефон" "Телефон" + "Камера рұқсаты қосылды" + "Бейне қоңырау" "Қоңырау шалу" diff --git a/java/com/android/dialer/theme/res/values-km/strings.xml b/java/com/android/dialer/theme/res/values-km/strings.xml index 7e375cf99..900f1d690 100644 --- a/java/com/android/dialer/theme/res/values-km/strings.xml +++ b/java/com/android/dialer/theme/res/values-km/strings.xml @@ -21,5 +21,7 @@ "%s %d" "ទូរស័ព្ទសាធារណៈ" "ទូរស័ព្ទ" + "បានបើក​ការអនុញ្ញាត​កាមេរ៉ា" + "ការ​ហៅវីដេអូ" "ហៅ​ទូរសព្ទ" diff --git a/java/com/android/dialer/theme/res/values-kn/strings.xml b/java/com/android/dialer/theme/res/values-kn/strings.xml index 718fea0d4..ab9f816db 100644 --- a/java/com/android/dialer/theme/res/values-kn/strings.xml +++ b/java/com/android/dialer/theme/res/values-kn/strings.xml @@ -21,5 +21,7 @@ "%s %d" "ಪೇಫೋನ್" "ಫೋನ್" + "ಕ್ಯಾಮರಾ ಅನುಮತಿಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ" + "ವೀಡಿಯೊ ಕರೆ" "ಕರೆಮಾಡಿ" diff --git a/java/com/android/dialer/theme/res/values-ko/strings.xml b/java/com/android/dialer/theme/res/values-ko/strings.xml index 29f608c6e..b5ac55695 100644 --- a/java/com/android/dialer/theme/res/values-ko/strings.xml +++ b/java/com/android/dialer/theme/res/values-ko/strings.xml @@ -21,5 +21,7 @@ "%s %d" "공중전화" "휴대전화" + "카메라 권한 사용 가능" + "화상 통화" "전화" diff --git a/java/com/android/dialer/theme/res/values-ky/strings.xml b/java/com/android/dialer/theme/res/values-ky/strings.xml index 905b8c5ff..0a9bec294 100644 --- a/java/com/android/dialer/theme/res/values-ky/strings.xml +++ b/java/com/android/dialer/theme/res/values-ky/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Таксофон" "Телефон" + "Камеранын уруксаты иштетилди" + "Видео чалуу" "Чалуу" diff --git a/java/com/android/dialer/theme/res/values-lo/strings.xml b/java/com/android/dialer/theme/res/values-lo/strings.xml index 6826a753f..d33d43e5b 100644 --- a/java/com/android/dialer/theme/res/values-lo/strings.xml +++ b/java/com/android/dialer/theme/res/values-lo/strings.xml @@ -21,5 +21,7 @@ "%s %d" "ຕູ້​ໂທ​ລະ​ສັບ​ສາ​ທາ​ລະ​ນະ" "ໂທລະສັບ" + "ເປີດໃຊ້ສິດອະນຸຍາດກ້ອງຖ່າຍຮູບແລ້ວ" + "ໂທວິດີໂອ" "ໂທ" diff --git a/java/com/android/dialer/theme/res/values-lt/strings.xml b/java/com/android/dialer/theme/res/values-lt/strings.xml index 43469a1fd..fdf31e227 100644 --- a/java/com/android/dialer/theme/res/values-lt/strings.xml +++ b/java/com/android/dialer/theme/res/values-lt/strings.xml @@ -21,5 +21,7 @@ "%d %s" "Taksofonas" "Telefonas" + "Fotoaparato leidimas įgalintas" + "Vaizdo skambutis" "Skambinti" diff --git a/java/com/android/dialer/theme/res/values-lv/strings.xml b/java/com/android/dialer/theme/res/values-lv/strings.xml index f9a6deca8..031c5bdea 100644 --- a/java/com/android/dialer/theme/res/values-lv/strings.xml +++ b/java/com/android/dialer/theme/res/values-lv/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Maksas tālrunis" "Tālrunis" + "Kameras atļauja iespējota" + "Videozvans" "Zvanīt" diff --git a/java/com/android/dialer/theme/res/values-mk/strings.xml b/java/com/android/dialer/theme/res/values-mk/strings.xml index 1328edbb2..d89d12e90 100644 --- a/java/com/android/dialer/theme/res/values-mk/strings.xml +++ b/java/com/android/dialer/theme/res/values-mk/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Говорница" "Телефон" + "Дозволата за камера е овозможена" + "Воспоставете видеоповик" "Повикајте" diff --git a/java/com/android/dialer/theme/res/values-ml/strings.xml b/java/com/android/dialer/theme/res/values-ml/strings.xml index 03f9533ff..f02ceeb06 100644 --- a/java/com/android/dialer/theme/res/values-ml/strings.xml +++ b/java/com/android/dialer/theme/res/values-ml/strings.xml @@ -21,5 +21,7 @@ "%s %d" "പണം നൽകി ഉപയോഗിക്കുന്ന ഫോൺ" "ഫോണ്‍" + "ക്യാമറ അനുമതി നൽകി" + "വീഡിയോ കോള്‍" "വിളിക്കുക" diff --git a/java/com/android/dialer/theme/res/values-mn/strings.xml b/java/com/android/dialer/theme/res/values-mn/strings.xml index c47f08324..7a07e5d4d 100644 --- a/java/com/android/dialer/theme/res/values-mn/strings.xml +++ b/java/com/android/dialer/theme/res/values-mn/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Payphone" "Утас" + "Камерын зөвшөөрөл идэвхжсэн" + "Видео дуудлага" "Залгах" diff --git a/java/com/android/dialer/theme/res/values-mr/strings.xml b/java/com/android/dialer/theme/res/values-mr/strings.xml index 41a9c96e0..eeb9afa1e 100644 --- a/java/com/android/dialer/theme/res/values-mr/strings.xml +++ b/java/com/android/dialer/theme/res/values-mr/strings.xml @@ -21,5 +21,7 @@ "%s %d" "सार्वजनिक फोन" "फोन" + "कॅमेरा परवानगी सक्षम केली" + "व्हिडिओ कॉल" "कॉल करा" diff --git a/java/com/android/dialer/theme/res/values-ms/strings.xml b/java/com/android/dialer/theme/res/values-ms/strings.xml index b28fe26ac..2e424fdf7 100644 --- a/java/com/android/dialer/theme/res/values-ms/strings.xml +++ b/java/com/android/dialer/theme/res/values-ms/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Telefon Awam" "Telefon" + "Kebenaran kamera didayakan" + "Panggilan video" "Panggil" diff --git a/java/com/android/dialer/theme/res/values-my/strings.xml b/java/com/android/dialer/theme/res/values-my/strings.xml index eb21b6ef2..97b871b30 100644 --- a/java/com/android/dialer/theme/res/values-my/strings.xml +++ b/java/com/android/dialer/theme/res/values-my/strings.xml @@ -21,5 +21,7 @@ "%s %d" "ငွေပေးရသည့်ဖုန်း" "ဖုန်း" + "ကင်မရာအသုံးပြုခွင့် ဖွင့်ထားပါသည်" + "ဗီဒီယိုခေါ်ဆိုမှု" "ခေါ်ဆိုရန်" diff --git a/java/com/android/dialer/theme/res/values-nb/strings.xml b/java/com/android/dialer/theme/res/values-nb/strings.xml index dcd9b17ad..7587b7e30 100644 --- a/java/com/android/dialer/theme/res/values-nb/strings.xml +++ b/java/com/android/dialer/theme/res/values-nb/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Telefonkiosk" "Telefon" + "Kameratillatelsen er aktivert" + "Videosamtale" "Ring" diff --git a/java/com/android/dialer/theme/res/values-ne/strings.xml b/java/com/android/dialer/theme/res/values-ne/strings.xml index 383ac2c8d..af1ad5e24 100644 --- a/java/com/android/dialer/theme/res/values-ne/strings.xml +++ b/java/com/android/dialer/theme/res/values-ne/strings.xml @@ -21,5 +21,7 @@ "%s %d" "पेफोन" "फोन" + "क्यामेरा सम्बन्धी अनुमतिहरूलाई सक्षम पारियो" + "भिडियो कल" "कल गर्नुहोस्" diff --git a/java/com/android/dialer/theme/res/values-nl/strings.xml b/java/com/android/dialer/theme/res/values-nl/strings.xml index 96357081d..ab51c97ae 100644 --- a/java/com/android/dialer/theme/res/values-nl/strings.xml +++ b/java/com/android/dialer/theme/res/values-nl/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Telefooncel" "Telefoon" + "Camerarechten ingeschakeld" + "Videogesprek" "Bellen" diff --git a/java/com/android/dialer/theme/res/values-no/strings.xml b/java/com/android/dialer/theme/res/values-no/strings.xml index dcd9b17ad..7587b7e30 100644 --- a/java/com/android/dialer/theme/res/values-no/strings.xml +++ b/java/com/android/dialer/theme/res/values-no/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Telefonkiosk" "Telefon" + "Kameratillatelsen er aktivert" + "Videosamtale" "Ring" diff --git a/java/com/android/dialer/theme/res/values-pa/strings.xml b/java/com/android/dialer/theme/res/values-pa/strings.xml index dc23b7a69..8784bcae1 100644 --- a/java/com/android/dialer/theme/res/values-pa/strings.xml +++ b/java/com/android/dialer/theme/res/values-pa/strings.xml @@ -21,5 +21,7 @@ "%s %d" "ਪੇਫੋਨ" "ਫੋਨ" + "ਕੈਮਰਾ ਇਜਾਜ਼ਤ ਨੂੰ ਯੋਗ ਬਣਾਇਆ ਗਿਆ ਹੈ" + "ਵੀਡੀਓ ਕਾਲ" "ਕਾਲ ਕਰੋ" diff --git a/java/com/android/dialer/theme/res/values-pl/strings.xml b/java/com/android/dialer/theme/res/values-pl/strings.xml index 1ebaad2cc..246261e97 100644 --- a/java/com/android/dialer/theme/res/values-pl/strings.xml +++ b/java/com/android/dialer/theme/res/values-pl/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Automat telefoniczny" "Telefon" + "Uprawnienia do korzystania z aparatu zostały włączone" + "Rozmowa wideo" "Zadzwoń" diff --git a/java/com/android/dialer/theme/res/values-pt-rBR/strings.xml b/java/com/android/dialer/theme/res/values-pt-rBR/strings.xml index 6caf87cb8..c1356d9b3 100644 --- a/java/com/android/dialer/theme/res/values-pt-rBR/strings.xml +++ b/java/com/android/dialer/theme/res/values-pt-rBR/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Telefone público" "Telefone" + "Permissão de câmera ativada" + "Videochamada" "Ligar" diff --git a/java/com/android/dialer/theme/res/values-pt-rPT/strings.xml b/java/com/android/dialer/theme/res/values-pt-rPT/strings.xml index ef7c7d6c6..2b46e44a1 100644 --- a/java/com/android/dialer/theme/res/values-pt-rPT/strings.xml +++ b/java/com/android/dialer/theme/res/values-pt-rPT/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Telefone público" "Telefone" + "Autorização da câmara ativada" + "Videochamada" "Telefonar" diff --git a/java/com/android/dialer/theme/res/values-pt/strings.xml b/java/com/android/dialer/theme/res/values-pt/strings.xml index 6caf87cb8..c1356d9b3 100644 --- a/java/com/android/dialer/theme/res/values-pt/strings.xml +++ b/java/com/android/dialer/theme/res/values-pt/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Telefone público" "Telefone" + "Permissão de câmera ativada" + "Videochamada" "Ligar" diff --git a/java/com/android/dialer/theme/res/values-ro/strings.xml b/java/com/android/dialer/theme/res/values-ro/strings.xml index 4d0c09baf..8978e9240 100644 --- a/java/com/android/dialer/theme/res/values-ro/strings.xml +++ b/java/com/android/dialer/theme/res/values-ro/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Telefon public" "Telefon" + "Permisiunea pentru cameră a fost activată." + "Apel video" "Apelați" diff --git a/java/com/android/dialer/theme/res/values-ru/strings.xml b/java/com/android/dialer/theme/res/values-ru/strings.xml index aeab13624..a155052be 100644 --- a/java/com/android/dialer/theme/res/values-ru/strings.xml +++ b/java/com/android/dialer/theme/res/values-ru/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Телефон-автомат" "Телефон" + "Доступ к камере разрешен" + "Видеовызов" "Позвонить" diff --git a/java/com/android/dialer/theme/res/values-si/strings.xml b/java/com/android/dialer/theme/res/values-si/strings.xml index ba3bb0577..424a11255 100644 --- a/java/com/android/dialer/theme/res/values-si/strings.xml +++ b/java/com/android/dialer/theme/res/values-si/strings.xml @@ -21,5 +21,7 @@ "%s %d" "පේෆෝනය" "දුරකථනය" + "කැමරා අවසර සබල කර ඇත" + "වීඩියෝ ඇමතුම" "ඇමතුම" diff --git a/java/com/android/dialer/theme/res/values-sk/strings.xml b/java/com/android/dialer/theme/res/values-sk/strings.xml index 6863463ae..411b85edc 100644 --- a/java/com/android/dialer/theme/res/values-sk/strings.xml +++ b/java/com/android/dialer/theme/res/values-sk/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Telefónny automat" "Telefón" + "Povolenie pre fotoaparát je aktivované" + "Videohovor" "Volať" diff --git a/java/com/android/dialer/theme/res/values-sl/strings.xml b/java/com/android/dialer/theme/res/values-sl/strings.xml index 1b1776abc..85a3e2b8e 100644 --- a/java/com/android/dialer/theme/res/values-sl/strings.xml +++ b/java/com/android/dialer/theme/res/values-sl/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Telefonska govorilnica" "Telefon" + "Dovoljenje za dostop do fotoaparata je omogočeno" + "Videoklic" "Pokliči" diff --git a/java/com/android/dialer/theme/res/values-sq/strings.xml b/java/com/android/dialer/theme/res/values-sq/strings.xml index 0d7084af6..5cbd587d3 100644 --- a/java/com/android/dialer/theme/res/values-sq/strings.xml +++ b/java/com/android/dialer/theme/res/values-sq/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Telefon me pagesë" "Telefoni" + "Leja e kamerës është aktivizuar" + "Telefonatë me video" "Telefono" diff --git a/java/com/android/dialer/theme/res/values-sr/strings.xml b/java/com/android/dialer/theme/res/values-sr/strings.xml index a744e9530..310da735d 100644 --- a/java/com/android/dialer/theme/res/values-sr/strings.xml +++ b/java/com/android/dialer/theme/res/values-sr/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Телефонска говорница" "Телефон" + "Омогућена је дозвола за камеру" + "Упути видео позив" "Позови" diff --git a/java/com/android/dialer/theme/res/values-sv/strings.xml b/java/com/android/dialer/theme/res/values-sv/strings.xml index f409807ef..af8e5f7b1 100644 --- a/java/com/android/dialer/theme/res/values-sv/strings.xml +++ b/java/com/android/dialer/theme/res/values-sv/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Telefonautomat" "Telefon" + "Kamerabehörighet har aktiverats" + "Videosamtal" "Ring" diff --git a/java/com/android/dialer/theme/res/values-sw/strings.xml b/java/com/android/dialer/theme/res/values-sw/strings.xml index a2f98888d..31615febb 100644 --- a/java/com/android/dialer/theme/res/values-sw/strings.xml +++ b/java/com/android/dialer/theme/res/values-sw/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Simu ya kulipia" "Simu" + "Imewasha ruhusa ya kamera" + "Simu ya video" "Piga simu" diff --git a/java/com/android/dialer/theme/res/values-ta/strings.xml b/java/com/android/dialer/theme/res/values-ta/strings.xml index a4f55f5c7..ab15f0b0c 100644 --- a/java/com/android/dialer/theme/res/values-ta/strings.xml +++ b/java/com/android/dialer/theme/res/values-ta/strings.xml @@ -21,5 +21,7 @@ "%s %d" "கட்டணத் தொலைபேசி" "மொபைல்" + "கேமராவிற்கான அனுமதி இயக்கப்பட்டது" + "வீடியோ அழைப்பு" "அழை" diff --git a/java/com/android/dialer/theme/res/values-te/strings.xml b/java/com/android/dialer/theme/res/values-te/strings.xml index 59f00ca1f..4a6fca1fb 100644 --- a/java/com/android/dialer/theme/res/values-te/strings.xml +++ b/java/com/android/dialer/theme/res/values-te/strings.xml @@ -21,5 +21,7 @@ "%s %d" "పే ఫోన్" "ఫోన్" + "కెమెరా అనుమతిని ప్రారంభించాము" + "వీడియో కాల్" "కాల్ చేయి" diff --git a/java/com/android/dialer/theme/res/values-th/strings.xml b/java/com/android/dialer/theme/res/values-th/strings.xml index 3870b4da6..51db053fa 100644 --- a/java/com/android/dialer/theme/res/values-th/strings.xml +++ b/java/com/android/dialer/theme/res/values-th/strings.xml @@ -21,5 +21,7 @@ "%s %d" "โทรศัพท์สาธารณะ" "โทรศัพท์" + "ให้สิทธิ์เข้าถึงกล้องถ่ายรูปแล้ว" + "แฮงเอาท์วิดีโอ" "โทร" diff --git a/java/com/android/dialer/theme/res/values-tl/strings.xml b/java/com/android/dialer/theme/res/values-tl/strings.xml index 81692789f..97f69ec1c 100644 --- a/java/com/android/dialer/theme/res/values-tl/strings.xml +++ b/java/com/android/dialer/theme/res/values-tl/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Payphone" "Telepono" + "Na-enable ang pahintulot sa camera" + "Mag-video call" "Tawag" diff --git a/java/com/android/dialer/theme/res/values-tr/strings.xml b/java/com/android/dialer/theme/res/values-tr/strings.xml index c11cd1375..b38f0674d 100644 --- a/java/com/android/dialer/theme/res/values-tr/strings.xml +++ b/java/com/android/dialer/theme/res/values-tr/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Ankesörlü telefon" "Telefon" + "Kamera izni etkinleştirildi" + "Görüntülü görüşme" "Telefon et" diff --git a/java/com/android/dialer/theme/res/values-uk/strings.xml b/java/com/android/dialer/theme/res/values-uk/strings.xml index c87fe89b7..f0702770a 100644 --- a/java/com/android/dialer/theme/res/values-uk/strings.xml +++ b/java/com/android/dialer/theme/res/values-uk/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Таксофон" "Телефон" + "Камері надано дозвіл" + "Відеодзвінок" "Виклик" diff --git a/java/com/android/dialer/theme/res/values-ur/strings.xml b/java/com/android/dialer/theme/res/values-ur/strings.xml index abc0d6d6b..e9a4b44bb 100644 --- a/java/com/android/dialer/theme/res/values-ur/strings.xml +++ b/java/com/android/dialer/theme/res/values-ur/strings.xml @@ -21,5 +21,7 @@ "%s %d" "پے فون" "فون" + "کیمرا کی اجازت فعال ہے" + "ویڈیو کال" "کال کریں" diff --git a/java/com/android/dialer/theme/res/values-uz/strings.xml b/java/com/android/dialer/theme/res/values-uz/strings.xml index 2889f3f12..2bbaf2080 100644 --- a/java/com/android/dialer/theme/res/values-uz/strings.xml +++ b/java/com/android/dialer/theme/res/values-uz/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Taksofon" "Telefon" + "Kameraga kirishga ruxsat berildi" + "Video suhbat" "Chaqirish" diff --git a/java/com/android/dialer/theme/res/values-vi/strings.xml b/java/com/android/dialer/theme/res/values-vi/strings.xml index b014516be..fae318091 100644 --- a/java/com/android/dialer/theme/res/values-vi/strings.xml +++ b/java/com/android/dialer/theme/res/values-vi/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Điện thoại công cộng" "Điện thoại" + "Đã bật quyền sử dụng máy ảnh" + "Gọi điện video" "Gọi" diff --git a/java/com/android/dialer/theme/res/values-zh-rCN/strings.xml b/java/com/android/dialer/theme/res/values-zh-rCN/strings.xml index baff75258..2e6096296 100644 --- a/java/com/android/dialer/theme/res/values-zh-rCN/strings.xml +++ b/java/com/android/dialer/theme/res/values-zh-rCN/strings.xml @@ -21,5 +21,7 @@ "%s %d" "公用电话" "电话" + "已启用相机使用权限" + "视频通话" "拨打电话" diff --git a/java/com/android/dialer/theme/res/values-zh-rHK/strings.xml b/java/com/android/dialer/theme/res/values-zh-rHK/strings.xml index 8b26663d1..7b08024ac 100644 --- a/java/com/android/dialer/theme/res/values-zh-rHK/strings.xml +++ b/java/com/android/dialer/theme/res/values-zh-rHK/strings.xml @@ -21,5 +21,7 @@ "%s %d" "公共電話" "電話" + "已啟用相機權限" + "視像通話" "通話" diff --git a/java/com/android/dialer/theme/res/values-zh-rTW/strings.xml b/java/com/android/dialer/theme/res/values-zh-rTW/strings.xml index 24a5c10d1..57d7fe2b1 100644 --- a/java/com/android/dialer/theme/res/values-zh-rTW/strings.xml +++ b/java/com/android/dialer/theme/res/values-zh-rTW/strings.xml @@ -21,5 +21,7 @@ "%s %d" "公用電話" "電話" + "已啟用相機權限" + "視訊通話" "撥號" diff --git a/java/com/android/dialer/theme/res/values-zu/strings.xml b/java/com/android/dialer/theme/res/values-zu/strings.xml index 96cd79873..d0dd7288b 100644 --- a/java/com/android/dialer/theme/res/values-zu/strings.xml +++ b/java/com/android/dialer/theme/res/values-zu/strings.xml @@ -21,5 +21,7 @@ "%s %d" "Ucingo olufakwa imali" "Ifoni" + "Imvume yekhamera inikwe amandla" + "Ikholi yevidiyo" "Shaya" diff --git a/java/com/android/dialer/theme/res/values/strings.xml b/java/com/android/dialer/theme/res/values/strings.xml index a14693f51..af61d3596 100644 --- a/java/com/android/dialer/theme/res/values/strings.xml +++ b/java/com/android/dialer/theme/res/values/strings.xml @@ -30,6 +30,12 @@ used in the Launcher icon. --> Phone + + Camera permission enabled + + + Video call + Call diff --git a/java/com/android/dialer/theme/res/values/themes.xml b/java/com/android/dialer/theme/res/values/themes.xml index 0d0c45f90..124682692 100644 --- a/java/com/android/dialer/theme/res/values/themes.xml +++ b/java/com/android/dialer/theme/res/values/themes.xml @@ -1,4 +1,19 @@ + + + + + + + + diff --git a/java/com/android/dialer/util/CallUtil.java b/java/com/android/dialer/util/CallUtil.java index 81a4bb21e..0afe930c9 100644 --- a/java/com/android/dialer/util/CallUtil.java +++ b/java/com/android/dialer/util/CallUtil.java @@ -21,6 +21,7 @@ import android.net.Uri; import android.telecom.PhoneAccount; import android.telecom.PhoneAccountHandle; import android.telecom.TelecomManager; +import com.android.dialer.common.LogUtil; import com.android.dialer.compat.CompatUtils; import com.android.dialer.phonenumberutil.PhoneNumberHelper; import java.util.List; @@ -40,6 +41,9 @@ public class CallUtil { */ public static final int VIDEO_CALLING_PRESENCE = 2; + private static boolean hasInitializedIsVideoEnabledState; + private static boolean cachedIsVideoEnabledState; + /** Return Uri with an appropriate scheme, accepting both SIP and usual phone call numbers. */ public static Uri getCallUri(String number) { if (PhoneNumberHelper.isUriNumber(number)) { @@ -102,7 +106,23 @@ public class CallUtil { * false} otherwise. */ public static boolean isVideoEnabled(Context context) { - return (getVideoCallingAvailability(context) & VIDEO_CALLING_ENABLED) != 0; + boolean isVideoEnabled = (getVideoCallingAvailability(context) & VIDEO_CALLING_ENABLED) != 0; + + // Log everytime the video enabled state changes. + if (!hasInitializedIsVideoEnabledState) { + LogUtil.i("CallUtil.isVideoEnabled", "isVideoEnabled: " + isVideoEnabled); + hasInitializedIsVideoEnabledState = true; + cachedIsVideoEnabledState = isVideoEnabled; + } else if (cachedIsVideoEnabledState != isVideoEnabled) { + LogUtil.i( + "CallUtil.isVideoEnabled", + "isVideoEnabled changed from %b to %b", + cachedIsVideoEnabledState, + isVideoEnabled); + cachedIsVideoEnabledState = isVideoEnabled; + } + + return isVideoEnabled; } /** diff --git a/java/com/android/dialer/util/PermissionsUtil.java b/java/com/android/dialer/util/PermissionsUtil.java index 466e86204..34828317d 100644 --- a/java/com/android/dialer/util/PermissionsUtil.java +++ b/java/com/android/dialer/util/PermissionsUtil.java @@ -16,15 +16,33 @@ package com.android.dialer.util; +import static android.Manifest.permission.ACCESS_COARSE_LOCATION; +import static android.Manifest.permission.ACCESS_FINE_LOCATION; +import static android.Manifest.permission.ADD_VOICEMAIL; +import static android.Manifest.permission.CALL_PHONE; +import static android.Manifest.permission.MODIFY_PHONE_STATE; +import static android.Manifest.permission.READ_CALL_LOG; +import static android.Manifest.permission.READ_CONTACTS; +import static android.Manifest.permission.READ_PHONE_STATE; +import static android.Manifest.permission.READ_VOICEMAIL; +import static android.Manifest.permission.WRITE_CALL_LOG; +import static android.Manifest.permission.WRITE_CONTACTS; +import static android.Manifest.permission.WRITE_VOICEMAIL; + import android.Manifest.permission; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; +import android.support.annotation.NonNull; import android.support.v4.content.ContextCompat; import android.support.v4.content.LocalBroadcastManager; import com.android.dialer.common.LogUtil; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; /** Utility class to help with runtime permissions. */ public class PermissionsUtil { @@ -32,6 +50,27 @@ public class PermissionsUtil { private static final String PERMISSION_PREFERENCE = "dialer_permissions"; private static final String CEQUINT_PERMISSION = "com.cequint.ecid.CALLER_ID_LOOKUP"; + // Permissions list retrieved from application manifest. + // Starting in Android O Permissions must be explicitly enumerated: + // https://developer.android.com/preview/behavior-changes.html#rmp + public static final List allPhoneGroupPermissionsUsedInDialer = + Collections.unmodifiableList( + Arrays.asList( + READ_CALL_LOG, + WRITE_CALL_LOG, + READ_PHONE_STATE, + MODIFY_PHONE_STATE, + CALL_PHONE, + ADD_VOICEMAIL, + WRITE_VOICEMAIL, + READ_VOICEMAIL)); + + public static final List allContactsGroupPermissionsUsedInDialer = + Collections.unmodifiableList(Arrays.asList(READ_CONTACTS, WRITE_CONTACTS)); + + public static final List allLocationGroupPermissionsUsedInDialer = + Collections.unmodifiableList(Arrays.asList(ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION)); + public static boolean hasPhonePermissions(Context context) { return hasPermission(context, permission.CALL_PHONE); } @@ -147,4 +186,25 @@ public class PermissionsUtil { final Intent intent = new Intent(permission); LocalBroadcastManager.getInstance(context).sendBroadcast(intent); } + + /** + * Returns a list of permissions currently not granted to the application from the supplied list. + * + * @param context - The Application context. + * @param permissionsList - A list of permissions to check if the current application has been + * granted. + * @return An array of permissions that are currently DENIED to the application; a subset of + * permissionsList. + */ + @NonNull + public static String[] getPermissionsCurrentlyDenied( + @NonNull Context context, @NonNull List permissionsList) { + List permissionsCurrentlyDenied = new ArrayList<>(); + for (String permission : permissionsList) { + if (!hasPermission(context, permission)) { + permissionsCurrentlyDenied.add(permission); + } + } + return permissionsCurrentlyDenied.toArray(new String[permissionsCurrentlyDenied.size()]); + } } diff --git a/java/com/android/dialer/widget/DialerToolbar.java b/java/com/android/dialer/widget/DialerToolbar.java index 9e1058383..fe0e86110 100644 --- a/java/com/android/dialer/widget/DialerToolbar.java +++ b/java/com/android/dialer/widget/DialerToolbar.java @@ -41,6 +41,11 @@ public class DialerToolbar extends Toolbar { setNavigationIcon(R.drawable.quantum_ic_close_white_24); setNavigationContentDescription(R.string.toolbar_close); setNavigationOnClickListener(v -> ((Activity) context).finish()); + setPaddingRelative( + getPaddingStart(), + getPaddingTop(), + getResources().getDimensionPixelSize(R.dimen.toolbar_end_padding), + getPaddingBottom()); } @Override diff --git a/java/com/android/dialer/widget/EmptyContentView.java b/java/com/android/dialer/widget/EmptyContentView.java new file mode 100644 index 000000000..a76ab98d6 --- /dev/null +++ b/java/com/android/dialer/widget/EmptyContentView.java @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2015 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.widget; + +import android.content.Context; +import android.support.annotation.StringRes; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +public class EmptyContentView extends LinearLayout implements View.OnClickListener { + + /** Listener to call when action button is clicked. */ + public interface OnEmptyViewActionButtonClickedListener { + void onEmptyViewActionButtonClicked(); + } + + public static final int NO_LABEL = 0; + public static final int NO_IMAGE = 0; + + private ImageView mImageView; + private TextView mDescriptionView; + private TextView mActionView; + private OnEmptyViewActionButtonClickedListener mOnActionButtonClickedListener; + + private @StringRes int actionLabel; + + public EmptyContentView(Context context) { + this(context, null); + } + + public EmptyContentView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public EmptyContentView(Context context, AttributeSet attrs, int defStyleAttr) { + this(context, attrs, defStyleAttr, 0); + } + + public EmptyContentView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + inflateLayout(); + + // Don't let touches fall through the empty view. + setClickable(true); + mImageView = (ImageView) findViewById(R.id.empty_list_view_image); + mDescriptionView = (TextView) findViewById(R.id.empty_list_view_message); + mActionView = (TextView) findViewById(R.id.empty_list_view_action); + mActionView.setOnClickListener(this); + } + + public void setDescription(int resourceId) { + if (resourceId == NO_LABEL) { + mDescriptionView.setText(null); + mDescriptionView.setVisibility(View.GONE); + } else { + mDescriptionView.setText(resourceId); + mDescriptionView.setVisibility(View.VISIBLE); + } + } + + public void setImage(int resourceId) { + if (resourceId == NO_LABEL) { + mImageView.setImageDrawable(null); + mImageView.setVisibility(View.GONE); + } else { + mImageView.setImageResource(resourceId); + mImageView.setVisibility(View.VISIBLE); + } + } + + public void setActionLabel(@StringRes int resourceId) { + actionLabel = resourceId; + if (resourceId == NO_LABEL) { + mActionView.setText(null); + mActionView.setVisibility(View.GONE); + } else { + mActionView.setText(resourceId); + mActionView.setVisibility(View.VISIBLE); + } + } + + public @StringRes int getActionLabel() { + return actionLabel; + } + + public boolean isShowingContent() { + return mImageView.getVisibility() == View.VISIBLE + || mDescriptionView.getVisibility() == View.VISIBLE + || mActionView.getVisibility() == View.VISIBLE; + } + + public void setActionClickedListener(OnEmptyViewActionButtonClickedListener listener) { + mOnActionButtonClickedListener = listener; + } + + @Override + public void onClick(View v) { + if (mOnActionButtonClickedListener != null) { + mOnActionButtonClickedListener.onEmptyViewActionButtonClicked(); + } + } + + protected void inflateLayout() { + setOrientation(LinearLayout.VERTICAL); + final LayoutInflater inflater = + (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); + inflater.inflate(R.layout.empty_content_view, this); + } +} diff --git a/java/com/android/dialer/widget/LockableViewPager.java b/java/com/android/dialer/widget/LockableViewPager.java new file mode 100644 index 000000000..b5d4022e7 --- /dev/null +++ b/java/com/android/dialer/widget/LockableViewPager.java @@ -0,0 +1,50 @@ +/* + * 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.widget; + +import android.content.Context; +import android.support.v4.view.ViewPager; +import android.util.AttributeSet; +import android.view.MotionEvent; + +/** {@link ViewPager} useful for disabled swiping between pages. */ +public class LockableViewPager extends ViewPager { + + private boolean swipingLocked; + + public LockableViewPager(Context context, AttributeSet attributeSet) { + super(context, attributeSet); + } + + public void setSwipingLocked(boolean swipingLocked) { + this.swipingLocked = swipingLocked; + } + + public boolean isSwipingLocked() { + return swipingLocked; + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent motionEvent) { + return !swipingLocked && super.onInterceptTouchEvent(motionEvent); + } + + @Override + public boolean onTouchEvent(MotionEvent motionEvent) { + return !swipingLocked && super.onTouchEvent(motionEvent); + } +} diff --git a/java/com/android/dialer/widget/MessageFragment.java b/java/com/android/dialer/widget/MessageFragment.java index b136f47eb..615ad3b77 100644 --- a/java/com/android/dialer/widget/MessageFragment.java +++ b/java/com/android/dialer/widget/MessageFragment.java @@ -23,6 +23,7 @@ import android.text.Editable; import android.text.InputFilter; import android.text.TextUtils; import android.text.TextWatcher; +import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; @@ -31,11 +32,13 @@ import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; +import android.widget.TextView.OnEditorActionListener; import com.android.dialer.common.Assert; import com.android.dialer.common.FragmentUtils; /** Fragment used to compose call with message fragment. */ -public class MessageFragment extends Fragment implements OnClickListener, TextWatcher { +public class MessageFragment extends Fragment + implements OnClickListener, TextWatcher, OnEditorActionListener { private static final String CHAR_LIMIT_KEY = "char_limit"; private static final String SHOW_SEND_ICON_KEY = "show_send_icon"; private static final String MESSAGE_LIST_KEY = "message_list"; @@ -69,7 +72,7 @@ public class MessageFragment extends Fragment implements OnClickListener, TextWa LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_message, container, false); - sendMessage = (ImageView) view.findViewById(R.id.send_message); + sendMessage = 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); @@ -77,18 +80,19 @@ public class MessageFragment extends Fragment implements OnClickListener, TextWa sendMessageContainer.setOnClickListener(this); } - customMessage = (EditText) view.findViewById(R.id.custom_message); + customMessage = view.findViewById(R.id.custom_message); customMessage.addTextChangedListener(this); + customMessage.setOnEditorActionListener(this); charLimit = getArguments().getInt(CHAR_LIMIT_KEY, NO_CHAR_LIMIT); if (charLimit != NO_CHAR_LIMIT) { - remainingChar = (TextView) view.findViewById(R.id.remaining_characters); + remainingChar = view.findViewById(R.id.remaining_characters); remainingChar.setVisibility(View.VISIBLE); - remainingChar = (TextView) view.findViewById(R.id.remaining_characters); - remainingChar.setText("" + charLimit); + remainingChar = view.findViewById(R.id.remaining_characters); + remainingChar.setText(Integer.toString(charLimit)); customMessage.setFilters(new InputFilter[] {new InputFilter.LengthFilter(charLimit)}); } - LinearLayout messageContainer = (LinearLayout) view.findViewById(R.id.message_container); + LinearLayout messageContainer = view.findViewById(R.id.message_container); for (String message : getArguments().getStringArray(MESSAGE_LIST_KEY)) { TextView textView = (TextView) inflater.inflate(R.layout.selectable_text_view, null); textView.setOnClickListener(this); @@ -123,11 +127,20 @@ public class MessageFragment extends Fragment implements OnClickListener, TextWa @Override public void afterTextChanged(Editable s) { if (charLimit != NO_CHAR_LIMIT) { - remainingChar.setText("" + (charLimit - s.length())); + remainingChar.setText(Integer.toString(charLimit - s.length())); } getListener().onMessageFragmentAfterTextChange(s.toString()); } + @Override + public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { + if (getMessage() == null) { + return false; + } + getListener().onMessageFragmentSendMessage(getMessage()); + return true; + } + private Listener getListener() { return FragmentUtils.getParentUnsafe(this, Listener.class); } diff --git a/java/com/android/dialer/widget/res/drawable-hdpi/empty_contacts.png b/java/com/android/dialer/widget/res/drawable-hdpi/empty_contacts.png new file mode 100644 index 000000000..d3c0378f5 Binary files /dev/null and b/java/com/android/dialer/widget/res/drawable-hdpi/empty_contacts.png differ diff --git a/java/com/android/dialer/widget/res/drawable-mdpi/empty_contacts.png b/java/com/android/dialer/widget/res/drawable-mdpi/empty_contacts.png new file mode 100644 index 000000000..2ce7eae37 Binary files /dev/null and b/java/com/android/dialer/widget/res/drawable-mdpi/empty_contacts.png differ diff --git a/java/com/android/dialer/widget/res/drawable-xhdpi/empty_contacts.png b/java/com/android/dialer/widget/res/drawable-xhdpi/empty_contacts.png new file mode 100644 index 000000000..65b1de333 Binary files /dev/null and b/java/com/android/dialer/widget/res/drawable-xhdpi/empty_contacts.png differ diff --git a/java/com/android/dialer/widget/res/drawable-xxhdpi/empty_contacts.png b/java/com/android/dialer/widget/res/drawable-xxhdpi/empty_contacts.png new file mode 100644 index 000000000..407d78c9c Binary files /dev/null and b/java/com/android/dialer/widget/res/drawable-xxhdpi/empty_contacts.png differ diff --git a/java/com/android/dialer/widget/res/drawable-xxxhdpi/empty_contacts.png b/java/com/android/dialer/widget/res/drawable-xxxhdpi/empty_contacts.png new file mode 100644 index 000000000..5893965e9 Binary files /dev/null and b/java/com/android/dialer/widget/res/drawable-xxxhdpi/empty_contacts.png differ diff --git a/java/com/android/dialer/widget/res/layout-land/empty_content_view.xml b/java/com/android/dialer/widget/res/layout-land/empty_content_view.xml new file mode 100644 index 000000000..00344bf44 --- /dev/null +++ b/java/com/android/dialer/widget/res/layout-land/empty_content_view.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + diff --git a/java/com/android/dialer/widget/res/layout/dialer_toolbar.xml b/java/com/android/dialer/widget/res/layout/dialer_toolbar.xml index c4aac65fb..023b0ffe2 100644 --- a/java/com/android/dialer/widget/res/layout/dialer_toolbar.xml +++ b/java/com/android/dialer/widget/res/layout/dialer_toolbar.xml @@ -29,7 +29,9 @@ android:gravity="top" android:textSize="@dimen/toolbar_title_text_size" android:textColor="@color/background_dialer_white" - android:fontFamily="sans-serif-medium"/> + android:fontFamily="sans-serif-medium" + android:maxLines="1" + android:ellipsize="end"/> + android:visibility="gone" + android:maxLines="1" + android:ellipsize="end"/> \ No newline at end of file diff --git a/java/com/android/dialer/widget/res/layout/empty_content_view.xml b/java/com/android/dialer/widget/res/layout/empty_content_view.xml new file mode 100644 index 000000000..177744385 --- /dev/null +++ b/java/com/android/dialer/widget/res/layout/empty_content_view.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + 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 e39e03aee..5b0bab536 100644 --- a/java/com/android/dialer/widget/res/layout/fragment_message.xml +++ b/java/com/android/dialer/widget/res/layout/fragment_message.xml @@ -48,7 +48,9 @@ android:textColorHint="@color/dialer_edit_text_hint_color" android:background="@color/background_dialer_white" android:textCursorDrawable="@drawable/searchedittext_custom_cursor" - android:layout_toStartOf="@+id/count_and_send_container"/> + android:layout_toStartOf="@+id/count_and_send_container" + android:inputType="textShortMessage|textCapSentences" + android:imeOptions="actionSend"/> + + "Skryf \'n gepasmaakte boodskap" "Maak toe" + "Jy het nog nie enige kontakte nie" + "Skep nuwe kontak" + "Skakel aan" + "Skakel die kontaktetoestemming aan om jou kontakte te sien." + "Geen kontakte-program beskikbaar nie" 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 f11b46835..3952e83cc 100644 --- a/java/com/android/dialer/widget/res/values-am/strings.xml +++ b/java/com/android/dialer/widget/res/values-am/strings.xml @@ -1,6 +1,28 @@ + + "ብጁ መልዕክት ይጻፉ" "ዝጋ" + "ገና ምንም እውቂያዎች የሉዎትም" + + + "አብራ" + "የእርስዎን እውቂያዎች ለማየት፣ የእውቂያዎች ፍቃዱን ያብሩ።" + "ምንም የእውቂያዎች መተግበሪያ አይገኝም" 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 cb2e73378..26ed748f0 100644 --- a/java/com/android/dialer/widget/res/values-ar/strings.xml +++ b/java/com/android/dialer/widget/res/values-ar/strings.xml @@ -1,6 +1,27 @@ + + "كتابة رسالة مخصصة" "إغلاق" + "ليست لديك أية جهات اتصال حتى الآن" + "إنشاء جهة اتصال" + "تشغيل" + "للاطلاع على جهات الاتصال، شغِّل إذن جهات الاتصال." + "لا يتوفر تطبيق لجهات الاتصال" 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 3860a5846..cb40af6d7 100644 --- a/java/com/android/dialer/widget/res/values-az/strings.xml +++ b/java/com/android/dialer/widget/res/values-az/strings.xml @@ -1,6 +1,28 @@ + + "Fərdi mesaj yazın" "Bağlayın" + "Hələ heç bir kontakt yoxdur" + + + "Aktiv edin" + "Kontaktları görmək üçün Kontakt icazəsini aktiv edin." + "Kontakt tətbiqi əlçatan deyil" 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 index daefd9020..fea3cb0ef 100644 --- 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 @@ -1,6 +1,27 @@ + + "Napišite prilagođenu poruku" "Zatvorite" + "Još uvek nemate nijedan kontakt" + "Napravi novi kontakt" + "Uključi" + "Da biste videli kontakte, uključite dozvolu za Kontakte." + "Nema dostupne aplikacije za kontakte" 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 87861321f..6805984c3 100644 --- a/java/com/android/dialer/widget/res/values-be/strings.xml +++ b/java/com/android/dialer/widget/res/values-be/strings.xml @@ -1,6 +1,28 @@ + + "Напісаць карыстальніцкае паведамленне" "Закрыць" + "У вас пакуль няма ніякіх кантактаў" + + + "Уключыць" + "Каб бачыць свае кантакты, уключыце дазвол для Кантактаў." + "Праграмы для аперацый з кантактамі няма" 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 35e980c5f..fbb87d031 100644 --- a/java/com/android/dialer/widget/res/values-bg/strings.xml +++ b/java/com/android/dialer/widget/res/values-bg/strings.xml @@ -1,6 +1,27 @@ + + "Напишете свое съобщение" "Затваряне" + "Още нямате контакти" + "Създаване на нов контакт" + "Включване" + "За да видите контактите си, включете разрешението за Контакти." + "Няма налично приложение за контакти" 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 9e1707114..58bf44c6a 100644 --- a/java/com/android/dialer/widget/res/values-bn/strings.xml +++ b/java/com/android/dialer/widget/res/values-bn/strings.xml @@ -1,6 +1,27 @@ + + "একটি কাস্টম বার্তা লিখুন" "বন্ধ করুন" + "আপনার এখনও পর্যন্ত কোনো পরিচিতি নেই" + "নতুন পরিচিতি তৈরি করুন" + "চালু করুন" + "আপনার পরিচিতিগুলি দেখতে, পরিচিতিগুলির অনুমতি চালু করুন।" + "কোনো পরিচিতি অ্যাপ্লিকেশান উপলব্ধ নয়" 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 0bc1a9c15..239c07412 100644 --- a/java/com/android/dialer/widget/res/values-bs/strings.xml +++ b/java/com/android/dialer/widget/res/values-bs/strings.xml @@ -1,6 +1,27 @@ + + "Napišite prilagođenu poruku" "Zatvori" + "Još nemate nijedan kontakt" + "Kreirajte novi kontakt" + "Uključi" + "Da vidite kontakte, uključite dozvolu za Kontakte." + "Nije dostupna nijedna aplikacija za kontakte" 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 863930039..8f01cb53e 100644 --- a/java/com/android/dialer/widget/res/values-ca/strings.xml +++ b/java/com/android/dialer/widget/res/values-ca/strings.xml @@ -1,6 +1,28 @@ + + "Escriu un miss. personalitzat" "Tanca" + "Encara no tens cap contacte" + + + "Activa" + "Activa el permís Contactes per veure els teus contactes." + "No hi ha cap contacte disponible" 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 829aab8dd..ee8d14022 100644 --- a/java/com/android/dialer/widget/res/values-cs/strings.xml +++ b/java/com/android/dialer/widget/res/values-cs/strings.xml @@ -1,6 +1,28 @@ + + "Napište vlastní zprávu" "Zavřít" + "Zatím nemáte žádné kontakty" + + + "Povolit" + "Pokud chcete zobrazit kontakty, povolte aplikaci přístup ke Kontaktům." + "Není k dispozici žádná aplikace pro práci s kontakty" 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 9381f36f5..0e449489d 100644 --- a/java/com/android/dialer/widget/res/values-da/strings.xml +++ b/java/com/android/dialer/widget/res/values-da/strings.xml @@ -1,6 +1,28 @@ + + "Skriv en tilpasset besked" "Luk" + "Du har endnu ikke nogen kontaktpersoner" + + + "Slå til" + "Slå tilladelsen Kontaktpersoner til for at se dine kontaktpersoner." + "Der er ingen tilgængelig app til kontaktpersoner" 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 949fe9e49..f650df9f0 100644 --- a/java/com/android/dialer/widget/res/values-de/strings.xml +++ b/java/com/android/dialer/widget/res/values-de/strings.xml @@ -1,6 +1,27 @@ + + "Eigene Nachricht schreiben" "Schließen" + "Du hast noch keine Kontakte" + "Neuen Kontakt erstellen" + "Aktivieren" + "Aktiviere die Berechtigung \"Kontakte\", um deine Kontakte abzurufen." + "Keine Kontakte-App verfügbar" 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 21e049bf7..849fd6a8a 100644 --- a/java/com/android/dialer/widget/res/values-el/strings.xml +++ b/java/com/android/dialer/widget/res/values-el/strings.xml @@ -1,6 +1,28 @@ + + "Γράψτε ένα προσαρμ. μήνυμα" "Κλείσιμο" + "Δεν έχετε επαφές ακόμη" + + + "Ενεργοποίηση" + "Για να δείτε τις επαφές σας, ενεργοποιήστε την άδεια πρόσβασης στις Επαφές." + "Δεν υπάρχει διαθέσιμη εφαρμογή επαφών" 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 7f22b46da..33cba3337 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 @@ -1,6 +1,27 @@ + + "Write a custom message" "Close" + "You don\'t have any contacts yet" + "Create new contact" + "Turn on" + "To see your contacts, turn on the Contacts permission." + "No contacts app available" 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 7f22b46da..33cba3337 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 @@ -1,6 +1,27 @@ + + "Write a custom message" "Close" + "You don\'t have any contacts yet" + "Create new contact" + "Turn on" + "To see your contacts, turn on the Contacts permission." + "No contacts app available" 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 7f22b46da..33cba3337 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 @@ -1,6 +1,27 @@ + + "Write a custom message" "Close" + "You don\'t have any contacts yet" + "Create new contact" + "Turn on" + "To see your contacts, turn on the Contacts permission." + "No contacts app available" 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 c7fbdaa58..8c257b2d0 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 @@ -1,6 +1,28 @@ + + "Escribe tu propio mensaje" "Cerrar" + "Aún no tienes contactos" + + + "Activar" + "Para ver los contactos, activa el permiso Contactos." + "No hay ninguna app de contactos disponible" 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 507e8af0d..dcb695e20 100644 --- a/java/com/android/dialer/widget/res/values-es/strings.xml +++ b/java/com/android/dialer/widget/res/values-es/strings.xml @@ -1,6 +1,27 @@ + + "Mensaje personalizado" "Cerrar" + "Aún no tienes contactos" + "Crear un contacto" + "Activar" + "Para ver tus contactos, activa el permiso de Contactos." + "No hay aplicaciones de contactos disponibles" 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 71dab4276..f7357c279 100644 --- a/java/com/android/dialer/widget/res/values-et/strings.xml +++ b/java/com/android/dialer/widget/res/values-et/strings.xml @@ -1,6 +1,28 @@ + + "Kirjutage kohandatud sõnum" "Sule" + "Teil pole veel kontakte" + + + "Lülita sisse" + "Kontaktide vaatamiseks lülitage sisse kontaktide luba." + "Kontaktide rakendus pole saadaval" 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 b8e4085a0..f4d0d1d7a 100644 --- a/java/com/android/dialer/widget/res/values-eu/strings.xml +++ b/java/com/android/dialer/widget/res/values-eu/strings.xml @@ -1,6 +1,28 @@ + + "Idatzi mezu bat" "Itxi" + "Oraindik ez duzu kontakturik" + + + "Aktibatu" + "Kontaktuak ikusteko, aktibatu Kontaktuak atzitzeko baimena." + "Ez dago kontaktu-aplikaziorik erabilgarri" 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 0c3b1d4f5..9168ac293 100644 --- a/java/com/android/dialer/widget/res/values-fa/strings.xml +++ b/java/com/android/dialer/widget/res/values-fa/strings.xml @@ -1,6 +1,28 @@ + + "پیام سفارشی بنویسید" "بستن" + "هنوز هیچ مخاطبی ندارید" + + + "فعال‌سازی" + "برای دیدن مخاطبینتان، مجوز «مخاطبین» را روشن کنید." + "هیچ برنامه مخاطبی در دسترس نیست" 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 e0e971cd8..80f190253 100644 --- a/java/com/android/dialer/widget/res/values-fi/strings.xml +++ b/java/com/android/dialer/widget/res/values-fi/strings.xml @@ -1,6 +1,28 @@ + + "Kirjoita oma viesti" "Sulje" + "Sinulla ei ole vielä yhteystietoja." + + + "Ota käyttöön" + "Jos haluat katsella yhteystietojasi, ota Yhteystiedot-käyttöoikeus käyttöön." + "Yhteystietosovellusta ei ole käytettävissä." 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 9776385b4..778550997 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 @@ -1,6 +1,27 @@ + + "Rédiger message personnalisé" "Fermer" + "Vous n\'avez pas encore de contacts" + "Créer un contact" + "Activer" + "Pour consulter vos contacts, activez l\'autorisation Contacts." + "Aucune application Contacts n\'est disponible" 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 fececd84a..be8810fd9 100644 --- a/java/com/android/dialer/widget/res/values-fr/strings.xml +++ b/java/com/android/dialer/widget/res/values-fr/strings.xml @@ -1,6 +1,27 @@ + + "Écrire mon propre message" "Fermer" + "Vous n\'avez pas encore de contacts." + "Créer un contact" + "Activer" + "Pour consulter vos contacts, activez l\'autorisation Contacts." + "Aucune application de gestion des contacts n\'est disponible" 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 6a756810b..a519e68b6 100644 --- a/java/com/android/dialer/widget/res/values-gl/strings.xml +++ b/java/com/android/dialer/widget/res/values-gl/strings.xml @@ -1,6 +1,27 @@ + + "Escribe unha mensaxe personalizada" "Pechar" + "Aínda non tes ningún contacto" + "Crear novo contacto" + "Activar" + "Para ver os teus contactos, activa o permiso de Contactos." + "Non hai ningunha aplicación de contactos dispoñible" 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 c2f8cf0e1..81e6f1011 100644 --- a/java/com/android/dialer/widget/res/values-gu/strings.xml +++ b/java/com/android/dialer/widget/res/values-gu/strings.xml @@ -1,6 +1,27 @@ + + "એક કસ્ટમ સંદેશ લખો" "બંધ કરો" + "તમે હજી સુધી કોઇપણ સંપર્કો ધરાવતાં નથી" + "નવો સંપર્ક બનાવો" + "ચાલુ કરો" + "તમારા સંપર્કો જોવા માટે, સંપર્કોની પરવાનગી ચાલુ કરો." + "કોઈ સંપર્કો ઍપ્લિકેશન ઉપલબ્ધ નથી" 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 63c94e7f6..622cdca06 100644 --- a/java/com/android/dialer/widget/res/values-hi/strings.xml +++ b/java/com/android/dialer/widget/res/values-hi/strings.xml @@ -1,6 +1,27 @@ + + "कोई कस्टम संदेश लिखें" "बंद करें" + "आपके पास अभी कोई भी संपर्क नहीं है" + "नया संपर्क बनाएं" + "चालू करें" + "अपने संपर्क देखने के लिए, संपर्क अनुमति चालू करें." + "कोई भी संपर्क ऐप उपलब्‍ध नहीं है" 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 28a58d453..7254bc062 100644 --- a/java/com/android/dialer/widget/res/values-hr/strings.xml +++ b/java/com/android/dialer/widget/res/values-hr/strings.xml @@ -1,6 +1,28 @@ + + "Napišite prilagođenu poruku" "Zatvaranje" + "Još nemate nijedan kontakt" + + + "Uključi" + "Da biste vidjeli svoje kontakte, uključite dopuštenje za kontakte." + "Nije dostupna nijedna aplikacija za kontakte" 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 dcd2b36ea..5301d6970 100644 --- a/java/com/android/dialer/widget/res/values-hu/strings.xml +++ b/java/com/android/dialer/widget/res/values-hu/strings.xml @@ -1,6 +1,28 @@ + + "Egyéni üzenet írása" "Bezárás" + "Még nem rendelkezik egyetlen névjeggyel sem" + + + "Bekapcsolás" + "A névjegyek megtekintéséhez kapcsolja be a Névjegyek engedélyt." + "Nincs elérhető névjegykezelő alkalmazás" 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 7b78bb23e..95d0b7303 100644 --- a/java/com/android/dialer/widget/res/values-hy/strings.xml +++ b/java/com/android/dialer/widget/res/values-hy/strings.xml @@ -1,6 +1,27 @@ + + "Գրել տեքստն ինքնուրույն" "Փակել" + "Դեռ կոնտակտներ չունեք" + "Ստեղծել նոր կոնտակտ" + "Միացնել" + "Ձեր կոնտակտները տեսնելու համար միացրեք Կոնտակտների թույլտվությունը:" + "Կոնտակտների հավելված չկա" 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 b4b65504b..98dfe7be2 100644 --- a/java/com/android/dialer/widget/res/values-in/strings.xml +++ b/java/com/android/dialer/widget/res/values-in/strings.xml @@ -1,6 +1,28 @@ + + "Tulis pesan khusus" "Tutup" + "Anda belum memiliki kontak" + + + "Aktifkan" + "Untuk melihat kontak, aktifkan izin Kontak." + "Aplikasi kontak tidak tersedia" 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 fd844197e..22485aa46 100644 --- a/java/com/android/dialer/widget/res/values-is/strings.xml +++ b/java/com/android/dialer/widget/res/values-is/strings.xml @@ -1,6 +1,28 @@ + + "Skrifa sérsniðin skilaboð" "Loka" + "Þú ert ekki með neina tengiliði enn sem komið er" + + + "Kveikja" + "Kveiktu á tengiliðaheimildinni til að sjá tengiliðina þína." + "Ekkert tengiliðaforrit í boði" 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 0af3fd2eb..059a7d644 100644 --- a/java/com/android/dialer/widget/res/values-it/strings.xml +++ b/java/com/android/dialer/widget/res/values-it/strings.xml @@ -1,6 +1,28 @@ + + "Scrivi un messaggio personalizzato" "Chiudi" + "Nessun contatto disponibile" + + + "Attiva" + "Per accedere ai tuoi contatti, attiva l\'autorizzazione Contatti." + "Nessuna app di contatti disponibile" 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 a485888ae..48bf21911 100644 --- a/java/com/android/dialer/widget/res/values-iw/strings.xml +++ b/java/com/android/dialer/widget/res/values-iw/strings.xml @@ -1,6 +1,27 @@ + + "כתוב הודעה מותאמת אישית" "סגירה" + "עדיין אין לך אנשי קשר" + "איש קשר חדש" + "הפעלה" + "עליך להפעיל את ההרשאה \'אנשי קשר\' כדי להציג את אנשי הקשר שלך." + "אין אף אפליקציה לניהול אנשי קשר" 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 9fd65a806..969ffbac0 100644 --- a/java/com/android/dialer/widget/res/values-ja/strings.xml +++ b/java/com/android/dialer/widget/res/values-ja/strings.xml @@ -1,6 +1,28 @@ + + "カスタム メッセージを入力" "閉じる" + "連絡先はまだありません" + + + "ON にする" + "連絡先を表示するには、連絡先へのアクセスを許可する設定を ON にしてください。" + "利用できる連絡先アプリがありません" 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 6dde04430..fcd45439e 100644 --- a/java/com/android/dialer/widget/res/values-ka/strings.xml +++ b/java/com/android/dialer/widget/res/values-ka/strings.xml @@ -1,6 +1,28 @@ + + "დაწერეთ მორგებ. შეტყობინება" "დახურვა" + "კონტაქტები ჯერ არ გაქვთ" + + + "ჩართვა" + "კონტაქტების სანახავად ჩართეთ კონტაქტების ნებართვა." + "კონტაქტების აპი მიუწვდომელია" 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 334d915e2..cab827192 100644 --- a/java/com/android/dialer/widget/res/values-kk/strings.xml +++ b/java/com/android/dialer/widget/res/values-kk/strings.xml @@ -1,6 +1,28 @@ + + "Арнаулы хабар жазу" "Жабу" + "Әлі ешқандай контактілер жоқ" + + + "Қосу" + "Контактілерді көру үшін \"Контактілер\" рұқсатын қосыңыз." + "Контактілер қолданбасы қолжетімді емес" 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 d0f5633e4..2d6f2f25d 100644 --- a/java/com/android/dialer/widget/res/values-km/strings.xml +++ b/java/com/android/dialer/widget/res/values-km/strings.xml @@ -1,6 +1,28 @@ + + "សរសេរ​សារ​ផ្ទាល់ខ្លួន" "បិទ" + "អ្នកមិនទាន់មានទំនាក់ទំនងនៅឡើយទេ" + + + "បើក" + "ដើម្បីមើលទំនាក់ទំនងរបស់អ្នក សូមបើកការ​អនុញ្ញាតកម្មវិធីទំនាក់ទំនង។" + "មិនមានកម្មវិធីទំនាក់ទំនងទេ" 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 3535bfcb7..d449cb8b7 100644 --- a/java/com/android/dialer/widget/res/values-kn/strings.xml +++ b/java/com/android/dialer/widget/res/values-kn/strings.xml @@ -1,6 +1,28 @@ + + "ಕಸ್ಟಮ್ ಸಂದೇಶವನ್ನು ಬರೆಯಿರಿ" "ಮುಚ್ಚಿ" + "ನಿಮ್ಮ ಬಳಿ ಇನ್ನೂ ಯಾವುದೇ ಸಂಪರ್ಕಗಳಿಲ್ಲ" + + + "ಆನ್ ಮಾಡಿ" + "ನಿಮ್ಮ ಸಂಪರ್ಕಗಳನ್ನು ವೀಕ್ಷಿಸಲು, ಸಂಪರ್ಕಗಳ ಅನುಮತಿಯನ್ನು ಆನ್ ಮಾಡಿ." + "ಯಾವುದೇ ಸಂಪರ್ಕಗಳ ಅಪ್ಲಿಕೇಶನ್‌ ಲಭ್ಯವಿಲ್ಲ" 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 8c00cea8b..0827d3648 100644 --- a/java/com/android/dialer/widget/res/values-ko/strings.xml +++ b/java/com/android/dialer/widget/res/values-ko/strings.xml @@ -1,6 +1,27 @@ + + "맞춤 메시지를 작성하세요." "닫기" + "아직 연락처가 없습니다." + "새 연락처 만들기" + "사용" + "연락처를 보려면 연락처에 액세스할 권한을 부여하세요." + "사용할 수 있는 연락처 앱이 없습니다." 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 46ea8514c..62bd08851 100644 --- a/java/com/android/dialer/widget/res/values-ky/strings.xml +++ b/java/com/android/dialer/widget/res/values-ky/strings.xml @@ -1,6 +1,28 @@ + + "Башка билдирүүнү жазыңыз" "Жабуу" + "Азырынча эч байланышыңыз жок" + + + "Күйгүзүү" + "Байланыштарыңызды көрүү үчүн, \"Байланыштар\" уруксатын күйгүзүңүз." + "Жеткиликтүү байланыштар колдонмосу жок" 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 0db64a78a..8b7e476d9 100644 --- a/java/com/android/dialer/widget/res/values-lo/strings.xml +++ b/java/com/android/dialer/widget/res/values-lo/strings.xml @@ -1,6 +1,27 @@ + + "ຂຽນຂໍ້ຄວາມດ້ວຍຕົນເອງ" "ປິດ" + "ທ່ານຍັງບໍ່ມີລາຍຊື່ຜູ້ຕິດຕໍ່ເທື່ອ" + "ສ້າງລາຍຊື່ຜູ້ຕິດຕໍ່ໃໝ່" + "ເປີດໃຊ້" + "ເພື່ອເບິ່ງລາຍຊື່ຜູ້ຕິດຕໍ່ຂອງທ່ານ, ໃຫ້ເປີດການອະນຸຍາດລາຍຊື່ຜູ້ຕິດຕໍ່ກ່ອນ" + "ບໍ່ມີແອັບລາຍຊື່ຜູ້ຕິດຕໍ່ທີ່ສາມາດໃຊ້ໄດ້" 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 a10b91ef6..30cc0adeb 100644 --- a/java/com/android/dialer/widget/res/values-lt/strings.xml +++ b/java/com/android/dialer/widget/res/values-lt/strings.xml @@ -1,6 +1,27 @@ + + "Parašykite tinkintą praneš." "Uždaryti" + "Dar neturite jokių kontaktų" + "Sukurti naują kontaktą" + "Įjungti" + "Jei norite peržiūrėti kontaktus, įjunkite Kontaktų leidimą." + "Nepasiekiama jokia kontaktų programa" 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 8ff079390..87464c576 100644 --- a/java/com/android/dialer/widget/res/values-lv/strings.xml +++ b/java/com/android/dialer/widget/res/values-lv/strings.xml @@ -1,6 +1,28 @@ + + "Rakstīt pielāgotu ziņojumu" "Aizvērt" + "Jums vēl nav nevienas kontaktpersonas." + + + "Ieslēgt" + "Lai skatītu savas kontaktpersonas, ieslēdziet atļauju Kontaktpersonas." + "Nav pieejama neviena kontaktpersonu lietotne." 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 aa9be3055..cd2f86b7c 100644 --- a/java/com/android/dialer/widget/res/values-mk/strings.xml +++ b/java/com/android/dialer/widget/res/values-mk/strings.xml @@ -1,6 +1,28 @@ + + "Напиши приспособена порака" "Затвори" + "Сè уште немате контакти" + + + "Вклучи" + "За да ги видите контактите, вклучете ја дозволата за контакти." + "Нема достапна апликација за контакти" 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 b52ee401c..1799755d1 100644 --- a/java/com/android/dialer/widget/res/values-ml/strings.xml +++ b/java/com/android/dialer/widget/res/values-ml/strings.xml @@ -1,6 +1,28 @@ + + "ഒരു ഇ‌ഷ്‌ടാനുസൃത സന്ദേശം രചിക്കൂ" "അടയ്‌ക്കുക" + "നിങ്ങൾക്ക് ഇതുവരെയും കോൺടാക്റ്റുകൾ ഒന്നുമില്ല." + + + "ഓൺ ചെയ്യുക" + "നിങ്ങളുടെ കോൺടാക്റ്റുകൾ കാണുന്നതിന്, \'കോൺടാക്റ്റുകൾ\' അനുമതി ഓണാക്കുക." + "കോൺടാക്റ്റ് അപ്ലിക്കേഷനൊന്നും ലഭ്യമല്ല" 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 6bdad8983..e5f5c2162 100644 --- a/java/com/android/dialer/widget/res/values-mn/strings.xml +++ b/java/com/android/dialer/widget/res/values-mn/strings.xml @@ -1,6 +1,27 @@ + + "Тусгай зурвас бичих" "Хаах" + "Танд одоогоор харилцагч байхгүй байна" + "Шинэ харилцагч үүсгэх" + "Асаах" + "Харилцагчдаа харахын тулд Харилцагчдын зөвшөөрлийг идэвхжүүлнэ үү." + "Ямар ч харилцагчдын апликейшн байхгүй байна" 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 5661fa8b9..63239d21d 100644 --- a/java/com/android/dialer/widget/res/values-mr/strings.xml +++ b/java/com/android/dialer/widget/res/values-mr/strings.xml @@ -1,6 +1,27 @@ + + "एक सानुकूल संदेश लिहा" "बंद करा" + "आपल्‍याकडे अद्याप कोणतेही संपर्क नाहीत" + "नवीन संपर्क तयार करा" + "चालू करा" + "आपले संपर्क पाहण्‍यासाठी, संपर्क परवानगी चालू करा." + "कोणताही संपर्क अॅप उपलब्ध नाही" 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 8889ccc8d..cf61fc171 100644 --- a/java/com/android/dialer/widget/res/values-ms/strings.xml +++ b/java/com/android/dialer/widget/res/values-ms/strings.xml @@ -1,6 +1,27 @@ + + "Tulis mesej tersuai" "Tutup" + "Anda belum mempunyai sebarang kenalan" + "Buat kenalan baharu" + "Hidupkan" + "Untuk melihat kenalan anda, hidupkan kebenaran Kenalan." + "Tiada apl kenalan yang tersedia" 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 9a69f29eb..5d3d9ebff 100644 --- a/java/com/android/dialer/widget/res/values-my/strings.xml +++ b/java/com/android/dialer/widget/res/values-my/strings.xml @@ -1,6 +1,27 @@ + + "စိတ်ကြိုက် မက်ဆေ့ဂျ်တစ်ခု ရေးပါ" "ပိတ်ရန်" + "သင့်တွင် မည်သည့်အဆက်အသွယ်မျှ မရှိသေးပါ" + "အဆက်အသွယ်အသစ် ပြုလုပ်ရန်" + "ဖွင့်ရန်" + "အဆက်အသွယ်များကိုကြည့်ရန်၊ အဆက်အသွယ်ခွင့်ပြုချက်ကို ဖွင့်ပါ။" + "အဆက်အသွယ်များ app မရှိပါ" 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 100156bd1..441218267 100644 --- a/java/com/android/dialer/widget/res/values-nb/strings.xml +++ b/java/com/android/dialer/widget/res/values-nb/strings.xml @@ -1,6 +1,28 @@ + + "Skriv egendefinert melding" "Lukk" + "Du har ingen kontakter ennå" + + + "Slå på" + "For å se kontaktene dine må du slå på Kontakter-tillatelsen." + "Ingen kontaktapper er tilgjengelige" 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 abb8bb04b..e1f6e959b 100644 --- a/java/com/android/dialer/widget/res/values-ne/strings.xml +++ b/java/com/android/dialer/widget/res/values-ne/strings.xml @@ -1,6 +1,27 @@ + + "आफू अनुकूल सन्देश लेख्‍ने" "बन्द गर्नुहोस्" + "अहिलेसम्म तपाईंसँग कुनै सम्पर्कहरू छैनन्" + "नयाँ सम्पर्क सिर्जना गर्नुहोस्" + "सक्रिय गर्नुहोस्" + "आफ्ना सम्पर्कहरू हेर्न सम्पर्क सम्बन्धी अनुमतिलाई सक्रिय गर्नुहोस्।" + "सम्पर्क सम्बन्धी कुनै अनुप्रयोग उपलब्ध छैन" 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 556028893..1fb5f5ed3 100644 --- a/java/com/android/dialer/widget/res/values-nl/strings.xml +++ b/java/com/android/dialer/widget/res/values-nl/strings.xml @@ -1,6 +1,28 @@ + + "Schrijf zelf een bericht" "Sluiten" + "Je hebt nog geen contacten" + + + "Inschakelen" + "Als je je contacten wilt bekijken, schakel je de machtiging voor Contacten in." + "Geen app voor contacten beschikbaar" 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 100156bd1..441218267 100644 --- a/java/com/android/dialer/widget/res/values-no/strings.xml +++ b/java/com/android/dialer/widget/res/values-no/strings.xml @@ -1,6 +1,28 @@ + + "Skriv egendefinert melding" "Lukk" + "Du har ingen kontakter ennå" + + + "Slå på" + "For å se kontaktene dine må du slå på Kontakter-tillatelsen." + "Ingen kontaktapper er tilgjengelige" 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 4c69c2c6e..14b7b416b 100644 --- a/java/com/android/dialer/widget/res/values-pa/strings.xml +++ b/java/com/android/dialer/widget/res/values-pa/strings.xml @@ -1,6 +1,27 @@ + + "ਵਿਸ਼ੇਸ਼-ਵਿਉਂਤਬੱਧ ਸੰਦੇਸ਼ ਲਿਖੋ" "ਬੰਦ ਕਰੋ" + "ਤੁਹਾਡੇ ਕੋਲ ਹਾਲੇ ਕੋਈ ਸੰਪਰਕ ਨਹੀਂ ਹਨ" + "ਨਵਾਂ ਸੰਪਰਕ ਬਣਾਓ" + "ਚਾਲੂ ਕਰੋ" + "ਆਪਣੇ ਸੰਪਰਕਾਂ ਨੂੰ ਵੇਖਣ ਲਈ, ਸੰਪਰਕ ਇਜਾਜ਼ਤ ਚਾਲੂ ਕਰੋ।" + "ਕੋਈ ਸੰਪਰਕ ਐਪ ਉਪਲਬਧ ਨਹੀਂ ਹੈ" 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 cec7a4045..3f0668c98 100644 --- a/java/com/android/dialer/widget/res/values-pl/strings.xml +++ b/java/com/android/dialer/widget/res/values-pl/strings.xml @@ -1,6 +1,27 @@ + + "Wpisz wiadomość" "Zamknij" + "Nie masz jeszcze żadnych kontaktów" + "Utwórz nowy kontakt" + "Włącz" + "Aby zobaczyć swoje kontakty, włącz uprawnienia Kontakty." + "Nie jest dostępna żadna aplikacja do obsługi kontaktów" 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 b15bfac8d..7bc501e4f 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 @@ -1,6 +1,28 @@ + + "Escreva sua mensagem" "Fechar" + "Você ainda não tem contatos" + + + "Ativar" + "Para ver seus contatos, ative a permissão para o app Contatos." + "Nenhum app de contatos disponível" 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 ece2ef2c3..459ba5790 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 @@ -1,6 +1,28 @@ + + "Escreva uma mensagem" "Fechar" + "Ainda não tem nenhum contacto" + + + "Ativar" + "Para ver os seus contactos, ative a autorização Contactos." + "Não existe nenhuma aplicação de contactos disponível" 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 b15bfac8d..7bc501e4f 100644 --- a/java/com/android/dialer/widget/res/values-pt/strings.xml +++ b/java/com/android/dialer/widget/res/values-pt/strings.xml @@ -1,6 +1,28 @@ + + "Escreva sua mensagem" "Fechar" + "Você ainda não tem contatos" + + + "Ativar" + "Para ver seus contatos, ative a permissão para o app Contatos." + "Nenhum app de contatos disponível" 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 753b920b4..6138eb1b6 100644 --- a/java/com/android/dialer/widget/res/values-ro/strings.xml +++ b/java/com/android/dialer/widget/res/values-ro/strings.xml @@ -1,6 +1,28 @@ + + "Scrieți mesaj personalizat" "Închideți" + "Nu aveți încă persoane de contact." + + + "Activați" + "Pentru a vedea persoanele de contact, activați permisiunea pentru Agendă." + "Nu este disponibilă nicio aplicație pentru agendă" 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 bdebd3ce4..7eb9f1de1 100644 --- a/java/com/android/dialer/widget/res/values-ru/strings.xml +++ b/java/com/android/dialer/widget/res/values-ru/strings.xml @@ -1,6 +1,28 @@ + + "Добавьте свой текст" "Закрыть" + "Контактов нет" + + + "Предоставить разрешение" + "Чтобы открыть список контактов, предоставьте приложению разрешение \"Контакты\"." + "Нет приложения для работы с контактами" 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 4988259d4..fb5742576 100644 --- a/java/com/android/dialer/widget/res/values-si/strings.xml +++ b/java/com/android/dialer/widget/res/values-si/strings.xml @@ -1,6 +1,28 @@ + + "අභිරුචි පණිවිඩයක් ලියන්න" "වසන්න" + "ඔබට තවම කිසිදු සම්බන්ධතාවක් නැත" + + + "ක්‍රියාත්මක කරන්න" + "ඔබේ සම්බන්ධතා බැලීමට, සම්බන්ධතා අවසරය ක්‍රියාත්මක කරන්න." + "සබඳතා යෙදුම ලබා ගැනීමට නොහැකිය" 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 5dc1bd505..5912b574a 100644 --- a/java/com/android/dialer/widget/res/values-sk/strings.xml +++ b/java/com/android/dialer/widget/res/values-sk/strings.xml @@ -1,6 +1,28 @@ + + "Napíšte vlastnú správu" "Zavrieť" + "Zatiaľ nemáte žiadne kontakty" + + + "Zapnúť" + "Ak si chcete zobraziť kontakty, zapnite povolenie Kontakty." + "Nie je k dispozícii žiadna aplikácia na prácu s kontaktmi" 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 0ba965b2e..1ee87d13d 100644 --- a/java/com/android/dialer/widget/res/values-sl/strings.xml +++ b/java/com/android/dialer/widget/res/values-sl/strings.xml @@ -1,6 +1,28 @@ + + "Napišite sporočilo po meri" "Zapri" + "Nimate še nobenega stika" + + + "Vklopi" + "Če si želite ogledati stike, vklopite dovoljenje za stike." + "Na voljo ni nobene aplikacije za stike" 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 7f5e0f285..b55e47c89 100644 --- a/java/com/android/dialer/widget/res/values-sq/strings.xml +++ b/java/com/android/dialer/widget/res/values-sq/strings.xml @@ -1,6 +1,28 @@ + + "Shkruaj mesazh të person." "Mbyll" + "Nuk ke ende kontakte" + + + "Aktivizo" + "Për të parë kontaktet, aktivizo lejen e Kontakteve." + "Nuk ka asnjë aplikacion për kontaktet" 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 446c27363..c2f269d3f 100644 --- a/java/com/android/dialer/widget/res/values-sr/strings.xml +++ b/java/com/android/dialer/widget/res/values-sr/strings.xml @@ -1,6 +1,27 @@ + + "Напишите прилагођену поруку" "Затворите" + "Још увек немате ниједан контакт" + "Направи нови контакт" + "Укључи" + "Да бисте видели контакте, укључите дозволу за Контакте." + "Нема доступне апликације за контакте" 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 7d2f44c45..75add78ac 100644 --- a/java/com/android/dialer/widget/res/values-sv/strings.xml +++ b/java/com/android/dialer/widget/res/values-sv/strings.xml @@ -1,6 +1,27 @@ + + "Skriv anpassat meddelande" "Stäng" + "Du har inga kontakter ännu" + "Skapa ny kontakt" + "Aktivera" + "Du måste aktivera behörigheten Kontakter för att visa kontakterna." + "Det finns inga appar för kontakter" 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 d2c2a9721..a9139809f 100644 --- a/java/com/android/dialer/widget/res/values-sw/strings.xml +++ b/java/com/android/dialer/widget/res/values-sw/strings.xml @@ -1,6 +1,28 @@ + + "Andika ujumbe maalum" "Funga" + "Bado huna anwani zozote" + + + "Washa" + "Ili uone anwani zako, washa ruhusa ya Anwani." + "Hakuna programu ya anwani iliyopatikana" 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 4061c169f..17333304f 100644 --- a/java/com/android/dialer/widget/res/values-ta/strings.xml +++ b/java/com/android/dialer/widget/res/values-ta/strings.xml @@ -1,6 +1,27 @@ + + "தனிப்பயன் செய்தியை எழுதவும்" "மூடு" + "இதுவரை தொடர்புகள் எதுவுமில்லை" + "புதிய தொடர்பை உருவாக்கு" + "இயக்கு" + "தொடர்புகளைப் பார்க்க, தொடர்புகள் அனுமதியை இயக்கவும்." + "தொடர்புகள் பயன்பாடு எதுவுமில்லை" 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 c2474b7ce..27e6b0536 100644 --- a/java/com/android/dialer/widget/res/values-te/strings.xml +++ b/java/com/android/dialer/widget/res/values-te/strings.xml @@ -1,6 +1,27 @@ + + "అనుకూల సందేశాన్ని వ్రాయండి" "మూసివేయి" + "మీకు ఇప్పటికీ పరిచయాలేవీ లేవు" + "కొత్త పరిచయాన్ని సృష్టించండి" + "ఆన్ చేయి" + "మీ పరిచయాలను చూడటానికి, పరిచయాల అనుమతిని ఆన్ చేయండి." + "పరిచయాల అనువర్తనం ఏదీ అందుబాటులో లేదు" 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 d450b4b13..40134c84d 100644 --- a/java/com/android/dialer/widget/res/values-th/strings.xml +++ b/java/com/android/dialer/widget/res/values-th/strings.xml @@ -1,6 +1,27 @@ + + "เขียนข้อความที่กำหนดเอง" "ปิด" + "คุณยังไม่มีรายชื่อติดต่อ" + "สร้างรายชื่อติดต่อใหม่" + "เปิด" + "หากต้องการดูรายชื่อติดต่อ ให้เปิดสิทธิ์เข้าถึงรายชื่อติดต่อ" + "ไม่มีแอปรายชื่อติดต่อที่พร้อมใช้งาน" 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 ee7c52f7b..406f18b5e 100644 --- a/java/com/android/dialer/widget/res/values-tl/strings.xml +++ b/java/com/android/dialer/widget/res/values-tl/strings.xml @@ -1,6 +1,28 @@ + + "Sumulat ng custom na mensahe" "Isara" + "Wala ka pang sinumang contact" + + + "I-on" + "Upang makita ang iyong mga contact, i-on ang pahintulot ng Mga Contact." + "Walang available na app ng mga contact" 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 64e2ea535..e1dcabd48 100644 --- a/java/com/android/dialer/widget/res/values-tr/strings.xml +++ b/java/com/android/dialer/widget/res/values-tr/strings.xml @@ -1,6 +1,28 @@ + + "Özel bir mesaj yazın" "Kapat" + "Henüz hiç kişiniz yok" + + + "Etkinleştir" + "Kişilerinizi görmek için Kişiler iznini etkinleştirin." + "Kullanılabilir kişi uygulaması yok" 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 f8d9bb871..d1a281c64 100644 --- a/java/com/android/dialer/widget/res/values-uk/strings.xml +++ b/java/com/android/dialer/widget/res/values-uk/strings.xml @@ -1,6 +1,27 @@ + + "Ваше власне повідомлення" "Закрити" + "Ще немає контактів" + "Створити контакт" + "Увімкнути" + "Щоб переглянути контакти, увімкніть дозвіл \"Контакти\"." + "Немає додатка з контактами" 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 6edeb5c95..d5dcad0bd 100644 --- a/java/com/android/dialer/widget/res/values-ur/strings.xml +++ b/java/com/android/dialer/widget/res/values-ur/strings.xml @@ -1,6 +1,27 @@ + + "ایک حسب ضرورت پیغام لکھیں" "بند کریں" + "آپ کے پاس ابھی تک کوئی رابطے نہیں ہیں" + "نیا رابطہ بنائیں" + "آن کریں" + "اپنے رابطے دیکھنے کیلئے رابطوں کی اجازت آن کریں۔" + "رابطوں کی کوئی ایپ دستیاب نہیں ہے" 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 434464aef..b3003be16 100644 --- a/java/com/android/dialer/widget/res/values-uz/strings.xml +++ b/java/com/android/dialer/widget/res/values-uz/strings.xml @@ -1,6 +1,28 @@ + + "Boshqa xabar yozing" "Yopish" + "Kontaktlar yo‘q" + + + "Ruxsat berish" + "Kontaktlar ro‘yxatini ko‘rish uchun ilovaga Kontaktlarga kirishga ruxsat bering." + "Kontaktlarni ochadigan ilova yo‘q" 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 1a30f7c96..68669ec67 100644 --- a/java/com/android/dialer/widget/res/values-vi/strings.xml +++ b/java/com/android/dialer/widget/res/values-vi/strings.xml @@ -1,6 +1,28 @@ + + "Viết tin nhắn tùy chỉnh" "Đóng" + "Bạn chưa có bất kỳ liên hệ nào" + + + "Bật" + "Để xem danh bạ của bạn, bật quyền đối với Danh bạ." + "Không có ứng dụng danh bạ" 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 799972393..4a5e45801 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 @@ -1,6 +1,27 @@ + + "自行撰写信息" "关闭" + "您还没有任何联系人" + "创建新联系人" + "开启" + "要查看您的联系人,请开启“通讯录”权限。" + "没有可用的通讯录应用" 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 b0bfcc8d9..3d5fe6ebb 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 @@ -1,6 +1,27 @@ + + "撰寫自訂訊息" "關閉" + "您尚無任何聯絡人" + "建立新聯絡人" + "開放" + "如要查看聯絡人,請開放「通訊錄」權限。" + "沒有可用的聯絡人應用程式" 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 b0bfcc8d9..0cb8d152d 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 @@ -1,6 +1,28 @@ + + "撰寫自訂訊息" "關閉" + "你還沒有任何聯絡人" + + + "開啟" + "如要查看你的聯絡人,請開啟「聯絡人」存取權限。" + "沒有可用的聯絡人應用程式" 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 074aa5822..ca5898341 100644 --- a/java/com/android/dialer/widget/res/values-zu/strings.xml +++ b/java/com/android/dialer/widget/res/values-zu/strings.xml @@ -1,6 +1,28 @@ + + "Bhala umlayezo wangokwezifiso" "Vala" + "Awunabo oxhumana nabo okwamanje" + + + "Vula" + "Ukuze ubone oxhumana nabo, vula imvume yoxhumana nabo." + "Alukho uhlelo lokusebenza loxhumana nabo olutholakalayo" diff --git a/java/com/android/dialer/widget/res/values/colors.xml b/java/com/android/dialer/widget/res/values/colors.xml new file mode 100644 index 000000000..c974609ef --- /dev/null +++ b/java/com/android/dialer/widget/res/values/colors.xml @@ -0,0 +1,4 @@ + + + #b2b2b2 + \ No newline at end of file diff --git a/java/com/android/dialer/widget/res/values/dimens.xml b/java/com/android/dialer/widget/res/values/dimens.xml index 20393a842..537ad7bd7 100644 --- a/java/com/android/dialer/widget/res/values/dimens.xml +++ b/java/com/android/dialer/widget/res/values/dimens.xml @@ -26,4 +26,9 @@ 14sp 12sp 4dp + 4dp + + + 20dp + 16sp \ No newline at end of file diff --git a/java/com/android/dialer/widget/res/values/strings.xml b/java/com/android/dialer/widget/res/values/strings.xml index a5829bb0b..74a5f0f21 100644 --- a/java/com/android/dialer/widget/res/values/strings.xml +++ b/java/com/android/dialer/widget/res/values/strings.xml @@ -1,8 +1,38 @@ + Write a custom message Close + + + You don\'t have any contacts yet + + + Create new contact + + + Turn on + + + To see your contacts, turn on the Contacts permission. + + + No contacts app available \ No newline at end of file diff --git a/java/com/android/dialershared/bubble/AndroidManifest.xml b/java/com/android/dialershared/bubble/AndroidManifest.xml new file mode 100644 index 000000000..1a94aafc1 --- /dev/null +++ b/java/com/android/dialershared/bubble/AndroidManifest.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/java/com/android/dialershared/bubble/Bubble.java b/java/com/android/dialershared/bubble/Bubble.java new file mode 100644 index 000000000..dbb5ea759 --- /dev/null +++ b/java/com/android/dialershared/bubble/Bubble.java @@ -0,0 +1,767 @@ +/* + * 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.dialershared.bubble; + +import android.animation.Animator; +import android.animation.AnimatorSet; +import android.animation.ObjectAnimator; +import android.animation.PropertyValuesHolder; +import android.annotation.SuppressLint; +import android.app.PendingIntent.CanceledException; +import android.content.Context; +import android.content.Intent; +import android.content.res.ColorStateList; +import android.graphics.PixelFormat; +import android.graphics.drawable.Animatable; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.RippleDrawable; +import android.net.Uri; +import android.os.Build.VERSION; +import android.os.Build.VERSION_CODES; +import android.os.Handler; +import android.provider.Settings; +import android.support.annotation.ColorInt; +import android.support.annotation.IntDef; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.annotation.VisibleForTesting; +import android.support.v4.graphics.ColorUtils; +import android.support.v4.os.BuildCompat; +import android.support.v4.view.animation.FastOutLinearInInterpolator; +import android.support.v4.view.animation.LinearOutSlowInInterpolator; +import android.transition.TransitionManager; +import android.transition.TransitionValues; +import android.view.ContextThemeWrapper; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewGroup.MarginLayoutParams; +import android.view.ViewPropertyAnimator; +import android.view.ViewTreeObserver.OnPreDrawListener; +import android.view.WindowManager; +import android.view.WindowManager.LayoutParams; +import android.view.animation.AnticipateInterpolator; +import android.view.animation.OvershootInterpolator; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.ViewAnimator; +import com.android.dialershared.bubble.BubbleInfo.Action; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.util.List; + +/** + * Creates and manages a bubble window from information in a {@link BubbleInfo}. Before creating, be + * sure to check whether bubbles may be shown using {@link #canShowBubbles(Context)} and request + * permission if necessary ({@link #getRequestPermissionIntent(Context)} is provided for + * convenience) + */ +public class Bubble { + // This class has some odd behavior that is not immediately obvious in order to avoid jank when + // resizing. See http://go/bubble-resize for details. + + // How long text should show after showText(CharSequence) is called + private static final int SHOW_TEXT_DURATION_MILLIS = 3000; + // How long the new window should show before destroying the old one during resize operations. + // This ensures the new window has had time to draw first. + private static final int WINDOW_REDRAW_DELAY_MILLIS = 50; + + private static Boolean canShowBubblesForTesting = null; + + private final Context context; + private final WindowManager windowManager; + + private LayoutParams windowParams; + + // Initialized in factory method + @SuppressWarnings("NullableProblems") + @NonNull + private BubbleInfo currentInfo; + + private boolean isShowing; + private boolean expanded; + private boolean textShowing; + private boolean hideAfterText; + + private final Handler handler = new Handler(); + + private ViewHolder viewHolder; + private ViewPropertyAnimator collapseAnimation; + private Integer overrideGravity; + + @Retention(RetentionPolicy.SOURCE) + @IntDef({CollapseEnd.NOTHING, CollapseEnd.HIDE}) + private @interface CollapseEnd { + int NOTHING = 0; + int HIDE = 1; + } + + /** + * Determines whether bubbles can be shown based on permissions obtained. This should be checked + * before attempting to create a Bubble. + * + * @return true iff bubbles are able to be shown. + * @see Settings#canDrawOverlays(Context) + */ + public static boolean canShowBubbles(@NonNull Context context) { + return canShowBubblesForTesting != null + ? canShowBubblesForTesting + : VERSION.SDK_INT < VERSION_CODES.M || Settings.canDrawOverlays(context); + } + + @VisibleForTesting(otherwise = VisibleForTesting.NONE) + public static void setCanShowBubblesForTesting(boolean canShowBubbles) { + canShowBubblesForTesting = canShowBubbles; + } + + /** Returns an Intent to request permission to show overlays */ + @NonNull + public static Intent getRequestPermissionIntent(@NonNull Context context) { + return new Intent( + Settings.ACTION_MANAGE_OVERLAY_PERMISSION, + Uri.fromParts("package", context.getPackageName(), null)); + } + + /** Creates instances of Bubble. The default implementation just calls the constructor. */ + @VisibleForTesting + public interface BubbleFactory { + Bubble createBubble(@NonNull Context context); + } + + private static BubbleFactory bubbleFactory = Bubble::new; + + public static Bubble createBubble(@NonNull Context context, @NonNull BubbleInfo info) { + Bubble bubble = bubbleFactory.createBubble(context); + bubble.setBubbleInfo(info); + return bubble; + } + + @VisibleForTesting + public static void setBubbleFactory(@NonNull BubbleFactory bubbleFactory) { + Bubble.bubbleFactory = bubbleFactory; + } + + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + Bubble(@NonNull Context context) { + context = new ContextThemeWrapper(context, R.style.Theme_AppCompat); + this.context = context; + windowManager = context.getSystemService(WindowManager.class); + + viewHolder = new ViewHolder(context); + } + + /** + * Make the bubble visible. Will show a short entrance animation as it enters. If the bubble is + * already showing this method does nothing. + */ + public void show() { + if (isShowing) { + return; + } + + hideAfterText = false; + + if (windowParams == null) { + // Apps targeting O+ must use TYPE_APPLICATION_OVERLAY, which is not available prior to O. + @SuppressWarnings("deprecation") + @SuppressLint("InlinedApi") + int type = + BuildCompat.isAtLeastO() + ? LayoutParams.TYPE_APPLICATION_OVERLAY + : LayoutParams.TYPE_PHONE; + + windowParams = + new LayoutParams( + type, + LayoutParams.FLAG_NOT_TOUCH_MODAL + | LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH + | LayoutParams.FLAG_NOT_FOCUSABLE + | LayoutParams.FLAG_LAYOUT_NO_LIMITS, + PixelFormat.TRANSLUCENT); + windowParams.gravity = Gravity.TOP | Gravity.LEFT; + windowParams.x = context.getResources().getDimensionPixelOffset(R.dimen.bubble_safe_margin_x); + windowParams.y = currentInfo.getStartingYPosition(); + windowParams.height = LayoutParams.WRAP_CONTENT; + windowParams.width = LayoutParams.WRAP_CONTENT; + } + + windowManager.addView(viewHolder.getRoot(), windowParams); + ObjectAnimator showAnimator = + ObjectAnimator.ofPropertyValuesHolder( + viewHolder.getPrimaryButton(), + PropertyValuesHolder.ofFloat(View.SCALE_X, 0, 1), + PropertyValuesHolder.ofFloat(View.SCALE_Y, 0, 1)); + showAnimator.setInterpolator(new OvershootInterpolator()); + showAnimator.start(); + isShowing = true; + updatePrimaryIconAnimation(); + } + + /** + * Hide the button if visible. Will run a short exit animation before hiding. If the bubble is + * currently showing text, will hide after the text is done displaying. If the bubble is not + * visible this method does nothing. + */ + public void hide() { + if (!isShowing) { + return; + } + + if (textShowing) { + hideAfterText = true; + return; + } + + if (expanded) { + startCollapse(CollapseEnd.HIDE); + return; + } + + viewHolder + .getPrimaryButton() + .animate() + .setInterpolator(new AnticipateInterpolator()) + .scaleX(0) + .scaleY(0) + .withEndAction( + () -> { + windowManager.removeView(viewHolder.getRoot()); + isShowing = false; + updatePrimaryIconAnimation(); + }) + .start(); + } + + /** Returns whether the bubble is currently visible */ + public boolean isShowing() { + return isShowing; + } + + /** + * Set the info for this Bubble to display + * + * @param bubbleInfo the BubbleInfo to display in this Bubble. + */ + public void setBubbleInfo(@NonNull BubbleInfo bubbleInfo) { + currentInfo = bubbleInfo; + update(); + } + + /** + * Update the state and behavior of actions. + * + * @param actions the new state of the bubble's actions + */ + public void updateActions(@NonNull List actions) { + currentInfo = BubbleInfo.from(currentInfo).setActions(actions).build(); + updateButtonStates(); + } + + /** Returns the currently displayed BubbleInfo */ + public BubbleInfo getBubbleInfo() { + return currentInfo; + } + + /** + * Display text in the main bubble. The bubble's drawer is not expandable while text is showing, + * and the drawer will be closed if already open. + * + * @param text the text to display to the user + */ + public void showText(@NonNull CharSequence text) { + textShowing = true; + if (expanded) { + startCollapse(CollapseEnd.NOTHING); + doShowText(text); + } else { + // Need to transition from old bounds to new bounds manually + ChangeOnScreenBounds transition = new ChangeOnScreenBounds(); + // Prepare and capture start values + TransitionValues startValues = new TransitionValues(); + startValues.view = viewHolder.getPrimaryButton(); + transition.addTarget(startValues.view); + transition.captureStartValues(startValues); + + doResize( + () -> { + doShowText(text); + // Hide the text so we can animate it in + viewHolder.getPrimaryText().setAlpha(0); + + ViewAnimator primaryButton = viewHolder.getPrimaryButton(); + // Cancel the automatic transition scheduled in doShowText + TransitionManager.endTransitions((ViewGroup) primaryButton.getParent()); + primaryButton + .getViewTreeObserver() + .addOnPreDrawListener( + new OnPreDrawListener() { + @Override + public boolean onPreDraw() { + primaryButton.getViewTreeObserver().removeOnPreDrawListener(this); + + // Prepare and capture end values + TransitionValues endValues = new TransitionValues(); + endValues.view = primaryButton; + transition.addTarget(endValues.view); + transition.captureEndValues(endValues); + + // animate the primary button bounds change + Animator bounds = + transition.createAnimator(primaryButton, startValues, endValues); + + // Animate the text in + Animator alpha = + ObjectAnimator.ofFloat(viewHolder.getPrimaryText(), View.ALPHA, 1f); + + AnimatorSet set = new AnimatorSet(); + set.play(bounds).before(alpha); + set.start(); + return false; + } + }); + }); + } + handler.removeCallbacks(null); + handler.postDelayed( + () -> { + textShowing = false; + if (hideAfterText) { + hide(); + } else { + doResize( + () -> viewHolder.getPrimaryButton().setDisplayedChild(ViewHolder.CHILD_INDEX_ICON)); + } + }, + SHOW_TEXT_DURATION_MILLIS); + } + + @Nullable + Integer getGravityOverride() { + return overrideGravity; + } + + void onMoveStart() { + startCollapse(CollapseEnd.NOTHING); + viewHolder + .getPrimaryButton() + .animate() + .translationZ( + context.getResources().getDimensionPixelOffset(R.dimen.bubble_move_elevation_change)); + } + + void onMoveFinish() { + viewHolder.getPrimaryButton().animate().translationZ(0); + // If it's GONE, no resize is necessary. If it's VISIBLE, it will get cleaned up when the + // collapse animation finishes + if (viewHolder.getExpandedView().getVisibility() == View.INVISIBLE) { + doResize(null); + } + } + + void primaryButtonClick() { + if (expanded || textShowing || currentInfo.getActions().isEmpty()) { + try { + currentInfo.getPrimaryIntent().send(); + } catch (CanceledException e) { + throw new RuntimeException(e); + } + return; + } + + doResize( + () -> { + onLeftRightSwitch(isDrawingFromRight()); + viewHolder.setDrawerVisibility(View.VISIBLE); + }); + View expandedView = viewHolder.getExpandedView(); + expandedView + .getViewTreeObserver() + .addOnPreDrawListener( + new OnPreDrawListener() { + @Override + public boolean onPreDraw() { + expandedView.getViewTreeObserver().removeOnPreDrawListener(this); + expandedView.setTranslationX( + isDrawingFromRight() ? expandedView.getWidth() : -expandedView.getWidth()); + expandedView + .animate() + .setInterpolator(new LinearOutSlowInInterpolator()) + .translationX(0); + return false; + } + }); + setFocused(true); + expanded = true; + } + + void onLeftRightSwitch(boolean onRight) { + if (viewHolder.isMoving()) { + if (viewHolder.getExpandedView().getVisibility() == View.GONE) { + // If the drawer is not part of the layout we don't need to do anything. Layout flips will + // happen if necessary when opening the drawer. + return; + } + } + + viewHolder + .getRoot() + .setLayoutDirection(onRight ? View.LAYOUT_DIRECTION_RTL : View.LAYOUT_DIRECTION_LTR); + View primaryContainer = viewHolder.getRoot().findViewById(R.id.bubble_primary_container); + ViewGroup.LayoutParams layoutParams = primaryContainer.getLayoutParams(); + ((FrameLayout.LayoutParams) layoutParams).gravity = onRight ? Gravity.RIGHT : Gravity.LEFT; + primaryContainer.setLayoutParams(layoutParams); + + viewHolder + .getExpandedView() + .setBackgroundResource( + onRight + ? R.drawable.bubble_background_pill_rtl + : R.drawable.bubble_background_pill_ltr); + } + + LayoutParams getWindowParams() { + return windowParams; + } + + View getRootView() { + return viewHolder.getRoot(); + } + + private void update() { + RippleDrawable backgroundRipple = + (RippleDrawable) + context.getResources().getDrawable(R.drawable.bubble_ripple_circle, context.getTheme()); + int primaryTint = + ColorUtils.compositeColors( + context.getColor(R.color.bubble_primary_background_darken), + currentInfo.getPrimaryColor()); + backgroundRipple.getDrawable(0).setTint(primaryTint); + viewHolder.getPrimaryButton().setBackground(backgroundRipple); + + setBackgroundDrawable(viewHolder.getFirstButton(), primaryTint); + setBackgroundDrawable(viewHolder.getSecondButton(), primaryTint); + setBackgroundDrawable(viewHolder.getThirdButton(), primaryTint); + + int numButtons = currentInfo.getActions().size(); + viewHolder.getThirdButton().setVisibility(numButtons < 3 ? View.GONE : View.VISIBLE); + viewHolder.getSecondButton().setVisibility(numButtons < 2 ? View.GONE : View.VISIBLE); + + viewHolder.getPrimaryIcon().setImageIcon(currentInfo.getPrimaryIcon()); + updatePrimaryIconAnimation(); + + viewHolder + .getExpandedView() + .setBackgroundTintList(ColorStateList.valueOf(currentInfo.getPrimaryColor())); + + updateButtonStates(); + } + + private void updatePrimaryIconAnimation() { + Drawable drawable = viewHolder.getPrimaryIcon().getDrawable(); + if (drawable instanceof Animatable) { + if (isShowing) { + ((Animatable) drawable).start(); + } else { + ((Animatable) drawable).stop(); + } + } + } + + private void setBackgroundDrawable(CheckableImageButton view, @ColorInt int color) { + RippleDrawable itemRipple = + (RippleDrawable) + context + .getResources() + .getDrawable(R.drawable.bubble_ripple_checkable_circle, context.getTheme()); + itemRipple.getDrawable(0).setTint(color); + view.setBackground(itemRipple); + } + + private void updateButtonStates() { + int numButtons = currentInfo.getActions().size(); + + if (numButtons >= 1) { + configureButton(currentInfo.getActions().get(0), viewHolder.getFirstButton()); + if (numButtons >= 2) { + configureButton(currentInfo.getActions().get(1), viewHolder.getSecondButton()); + if (numButtons >= 3) { + configureButton(currentInfo.getActions().get(2), viewHolder.getThirdButton()); + } + } + } + } + + private void doShowText(@NonNull CharSequence text) { + TransitionManager.beginDelayedTransition((ViewGroup) viewHolder.getPrimaryButton().getParent()); + viewHolder.getPrimaryText().setText(text); + viewHolder.getPrimaryButton().setDisplayedChild(ViewHolder.CHILD_INDEX_TEXT); + } + + private void configureButton(Action action, CheckableImageButton button) { + action + .getIcon() + .loadDrawableAsync( + context, + d -> { + button.setImageIcon(action.getIcon()); + button.setContentDescription(action.getName()); + button.setChecked(action.isChecked()); + button.setEnabled(action.isEnabled()); + }, + handler); + button.setOnClickListener(v -> doAction(action)); + } + + private void doAction(Action action) { + try { + action.getIntent().send(); + } catch (CanceledException e) { + throw new RuntimeException(e); + } + } + + private void doResize(@Nullable Runnable operation) { + // If we're resizing on the right side of the screen, there is an implicit move operation + // necessary. The WindowManager does not sync the move and resize operations, so serious jank + // would occur. To fix this, instead of resizing the window, we create a new one and destroy + // the old one. There is a short delay before destroying the old view to ensure the new one has + // had time to draw. + ViewHolder oldViewHolder = viewHolder; + if (isDrawingFromRight()) { + viewHolder = new ViewHolder(oldViewHolder.getRoot().getContext()); + update(); + viewHolder + .getPrimaryButton() + .setDisplayedChild(oldViewHolder.getPrimaryButton().getDisplayedChild()); + viewHolder.getPrimaryText().setText(oldViewHolder.getPrimaryText().getText()); + } + + if (operation != null) { + operation.run(); + } + + if (isDrawingFromRight()) { + swapViewHolders(oldViewHolder); + } + } + + private void swapViewHolders(ViewHolder oldViewHolder) { + oldViewHolder.getShadowProvider().setVisibility(View.GONE); + ViewGroup root = viewHolder.getRoot(); + windowManager.addView(root, windowParams); + root.getViewTreeObserver() + .addOnPreDrawListener( + new OnPreDrawListener() { + @Override + public boolean onPreDraw() { + root.getViewTreeObserver().removeOnPreDrawListener(this); + // Wait a bit before removing the old view; make sure the new one has drawn over it. + handler.postDelayed( + () -> windowManager.removeView(oldViewHolder.getRoot()), + WINDOW_REDRAW_DELAY_MILLIS); + return true; + } + }); + } + + private void startCollapse(@CollapseEnd int collapseEndAction) { + View expandedView = viewHolder.getExpandedView(); + if (expandedView.getVisibility() != View.VISIBLE || collapseAnimation != null) { + // Drawer is already collapsed or animation is running. + return; + } + + overrideGravity = isDrawingFromRight() ? Gravity.RIGHT : Gravity.LEFT; + setFocused(false); + collapseAnimation = + expandedView + .animate() + .translationX(isDrawingFromRight() ? expandedView.getWidth() : -expandedView.getWidth()) + .setInterpolator(new FastOutLinearInInterpolator()) + .withEndAction( + () -> { + collapseAnimation = null; + expanded = false; + + if (textShowing) { + // Will do resize once the text is done. + return; + } + + // Hide the drawer and resize if possible. + viewHolder.setDrawerVisibility(View.INVISIBLE); + if (!viewHolder.isMoving() || !isDrawingFromRight()) { + doResize(() -> viewHolder.setDrawerVisibility(View.GONE)); + } + + // If this collapse was to come before a hide, do it now. + if (collapseEndAction == CollapseEnd.HIDE) { + hide(); + } + + // Resume normal gravity after any resizing is done. + handler.postDelayed( + () -> { + overrideGravity = null; + if (!viewHolder.isMoving()) { + viewHolder.undoGravityOverride(); + } + }, + // Need to wait twice as long for resize and layout + WINDOW_REDRAW_DELAY_MILLIS * 2); + }); + } + + private boolean isDrawingFromRight() { + return (windowParams.gravity & Gravity.RIGHT) == Gravity.RIGHT; + } + + private void setFocused(boolean focused) { + if (focused) { + windowParams.flags &= ~LayoutParams.FLAG_NOT_FOCUSABLE; + } else { + windowParams.flags |= LayoutParams.FLAG_NOT_FOCUSABLE; + } + windowManager.updateViewLayout(getRootView(), windowParams); + } + + private class ViewHolder { + + public static final int CHILD_INDEX_ICON = 0; + public static final int CHILD_INDEX_TEXT = 1; + + private final MoveHandler moveHandler; + private final WindowRoot root; + private final ViewAnimator primaryButton; + private final ImageView primaryIcon; + private final TextView primaryText; + + private final CheckableImageButton firstButton; + private final CheckableImageButton secondButton; + private final CheckableImageButton thirdButton; + private final View expandedView; + private final View shadowProvider; + + public ViewHolder(Context context) { + // Window root is not in the layout file so that the inflater has a view to inflate into + this.root = new WindowRoot(context); + LayoutInflater inflater = LayoutInflater.from(root.getContext()); + View contentView = inflater.inflate(R.layout.bubble_base, root, true); + expandedView = contentView.findViewById(R.id.bubble_expanded_layout); + primaryButton = contentView.findViewById(R.id.bubble_button_primary); + primaryIcon = contentView.findViewById(R.id.bubble_icon_primary); + primaryText = contentView.findViewById(R.id.bubble_text); + shadowProvider = contentView.findViewById(R.id.bubble_drawer_shadow_provider); + + firstButton = contentView.findViewById(R.id.bubble_icon_first); + secondButton = contentView.findViewById(R.id.bubble_icon_second); + thirdButton = contentView.findViewById(R.id.bubble_icon_third); + + root.setOnBackPressedListener( + () -> { + if (isShowing && expanded) { + startCollapse(CollapseEnd.NOTHING); + return true; + } + return false; + }); + root.setOnTouchListener( + (v, event) -> { + if (expanded && event.getActionMasked() == MotionEvent.ACTION_OUTSIDE) { + startCollapse(CollapseEnd.NOTHING); + return true; + } + return false; + }); + expandedView + .getViewTreeObserver() + .addOnDrawListener( + () -> { + int translationX = (int) expandedView.getTranslationX(); + int parentOffset = + ((MarginLayoutParams) ((ViewGroup) expandedView.getParent()).getLayoutParams()) + .leftMargin; + if (isDrawingFromRight()) { + int maxLeft = + shadowProvider.getRight() + - context.getResources().getDimensionPixelSize(R.dimen.bubble_size); + shadowProvider.setLeft( + Math.min(maxLeft, expandedView.getLeft() + translationX + parentOffset)); + } else { + int minRight = + shadowProvider.getLeft() + + context.getResources().getDimensionPixelSize(R.dimen.bubble_size); + shadowProvider.setRight( + Math.max(minRight, expandedView.getRight() + translationX + parentOffset)); + } + }); + moveHandler = new MoveHandler(primaryButton, Bubble.this); + } + + public ViewGroup getRoot() { + return root; + } + + public ViewAnimator getPrimaryButton() { + return primaryButton; + } + + public ImageView getPrimaryIcon() { + return primaryIcon; + } + + public TextView getPrimaryText() { + return primaryText; + } + + public CheckableImageButton getFirstButton() { + return firstButton; + } + + public CheckableImageButton getSecondButton() { + return secondButton; + } + + public CheckableImageButton getThirdButton() { + return thirdButton; + } + + public View getExpandedView() { + return expandedView; + } + + public View getShadowProvider() { + return shadowProvider; + } + + public void setDrawerVisibility(int visibility) { + expandedView.setVisibility(visibility); + shadowProvider.setVisibility(visibility); + } + + public boolean isMoving() { + return moveHandler.isMoving(); + } + + public void undoGravityOverride() { + moveHandler.undoGravityOverride(); + } + } +} diff --git a/java/com/android/dialershared/bubble/BubbleInfo.java b/java/com/android/dialershared/bubble/BubbleInfo.java new file mode 100644 index 000000000..eb9abd059 --- /dev/null +++ b/java/com/android/dialershared/bubble/BubbleInfo.java @@ -0,0 +1,123 @@ +/* + * 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.dialershared.bubble; + +import android.app.PendingIntent; +import android.graphics.drawable.Icon; +import android.support.annotation.ColorInt; +import android.support.annotation.NonNull; +import android.support.annotation.Px; +import com.google.auto.value.AutoValue; +import java.util.Collections; +import java.util.List; + +/** Info for displaying a {@link Bubble} */ +@AutoValue +public abstract class BubbleInfo { + @ColorInt + public abstract int getPrimaryColor(); + + @NonNull + public abstract Icon getPrimaryIcon(); + + @NonNull + public abstract PendingIntent getPrimaryIntent(); + + @Px + public abstract int getStartingYPosition(); + + @NonNull + public abstract List getActions(); + + public static Builder builder() { + return new AutoValue_BubbleInfo.Builder().setActions(Collections.emptyList()); + } + + public static Builder from(@NonNull BubbleInfo bubbleInfo) { + return builder() + .setPrimaryIntent(bubbleInfo.getPrimaryIntent()) + .setPrimaryColor(bubbleInfo.getPrimaryColor()) + .setPrimaryIcon(bubbleInfo.getPrimaryIcon()) + .setStartingYPosition(bubbleInfo.getStartingYPosition()) + .setActions(bubbleInfo.getActions()); + } + + /** Builder for {@link BubbleInfo} */ + @AutoValue.Builder + public abstract static class Builder { + + public abstract Builder setPrimaryColor(@ColorInt int primaryColor); + + public abstract Builder setPrimaryIcon(@NonNull Icon primaryIcon); + + public abstract Builder setPrimaryIntent(@NonNull PendingIntent primaryIntent); + + public abstract Builder setStartingYPosition(@Px int startingYPosition); + + public abstract Builder setActions(List actions); + + public abstract BubbleInfo build(); + } + + /** Represents actions to be shown in the bubble when expanded */ + @AutoValue + public abstract static class Action { + + @NonNull + public abstract Icon getIcon(); + + @NonNull + public abstract CharSequence getName(); + + @NonNull + public abstract PendingIntent getIntent(); + + public abstract boolean isEnabled(); + + public abstract boolean isChecked(); + + public static Builder builder() { + return new AutoValue_BubbleInfo_Action.Builder().setEnabled(true).setChecked(false); + } + + public static Builder from(@NonNull Action action) { + return builder() + .setIntent(action.getIntent()) + .setChecked(action.isChecked()) + .setEnabled(action.isEnabled()) + .setName(action.getName()) + .setIcon(action.getIcon()); + } + + /** Builder for {@link Action} */ + @AutoValue.Builder + public abstract static class Builder { + + public abstract Builder setIcon(@NonNull Icon icon); + + public abstract Builder setName(@NonNull CharSequence name); + + public abstract Builder setIntent(@NonNull PendingIntent intent); + + public abstract Builder setEnabled(boolean enabled); + + public abstract Builder setChecked(boolean checked); + + public abstract Action build(); + } + } +} diff --git a/java/com/android/dialershared/bubble/ChangeOnScreenBounds.java b/java/com/android/dialershared/bubble/ChangeOnScreenBounds.java new file mode 100644 index 000000000..4da6a3561 --- /dev/null +++ b/java/com/android/dialershared/bubble/ChangeOnScreenBounds.java @@ -0,0 +1,166 @@ +/* + * 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.dialershared.bubble; + +import android.animation.Animator; +import android.animation.AnimatorSet; +import android.animation.ObjectAnimator; +import android.graphics.Path; +import android.graphics.PointF; +import android.graphics.Rect; +import android.transition.Transition; +import android.transition.TransitionValues; +import android.util.Property; +import android.view.View; +import android.view.ViewGroup; + +/** Similar to {@link android.transition.ChangeBounds ChangeBounds} but works across windows */ +public class ChangeOnScreenBounds extends Transition { + + private static final String PROPNAME_BOUNDS = "bubble:changeScreenBounds:bounds"; + private static final String PROPNAME_SCREEN_X = "bubble:changeScreenBounds:screenX"; + private static final String PROPNAME_SCREEN_Y = "bubble:changeScreenBounds:screenY"; + + private static final Property TOP_LEFT_PROPERTY = + new Property(PointF.class, "topLeft") { + @Override + public void set(ViewBounds viewBounds, PointF topLeft) { + viewBounds.setTopLeft(topLeft); + } + + @Override + public PointF get(ViewBounds viewBounds) { + return null; + } + }; + + private static final Property BOTTOM_RIGHT_PROPERTY = + new Property(PointF.class, "bottomRight") { + @Override + public void set(ViewBounds viewBounds, PointF bottomRight) { + viewBounds.setBottomRight(bottomRight); + } + + @Override + public PointF get(ViewBounds viewBounds) { + return null; + } + }; + private final int[] tempLocation = new int[2]; + + @Override + public void captureStartValues(TransitionValues transitionValues) { + captureValues(transitionValues); + } + + @Override + public void captureEndValues(TransitionValues transitionValues) { + captureValues(transitionValues); + } + + private void captureValues(TransitionValues values) { + View view = values.view; + + if (view.isLaidOut() || view.getWidth() != 0 || view.getHeight() != 0) { + values.values.put( + PROPNAME_BOUNDS, + new Rect(view.getLeft(), view.getTop(), view.getRight(), view.getBottom())); + values.view.getLocationOnScreen(tempLocation); + values.values.put(PROPNAME_SCREEN_X, tempLocation[0]); + values.values.put(PROPNAME_SCREEN_Y, tempLocation[1]); + } + } + + @Override + public Animator createAnimator( + ViewGroup sceneRoot, TransitionValues startValues, TransitionValues endValues) { + Rect startBounds = (Rect) startValues.values.get(PROPNAME_BOUNDS); + + // Offset the startBounds by the difference in screen position + int startScreenX = (Integer) startValues.values.get(PROPNAME_SCREEN_X); + int startScreenY = (Integer) startValues.values.get(PROPNAME_SCREEN_Y); + int endScreenX = (Integer) endValues.values.get(PROPNAME_SCREEN_X); + int endScreenY = (Integer) endValues.values.get(PROPNAME_SCREEN_Y); + startBounds.offset(startScreenX - endScreenX, startScreenY - endScreenY); + + Rect endBounds = (Rect) endValues.values.get(PROPNAME_BOUNDS); + final int startLeft = startBounds.left; + final int endLeft = endBounds.left; + final int startTop = startBounds.top; + final int endTop = endBounds.top; + final int startRight = startBounds.right; + final int endRight = endBounds.right; + final int startBottom = startBounds.bottom; + final int endBottom = endBounds.bottom; + ViewBounds viewBounds = new ViewBounds(endValues.view); + viewBounds.setTopLeft(new PointF(startLeft, startTop)); + viewBounds.setBottomRight(new PointF(startRight, startBottom)); + + // Animate the top left and bottom right corners along a path + Path topLeftPath = getPathMotion().getPath(startLeft, startTop, endLeft, endTop); + ObjectAnimator topLeftAnimator = + ObjectAnimator.ofObject(viewBounds, TOP_LEFT_PROPERTY, null, topLeftPath); + + Path bottomRightPath = getPathMotion().getPath(startRight, startBottom, endRight, endBottom); + ObjectAnimator bottomRightAnimator = + ObjectAnimator.ofObject(viewBounds, BOTTOM_RIGHT_PROPERTY, null, bottomRightPath); + AnimatorSet set = new AnimatorSet(); + set.playTogether(topLeftAnimator, bottomRightAnimator); + return set; + } + + private static class ViewBounds { + private int left; + private int top; + private int right; + private int bottom; + private final View view; + private int topLeftCalls; + private int bottomRightCalls; + + public ViewBounds(View view) { + this.view = view; + } + + public void setTopLeft(PointF topLeft) { + left = Math.round(topLeft.x); + top = Math.round(topLeft.y); + topLeftCalls++; + if (topLeftCalls == bottomRightCalls) { + updateLeftTopRightBottom(); + } + } + + public void setBottomRight(PointF bottomRight) { + right = Math.round(bottomRight.x); + bottom = Math.round(bottomRight.y); + bottomRightCalls++; + if (topLeftCalls == bottomRightCalls) { + updateLeftTopRightBottom(); + } + } + + private void updateLeftTopRightBottom() { + view.setLeft(left); + view.setTop(top); + view.setRight(right); + view.setBottom(bottom); + topLeftCalls = 0; + bottomRightCalls = 0; + } + } +} diff --git a/java/com/android/dialershared/bubble/CheckableImageButton.java b/java/com/android/dialershared/bubble/CheckableImageButton.java new file mode 100644 index 000000000..7a5a432a6 --- /dev/null +++ b/java/com/android/dialershared/bubble/CheckableImageButton.java @@ -0,0 +1,101 @@ +/* + * 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.dialershared.bubble; + +import android.content.Context; +import android.support.v4.view.AccessibilityDelegateCompat; +import android.support.v4.view.ViewCompat; +import android.support.v4.view.accessibility.AccessibilityEventCompat; +import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat; +import android.support.v7.widget.AppCompatImageButton; +import android.util.AttributeSet; +import android.view.View; +import android.view.accessibility.AccessibilityEvent; +import android.widget.Checkable; + +/** + * An {@link android.widget.ImageButton ImageButton} that implements {@link Checkable} and + * propagates the checkable state + */ +public class CheckableImageButton extends AppCompatImageButton implements Checkable { + + // Copied without modification from AppCompat library + + private static final int[] DRAWABLE_STATE_CHECKED = new int[] {android.R.attr.state_checked}; + + private boolean mChecked; + + public CheckableImageButton(Context context) { + this(context, null); + } + + public CheckableImageButton(Context context, AttributeSet attrs) { + this(context, attrs, android.R.attr.imageButtonStyle); + } + + public CheckableImageButton(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + + ViewCompat.setAccessibilityDelegate( + this, + new AccessibilityDelegateCompat() { + @Override + public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) { + super.onInitializeAccessibilityEvent(host, event); + event.setChecked(isChecked()); + } + + @Override + public void onInitializeAccessibilityNodeInfo( + View host, AccessibilityNodeInfoCompat info) { + super.onInitializeAccessibilityNodeInfo(host, info); + info.setCheckable(true); + info.setChecked(isChecked()); + } + }); + } + + @Override + public void setChecked(boolean checked) { + if (mChecked != checked) { + mChecked = checked; + refreshDrawableState(); + sendAccessibilityEvent(AccessibilityEventCompat.TYPE_WINDOW_CONTENT_CHANGED); + } + } + + @Override + public boolean isChecked() { + return mChecked; + } + + @Override + public void toggle() { + setChecked(!mChecked); + } + + @Override + public int[] onCreateDrawableState(int extraSpace) { + if (mChecked) { + return mergeDrawableStates( + super.onCreateDrawableState(extraSpace + DRAWABLE_STATE_CHECKED.length), + DRAWABLE_STATE_CHECKED); + } else { + return super.onCreateDrawableState(extraSpace); + } + } +} diff --git a/java/com/android/dialershared/bubble/MoveHandler.java b/java/com/android/dialershared/bubble/MoveHandler.java new file mode 100644 index 000000000..bc6db64bc --- /dev/null +++ b/java/com/android/dialershared/bubble/MoveHandler.java @@ -0,0 +1,264 @@ +/* + * 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.dialershared.bubble; + +import android.content.Context; +import android.graphics.Point; +import android.support.animation.FloatPropertyCompat; +import android.support.animation.SpringAnimation; +import android.support.animation.SpringForce; +import android.support.annotation.NonNull; +import android.support.v4.math.MathUtils; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.VelocityTracker; +import android.view.View; +import android.view.View.OnTouchListener; +import android.view.ViewConfiguration; +import android.view.WindowManager; +import android.view.WindowManager.LayoutParams; +import android.widget.Scroller; + +/** Handles touches and manages moving the bubble in response */ +class MoveHandler implements OnTouchListener { + + // Amount the ViewConfiguration's minFlingVelocity will be scaled by for our own minVelocity + private static final int MIN_FLING_VELOCITY_FACTOR = 8; + // The friction multiplier to control how slippery the bubble is when flung + private static final float SCROLL_FRICTION_MULTIPLIER = 4f; + + private final Context context; + private final WindowManager windowManager; + private final Bubble bubble; + private final int minX; + private final int minY; + private final int maxX; + private final int maxY; + private final int bubbleSize; + private final int shadowPaddingSize; + private final float touchSlopSquared; + + private boolean isMoving; + private float firstX; + private float firstY; + + private SpringAnimation moveXAnimation; + private SpringAnimation moveYAnimation; + private VelocityTracker velocityTracker; + private Scroller scroller; + + // Handles the left/right gravity conversion and centering + private final FloatPropertyCompat xProperty = + new FloatPropertyCompat("xProperty") { + @Override + public float getValue(LayoutParams windowParams) { + int realX = windowParams.x; + realX = realX + bubbleSize / 2; + realX = realX + shadowPaddingSize; + if (relativeToRight(windowParams)) { + int displayWidth = context.getResources().getDisplayMetrics().widthPixels; + realX = displayWidth - realX; + } + return MathUtils.clamp(realX, minX, maxX); + } + + @Override + public void setValue(LayoutParams windowParams, float value) { + boolean wasOnRight = (windowParams.gravity & Gravity.RIGHT) == Gravity.RIGHT; + int displayWidth = context.getResources().getDisplayMetrics().widthPixels; + boolean onRight; + Integer gravityOverride = bubble.getGravityOverride(); + if (gravityOverride == null) { + onRight = value > displayWidth / 2; + } else { + onRight = (gravityOverride & Gravity.RIGHT) == Gravity.RIGHT; + } + int centeringOffset = bubbleSize / 2 + shadowPaddingSize; + windowParams.x = + (int) (onRight ? (displayWidth - value - centeringOffset) : value - centeringOffset); + windowParams.gravity = Gravity.TOP | (onRight ? Gravity.RIGHT : Gravity.LEFT); + if (wasOnRight != onRight) { + bubble.onLeftRightSwitch(onRight); + } + if (bubble.isShowing()) { + windowManager.updateViewLayout(bubble.getRootView(), windowParams); + } + } + }; + + private final FloatPropertyCompat yProperty = + new FloatPropertyCompat("yProperty") { + @Override + public float getValue(LayoutParams object) { + return MathUtils.clamp(object.y + bubbleSize + shadowPaddingSize, minY, maxY); + } + + @Override + public void setValue(LayoutParams object, float value) { + object.y = (int) value - bubbleSize - shadowPaddingSize; + if (bubble.isShowing()) { + windowManager.updateViewLayout(bubble.getRootView(), object); + } + } + }; + + public MoveHandler(@NonNull View targetView, @NonNull Bubble bubble) { + this.bubble = bubble; + context = targetView.getContext(); + windowManager = context.getSystemService(WindowManager.class); + + bubbleSize = context.getResources().getDimensionPixelSize(R.dimen.bubble_size); + shadowPaddingSize = + context.getResources().getDimensionPixelOffset(R.dimen.bubble_shadow_padding_size); + minX = + context.getResources().getDimensionPixelOffset(R.dimen.bubble_safe_margin_x) + + bubbleSize / 2; + minY = + context.getResources().getDimensionPixelOffset(R.dimen.bubble_safe_margin_y) + + bubbleSize / 2; + maxX = context.getResources().getDisplayMetrics().widthPixels - minX; + maxY = context.getResources().getDisplayMetrics().heightPixels - minY; + + // Squared because it will be compared against the square of the touch delta. This is more + // efficient than needing to take a square root. + touchSlopSquared = (float) Math.pow(ViewConfiguration.get(context).getScaledTouchSlop(), 2); + + targetView.setOnTouchListener(this); + } + + public boolean isMoving() { + return isMoving; + } + + public void undoGravityOverride() { + LayoutParams windowParams = bubble.getWindowParams(); + xProperty.setValue(windowParams, xProperty.getValue(windowParams)); + } + + @Override + public boolean onTouch(View v, MotionEvent event) { + float eventX = event.getRawX(); + float eventY = event.getRawY(); + switch (event.getActionMasked()) { + case MotionEvent.ACTION_DOWN: + firstX = eventX; + firstY = eventY; + velocityTracker = VelocityTracker.obtain(); + break; + case MotionEvent.ACTION_MOVE: + if (isMoving || hasExceededTouchSlop(event)) { + if (!isMoving) { + isMoving = true; + bubble.onMoveStart(); + } + + if (moveXAnimation == null) { + moveXAnimation = new SpringAnimation(bubble.getWindowParams(), xProperty); + moveXAnimation.setSpring(new SpringForce()); + moveXAnimation.getSpring().setDampingRatio(SpringForce.DAMPING_RATIO_NO_BOUNCY); + } + if (moveYAnimation == null) { + moveYAnimation = new SpringAnimation(bubble.getWindowParams(), yProperty); + moveYAnimation.setSpring(new SpringForce()); + moveYAnimation.getSpring().setDampingRatio(SpringForce.DAMPING_RATIO_NO_BOUNCY); + } + + moveXAnimation.animateToFinalPosition(MathUtils.clamp(eventX, minX, maxX)); + moveYAnimation.animateToFinalPosition(MathUtils.clamp(eventY, minY, maxY)); + } + + velocityTracker.addMovement(event); + break; + case MotionEvent.ACTION_UP: + if (isMoving) { + ViewConfiguration viewConfiguration = ViewConfiguration.get(context); + velocityTracker.computeCurrentVelocity( + 1000, viewConfiguration.getScaledMaximumFlingVelocity()); + float xVelocity = velocityTracker.getXVelocity(); + float yVelocity = velocityTracker.getYVelocity(); + boolean isFling = isFling(xVelocity, yVelocity); + + if (isFling) { + Point target = + findTarget( + xVelocity, + yVelocity, + (int) xProperty.getValue(bubble.getWindowParams()), + (int) yProperty.getValue(bubble.getWindowParams())); + + moveXAnimation.animateToFinalPosition(target.x); + moveYAnimation.animateToFinalPosition(target.y); + } else { + snapX(); + } + isMoving = false; + bubble.onMoveFinish(); + } else { + v.performClick(); + bubble.primaryButtonClick(); + } + break; + } + return true; + } + + private Point findTarget(float xVelocity, float yVelocity, int startX, int startY) { + if (scroller == null) { + scroller = new Scroller(context); + scroller.setFriction(ViewConfiguration.getScrollFriction() * SCROLL_FRICTION_MULTIPLIER); + } + + // Find where a fling would end vertically + scroller.fling(startX, startY, (int) xVelocity, (int) yVelocity, minX, maxX, minY, maxY); + int targetY = scroller.getFinalY(); + scroller.abortAnimation(); + + // If the x component of the velocity is above the minimum fling velocity, use velocity to + // determine edge. Otherwise use its starting position + boolean pullRight = isFling(xVelocity, 0) ? xVelocity > 0 : isOnRightHalf(startX); + return new Point(pullRight ? maxX : minX, targetY); + } + + private boolean isFling(float xVelocity, float yVelocity) { + int minFlingVelocity = + ViewConfiguration.get(context).getScaledMinimumFlingVelocity() * MIN_FLING_VELOCITY_FACTOR; + return getMagnitudeSquared(xVelocity, yVelocity) > minFlingVelocity * minFlingVelocity; + } + + private boolean isOnRightHalf(float currentX) { + return currentX > (minX + maxX) / 2; + } + + private void snapX() { + // Check if x value is closer to min or max + boolean pullRight = isOnRightHalf(xProperty.getValue(bubble.getWindowParams())); + moveXAnimation.animateToFinalPosition(pullRight ? maxX : minX); + } + + private boolean relativeToRight(LayoutParams windowParams) { + return (windowParams.gravity & Gravity.RIGHT) == Gravity.RIGHT; + } + + private boolean hasExceededTouchSlop(MotionEvent event) { + return getMagnitudeSquared(event.getRawX() - firstX, event.getRawY() - firstY) + > touchSlopSquared; + } + + private float getMagnitudeSquared(float deltaX, float deltaY) { + return deltaX * deltaX + deltaY * deltaY; + } +} diff --git a/java/com/android/dialershared/bubble/WindowRoot.java b/java/com/android/dialershared/bubble/WindowRoot.java new file mode 100644 index 000000000..2c176662e --- /dev/null +++ b/java/com/android/dialershared/bubble/WindowRoot.java @@ -0,0 +1,55 @@ +/* + * 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.dialershared.bubble; + +import android.content.Context; +import android.support.annotation.NonNull; +import android.view.KeyEvent; +import android.widget.FrameLayout; + +/** + * ViewGroup that handles some overlay window concerns. Allows back button events to be listened for + * via an interface. + */ +public class WindowRoot extends FrameLayout { + + private OnBackPressedListener backPressedListener; + + /** Callback for when the back button is pressed while this window is in focus */ + public interface OnBackPressedListener { + boolean onBackPressed(); + } + + public WindowRoot(@NonNull Context context) { + super(context); + } + + public void setOnBackPressedListener(OnBackPressedListener listener) { + backPressedListener = listener; + } + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && backPressedListener != null) { + if (event.getAction() == KeyEvent.ACTION_UP) { + return backPressedListener.onBackPressed(); + } + return true; + } + return super.dispatchKeyEvent(event); + } +} diff --git a/java/com/android/dialershared/bubble/g3doc/INTEGRATION.md b/java/com/android/dialershared/bubble/g3doc/INTEGRATION.md new file mode 100644 index 000000000..a13a6053b --- /dev/null +++ b/java/com/android/dialershared/bubble/g3doc/INTEGRATION.md @@ -0,0 +1,69 @@ +# Floating Bubble Integration + +go/bubble-integration + +Author: keyboardr@ + +Last Updated: 2017-06-06 + +Floating bubbles provide a lightweight means of providing interactive UI while +the user is away from the app. This document details the steps necessary to +integrate these bubbles into your app. + +[TOC] + +![Floating bubble](images/bubble_collapsed.png){height=400} + +## Ensure Bubbles can be shown + +Add the `android.permission.SYSTEM_ALERT_WINDOW` permission to your manifest. +Before you show the bubble, call `Bubble.canShowBubbles(Context)` to see if the +user has granted you permission. If not, you can start an Activity from +`Bubble.getRequestPermissionIntent(Context)` to navigate the user to the system +settings to enable drawing over other apps. This is more than just a simple +runtime permission; the user must explicitly allow you to draw over other apps +via this system setting. System apps may have this allowed by default, but be +sure to test. + +## Create your initial `BubbleInfo` + +Use `BubbleInfo.builder()` to populate a `BubbleInfo` with your color, main +icon, main Intent (which should navigate back to your app), starting Y position, +and a list of `Actions` to put in the drawer. Each `Action` will define its +icon, user-displayable name (used for content description), Intent to perform +when clicked, whether it is enabled (optional, default true), and whether it is +checked (optional, default false). + +![Floating bubble expanded](images/bubble_expanded.png){height=400} + +## Create, show, and hide the Bubble + +Create the bubble using `Bubble.createBubble(Context, BubbleInfo)`. The `show()` +method is safe to call at any time. If the Bubble is already showing, it is a +no-op. `hide()` may also be called at any time and will collapse the drawer +before hiding if already open. While `show()` will show immediately, `hide()` +may need to wait for other operations or animations before the bubble is hidden. +It is unlikely you will need to keep track of this, however. The bubble will be +hidden at its next opportunity, and `hide()` will not block. + +![Floating bubble with state](images/bubble_state.png){height=400} + +## Update the Bubble's state + +Call `Bubble.setBubbleInfo(BubbleInfo)` to update all displayed state. +`BubbleInfo`s are immutable, so to make a new one using an existing +`BubbleInfo`, use `BubbleInfo.from(BubbleInfo)` to get a `Builder` with +prepopulated info. If only the `Action` state has changed, it is more efficient +to just call `Bubble.updateActions(List)` + +![Floating bubble with text](images/bubble_text.png){height=400} + +## Show text + +To temporarily replace the icon with a textual message, call +`Bubble.showText(CharSequence)`. The text will be displayed for several seconds +before transitioning back to the primary icon. The drawer will be closed if open +and cannot be reopened while the text is displayed. Any calls to `hide()` will +be deferred until after the text is done being displayed, so if you wish to show +an ending message of some sort you may call `hide()` immediately after +`showText(CharSequence)`. diff --git a/java/com/android/dialershared/bubble/g3doc/images/bubble_collapsed.png b/java/com/android/dialershared/bubble/g3doc/images/bubble_collapsed.png new file mode 100644 index 000000000..7ecc0675b Binary files /dev/null and b/java/com/android/dialershared/bubble/g3doc/images/bubble_collapsed.png differ diff --git a/java/com/android/dialershared/bubble/g3doc/images/bubble_expanded.png b/java/com/android/dialershared/bubble/g3doc/images/bubble_expanded.png new file mode 100644 index 000000000..cd477f334 Binary files /dev/null and b/java/com/android/dialershared/bubble/g3doc/images/bubble_expanded.png differ diff --git a/java/com/android/dialershared/bubble/g3doc/images/bubble_state.png b/java/com/android/dialershared/bubble/g3doc/images/bubble_state.png new file mode 100644 index 000000000..21ca8a8b5 Binary files /dev/null and b/java/com/android/dialershared/bubble/g3doc/images/bubble_state.png differ diff --git a/java/com/android/dialershared/bubble/g3doc/images/bubble_text.png b/java/com/android/dialershared/bubble/g3doc/images/bubble_text.png new file mode 100644 index 000000000..9c476dca6 Binary files /dev/null and b/java/com/android/dialershared/bubble/g3doc/images/bubble_text.png differ diff --git a/java/com/android/dialershared/bubble/res/color/bubble_checkable_mask.xml b/java/com/android/dialershared/bubble/res/color/bubble_checkable_mask.xml new file mode 100644 index 000000000..f9416ab57 --- /dev/null +++ b/java/com/android/dialershared/bubble/res/color/bubble_checkable_mask.xml @@ -0,0 +1,21 @@ + + + + + + + diff --git a/java/com/android/dialershared/bubble/res/color/bubble_icon_tint_states.xml b/java/com/android/dialershared/bubble/res/color/bubble_icon_tint_states.xml new file mode 100644 index 000000000..33ca1fdc5 --- /dev/null +++ b/java/com/android/dialershared/bubble/res/color/bubble_icon_tint_states.xml @@ -0,0 +1,21 @@ + + + + + + + diff --git a/java/com/android/dialershared/bubble/res/drawable/bubble_background_pill_ltr.xml b/java/com/android/dialershared/bubble/res/drawable/bubble_background_pill_ltr.xml new file mode 100644 index 000000000..77c813a75 --- /dev/null +++ b/java/com/android/dialershared/bubble/res/drawable/bubble_background_pill_ltr.xml @@ -0,0 +1,23 @@ + + + + + + + diff --git a/java/com/android/dialershared/bubble/res/drawable/bubble_background_pill_rtl.xml b/java/com/android/dialershared/bubble/res/drawable/bubble_background_pill_rtl.xml new file mode 100644 index 000000000..9e2542154 --- /dev/null +++ b/java/com/android/dialershared/bubble/res/drawable/bubble_background_pill_rtl.xml @@ -0,0 +1,23 @@ + + + + + + + diff --git a/java/com/android/dialershared/bubble/res/drawable/bubble_ripple_checkable_circle.xml b/java/com/android/dialershared/bubble/res/drawable/bubble_ripple_checkable_circle.xml new file mode 100644 index 000000000..85e0b24f3 --- /dev/null +++ b/java/com/android/dialershared/bubble/res/drawable/bubble_ripple_checkable_circle.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + diff --git a/java/com/android/dialershared/bubble/res/drawable/bubble_ripple_circle.xml b/java/com/android/dialershared/bubble/res/drawable/bubble_ripple_circle.xml new file mode 100644 index 000000000..8d5cf0bb5 --- /dev/null +++ b/java/com/android/dialershared/bubble/res/drawable/bubble_ripple_circle.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + diff --git a/java/com/android/dialershared/bubble/res/layout/bubble_base.xml b/java/com/android/dialershared/bubble/res/layout/bubble_base.xml new file mode 100644 index 000000000..76970f020 --- /dev/null +++ b/java/com/android/dialershared/bubble/res/layout/bubble_base.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com/android/dialershared/bubble/res/values/colors.xml b/java/com/android/dialershared/bubble/res/values/colors.xml new file mode 100644 index 000000000..97545faf3 --- /dev/null +++ b/java/com/android/dialershared/bubble/res/values/colors.xml @@ -0,0 +1,20 @@ + + + + + #33000000 + diff --git a/java/com/android/dialershared/bubble/res/values/values.xml b/java/com/android/dialershared/bubble/res/values/values.xml new file mode 100644 index 000000000..f5816172d --- /dev/null +++ b/java/com/android/dialershared/bubble/res/values/values.xml @@ -0,0 +1,25 @@ + + + + + 16dp + 64dp + 56dp + 16dp + 4dp + 16dp + diff --git a/java/com/android/incallui/AndroidManifest.xml b/java/com/android/incallui/AndroidManifest.xml index 8539bd0cf..703e5b509 100644 --- a/java/com/android/incallui/AndroidManifest.xml +++ b/java/com/android/incallui/AndroidManifest.xml @@ -15,11 +15,11 @@ --> + package="com.android.incallui"> + android:minSdkVersion="23" + android:targetSdkVersion="26"/> + android:name="android.hardware.camera.any" + android:required="false"/> @@ -43,47 +43,49 @@ Set taskAffinity for application is not working because it will be merged and the result is that all activities here still have same taskAffinity as activities under dialer. --> - + + + android:directBootAware="true" + android:excludeFromRecents="true" + android:exported="false" + android:label="@string/phoneAppLabel" + android:launchMode="singleInstance" + android:name="com.android.incallui.InCallActivity" + android:resizeableActivity="true" + android:screenOrientation="nosensor" + android:taskAffinity="com.android.incallui" + android:theme="@style/Theme.InCallScreen"> + android:directBootAware="true" + android:excludeFromRecents="true" + android:exported="false" + android:label="@string/manageConferenceLabel" + android:launchMode="singleTask" + android:name="com.android.incallui.ManageConferenceActivity" + android:noHistory="true" + android:resizeableActivity="true" + android:taskAffinity="com.android.incallui" + android:theme="@style/Theme.InCallScreen.ManageConference"/> + android:directBootAware="true" + android:exported="true" + android:name="com.android.incallui.InCallServiceImpl" + android:permission="android.permission.BIND_INCALL_SERVICE"> + android:name="android.telecom.IN_CALL_SERVICE_UI" + android:value="true"/> + android:name="android.telecom.IN_CALL_SERVICE_RINGING" + android:value="false"/> + android:name="android.telecom.INCLUDE_EXTERNAL_CALLS" + android:value="true"/> @@ -97,23 +99,35 @@ excludeFromRecents="true" -> Don't show in "recent apps" screen --> + android:excludeFromRecents="true" + android:exported="false" + android:name="com.android.incallui.spam.SpamNotificationActivity" + android:noHistory="true" + android:taskAffinity="" + android:theme="@style/AfterCallNotificationTheme"> + + + android:exported="false" + android:name="com.android.incallui.spam.SpamNotificationService"/> + android:directBootAware="true" + android:exported="false" + android:name="com.android.incallui.NotificationBroadcastReceiver"/> + + diff --git a/java/com/android/incallui/AnswerScreenPresenter.java b/java/com/android/incallui/AnswerScreenPresenter.java index ca34aa6aa..d53040145 100644 --- a/java/com/android/incallui/AnswerScreenPresenter.java +++ b/java/com/android/incallui/AnswerScreenPresenter.java @@ -17,12 +17,14 @@ package com.android.incallui; import android.content.Context; +import android.os.SystemClock; import android.support.annotation.FloatRange; import android.support.annotation.NonNull; 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.common.concurrent.ThreadUtil; import com.android.dialer.logging.DialerImpression; import com.android.dialer.logging.Logger; import com.android.incallui.answer.protocol.AnswerScreen; @@ -36,11 +38,14 @@ import com.android.incallui.call.DialerCallListener; /** Manages changes for an incoming call screen. */ public class AnswerScreenPresenter implements AnswerScreenDelegate, DialerCall.CannedTextResponsesLoadedListener { + private static final int ACCEPT_REJECT_CALL_TIME_OUT_IN_MILLIS = 5000; + @NonNull private final Context context; @NonNull private final AnswerScreen answerScreen; @NonNull private final DialerCall call; + private long actionPerformedTimeMillis; - public AnswerScreenPresenter( + AnswerScreenPresenter( @NonNull Context context, @NonNull AnswerScreen answerScreen, @NonNull DialerCall call) { LogUtil.i("AnswerScreenPresenter.constructor", null); this.context = Assert.isNotNull(context); @@ -59,6 +64,13 @@ public class AnswerScreenPresenter } } + @Override + public boolean isActionTimeout() { + return actionPerformedTimeMillis != 0 + && SystemClock.elapsedRealtime() - actionPerformedTimeMillis + >= ACCEPT_REJECT_CALL_TIME_OUT_IN_MILLIS; + } + @Override public void onAnswerScreenUnready() { call.removeCannedTextResponsesLoadedListener(this); @@ -73,6 +85,7 @@ public class AnswerScreenPresenter public void onRejectCallWithMessage(String message) { call.reject(true /* rejectWithMessage */, message); onDismissDialog(); + addTimeoutCheck(); } @Override @@ -100,6 +113,7 @@ public class AnswerScreenPresenter call.answer(); } } + addTimeoutCheck(); } @Override @@ -114,6 +128,7 @@ public class AnswerScreenPresenter } else { call.reject(false /* rejectWithMessage */, null); } + addTimeoutCheck(); } @Override @@ -124,9 +139,27 @@ public class AnswerScreenPresenter LogUtil.i("AnswerScreenPresenter.onAnswerAndReleaseCall", "activeCall == null"); onAnswer(false); } else { + activeCall.setReleasedByAnsweringSecondCall(true); activeCall.addListener(new AnswerOnDisconnected(activeCall)); activeCall.disconnect(); } + addTimeoutCheck(); + } + + @Override + public void onAnswerAndReleaseButtonDisabled() { + DialerCall activeCall = CallList.getInstance().getActiveCall(); + if (activeCall != null) { + activeCall.increaseSecondCallWithoutAnswerAndReleasedButtonTimes(); + } + } + + @Override + public void onAnswerAndReleaseButtonEnabled() { + DialerCall activeCall = CallList.getInstance().getActiveCall(); + if (activeCall != null) { + activeCall.increaseAnswerAndReleaseButtonDisplayedTimes(); + } } @Override @@ -148,7 +181,7 @@ public class AnswerScreenPresenter private final DialerCall disconnectingCall; - public AnswerOnDisconnected(DialerCall disconnectingCall) { + AnswerOnDisconnected(DialerCall disconnectingCall) { this.disconnectingCall = disconnectingCall; } @@ -183,10 +216,32 @@ public class AnswerScreenPresenter @Override public void onInternationalCallOnWifi() {} + + @Override + public void onEnrichedCallSessionUpdate() {} } private boolean isSmsResponseAllowed(DialerCall call) { return UserManagerCompat.isUserUnlocked(context) && call.can(android.telecom.Call.Details.CAPABILITY_RESPOND_VIA_TEXT); } + + private void addTimeoutCheck() { + actionPerformedTimeMillis = SystemClock.elapsedRealtime(); + if (answerScreen.getAnswerScreenFragment().isVisible()) { + ThreadUtil.postDelayedOnUiThread( + () -> { + if (!answerScreen.getAnswerScreenFragment().isVisible()) { + LogUtil.d( + "AnswerScreenPresenter.addTimeoutCheck", + "accept/reject call timed out, do nothing"); + return; + } + LogUtil.i("AnswerScreenPresenter.addTimeoutCheck", "accept/reject call timed out"); + // Force re-evaluate which fragment to show. + InCallPresenter.getInstance().refreshUi(); + }, + ACCEPT_REJECT_CALL_TIME_OUT_IN_MILLIS); + } + } } diff --git a/java/com/android/incallui/AnswerScreenPresenterStub.java b/java/com/android/incallui/AnswerScreenPresenterStub.java index 7bff3299a..2f9e60818 100644 --- a/java/com/android/incallui/AnswerScreenPresenterStub.java +++ b/java/com/android/incallui/AnswerScreenPresenterStub.java @@ -42,6 +42,17 @@ public class AnswerScreenPresenterStub implements AnswerScreenDelegate { @Override public void onAnswerAndReleaseCall() {} + @Override + public void onAnswerAndReleaseButtonEnabled() {} + + @Override + public void onAnswerAndReleaseButtonDisabled() {} + @Override public void updateWindowBackgroundColor(@FloatRange(from = -1f, to = 1.0f) float progress) {} + + @Override + public boolean isActionTimeout() { + return false; + } } diff --git a/java/com/android/incallui/AudioRouteSelectorActivity.java b/java/com/android/incallui/AudioRouteSelectorActivity.java new file mode 100644 index 000000000..dfd4d1abf --- /dev/null +++ b/java/com/android/incallui/AudioRouteSelectorActivity.java @@ -0,0 +1,47 @@ +/* + * 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.incallui; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.FragmentActivity; +import com.android.incallui.audiomode.AudioModeProvider; +import com.android.incallui.audioroute.AudioRouteSelectorDialogFragment; +import com.android.incallui.audioroute.AudioRouteSelectorDialogFragment.AudioRouteSelectorPresenter; +import com.android.incallui.call.TelecomAdapter; + +/** Simple activity that just shows the audio route selector fragment */ +public class AudioRouteSelectorActivity extends FragmentActivity + implements AudioRouteSelectorPresenter { + + @Override + protected void onCreate(@Nullable Bundle bundle) { + super.onCreate(bundle); + AudioRouteSelectorDialogFragment.newInstance(AudioModeProvider.getInstance().getAudioState()) + .show(getSupportFragmentManager(), null); + } + + @Override + public void onAudioRouteSelected(int audioRoute) { + TelecomAdapter.getInstance().setAudioRoute(audioRoute); + } + + @Override + public void onAudioRouteSelectorDismiss() { + finish(); + } +} diff --git a/java/com/android/incallui/CallButtonPresenter.java b/java/com/android/incallui/CallButtonPresenter.java index b0c3a99ea..e36d9cf9e 100644 --- a/java/com/android/incallui/CallButtonPresenter.java +++ b/java/com/android/incallui/CallButtonPresenter.java @@ -300,23 +300,15 @@ public class CallButtonPresenter */ @Override public void switchCameraClicked(boolean useFrontFacingCamera) { - InCallCameraManager cameraManager = InCallPresenter.getInstance().getInCallCameraManager(); - cameraManager.setUseFrontFacingCamera(useFrontFacingCamera); - - String cameraId = cameraManager.getActiveCameraId(); - if (cameraId != null) { - final int cameraDir = - cameraManager.isUsingFrontFacingCamera() - ? CameraDirection.CAMERA_DIRECTION_FRONT_FACING - : CameraDirection.CAMERA_DIRECTION_BACK_FACING; - mCall.setCameraDir(cameraDir); - mCall.getVideoTech().setCamera(cameraId); - } + updateCamera(useFrontFacingCamera); } @Override public void toggleCameraClicked() { LogUtil.i("CallButtonPresenter.toggleCameraClicked", ""); + if (mCall == null) { + return; + } Logger.get(mContext) .logCallImpression( DialerImpression.Type.IN_CALL_SCREEN_SWAP_CAMERA, @@ -345,8 +337,11 @@ public class CallButtonPresenter mCall.getTimeAddedMs()); if (pause) { + mCall.getVideoTech().setCamera(null); mCall.getVideoTech().stopTransmission(); } else { + updateCamera( + InCallPresenter.getInstance().getInCallCameraManager().isUsingFrontFacingCamera()); mCall.getVideoTech().resumeTransmission(); } @@ -354,6 +349,21 @@ public class CallButtonPresenter mInCallButtonUi.enableButton(InCallButtonIds.BUTTON_PAUSE_VIDEO, false); } + private void updateCamera(boolean useFrontFacingCamera) { + InCallCameraManager cameraManager = InCallPresenter.getInstance().getInCallCameraManager(); + cameraManager.setUseFrontFacingCamera(useFrontFacingCamera); + + String cameraId = cameraManager.getActiveCameraId(); + if (cameraId != null) { + final int cameraDir = + cameraManager.isUsingFrontFacingCamera() + ? CameraDirection.CAMERA_DIRECTION_FRONT_FACING + : CameraDirection.CAMERA_DIRECTION_BACK_FACING; + mCall.setCameraDir(cameraDir); + mCall.getVideoTech().setCamera(cameraId); + } + } + private void updateUi(InCallState state, DialerCall call) { LogUtil.v("CallButtonPresenter", "updating call UI for call: ", call); diff --git a/java/com/android/incallui/CallCardPresenter.java b/java/com/android/incallui/CallCardPresenter.java index c2b99c1d1..67b917767 100644 --- a/java/com/android/incallui/CallCardPresenter.java +++ b/java/com/android/incallui/CallCardPresenter.java @@ -44,12 +44,9 @@ import com.android.contacts.common.ContactsUtils; import com.android.contacts.common.preference.ContactsPreferences; import com.android.contacts.common.util.ContactDisplayUtils; import com.android.dialer.common.Assert; -import com.android.dialer.common.ConfigProviderBindings; import com.android.dialer.common.LogUtil; 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.configprovider.ConfigProviderBindings; import com.android.dialer.logging.DialerImpression; import com.android.dialer.logging.Logger; import com.android.dialer.multimedia.MultimediaData; @@ -85,8 +82,7 @@ public class CallCardPresenter InCallDetailsListener, InCallEventListener, InCallScreenDelegate, - DialerCallListener, - EnrichedCallManager.StateChangedListener { + DialerCallListener { /** * Amount of time to wait before sending an announcement via the accessibility manager. When the @@ -249,7 +245,7 @@ public class CallCardPresenter @Override public void onStateChange(InCallState oldState, InCallState newState, CallList callList) { - LogUtil.v("CallCardPresenter.onStateChange", "" + newState); + LogUtil.v("CallCardPresenter.onStateChange", "oldState: %s, newState: %s", oldState, newState); if (mInCallScreen == null) { return; } @@ -376,6 +372,12 @@ public class CallCardPresenter @Override public void onInternationalCallOnWifi() {} + @Override + public void onEnrichedCallSessionUpdate() { + LogUtil.enterBlock("CallCardPresenter.onEnrichedCallSessionUpdate"); + updatePrimaryDisplayInfo(); + } + /** Handles a change to the child number by refreshing the primary call info. */ @Override public void onDialerCallChildNumberChange() { @@ -418,12 +420,6 @@ public class CallCardPresenter updatePrimaryCallState(); } - @Override - public void onEnrichedCallStateChanged() { - LogUtil.enterBlock("CallCardPresenter.onEnrichedCallStateChanged"); - updatePrimaryDisplayInfo(); - } - private boolean shouldRefreshPrimaryInfo(boolean primaryChanged) { if (mPrimary == null) { return false; @@ -475,7 +471,8 @@ public class CallCardPresenter mPrimary.getConnectTimeMillis(), CallerInfoUtils.isVoiceMailNumber(mContext, mPrimary), mPrimary.isRemotelyHeld(), - isBusiness)); + isBusiness, + supports2ndCallOnHold())); InCallActivity activity = (InCallActivity) (mInCallScreen.getInCallScreenFragment().getActivity()); @@ -505,6 +502,15 @@ public class CallCardPresenter && !mIsFullscreen; } + private boolean supports2ndCallOnHold() { + DialerCall firstCall = CallList.getInstance().getActiveOrBackgroundCall(); + DialerCall incomingCall = CallList.getInstance().getIncomingCall(); + if (firstCall != null && incomingCall != null && firstCall != incomingCall) { + return incomingCall.can(Details.CAPABILITY_HOLD); + } + return true; + } + @Override public void onCallStateButtonClicked() { Intent broadcastIntent = Bindings.get(mContext).getCallStateButtonBroadcastIntent(mContext); @@ -666,26 +672,8 @@ public class CallCardPresenter boolean hasWorkCallProperty = mPrimary.hasProperty(PROPERTY_ENTERPRISE_CALL); MultimediaData multimediaData = null; - if (mPrimary.getNumber() != null) { - EnrichedCallManager manager = EnrichedCallComponent.get(mContext).getEnrichedCallManager(); - - EnrichedCallManager.Filter filter; - if (mPrimary.isIncoming()) { - filter = manager.createIncomingCallComposerFilter(); - } else { - filter = manager.createOutgoingCallComposerFilter(); - } - - Session enrichedCallSession = - manager.getSession(mPrimary.getUniqueCallId(), mPrimary.getNumber(), filter); - - mPrimary.setEnrichedCallSession(enrichedCallSession); - mPrimary.setEnrichedCallCapabilities(manager.getCapabilities(mPrimary.getNumber())); - - if (enrichedCallSession != null) { - enrichedCallSession.setUniqueDialerCallId(mPrimary.getUniqueCallId()); - multimediaData = enrichedCallSession.getMultimediaData(); - } + if (mPrimary.getEnrichedCallSession() != null) { + multimediaData = mPrimary.getEnrichedCallSession().getMultimediaData(); } if (mPrimary.isConferenceCall()) { @@ -696,7 +684,8 @@ public class CallCardPresenter mInCallScreen.setPrimary( new PrimaryInfo( null /* number */, - getConferenceString(mPrimary), + CallerInfoUtils.getConferenceString( + mContext, mPrimary.hasProperty(Details.PROPERTY_GENERIC_CONFERENCE)), false /* nameIsNumber */, null /* location */, null /* label */, @@ -876,11 +865,20 @@ public class CallCardPresenter return; } + if (mSecondary.isMergeInProcess()) { + LogUtil.i( + "CallCardPresenter.updateSecondaryDisplayInfo", + "secondary call is merge in process, clearing info"); + mInCallScreen.setSecondary(SecondaryInfo.createEmptySecondaryInfo(mIsFullscreen)); + return; + } + if (mSecondary.isConferenceCall()) { mInCallScreen.setSecondary( new SecondaryInfo( true /* show */, - getConferenceString(mSecondary), + CallerInfoUtils.getConferenceString( + mContext, mSecondary.hasProperty(Details.PROPERTY_GENERIC_CONFERENCE)), false /* nameIsNumber */, null /* label */, mSecondary.getCallProviderLabel(), @@ -972,7 +970,7 @@ public class CallCardPresenter } /** Gets the name to display for the call. */ - String getNameForCall(ContactCacheEntry contactInfo) { + private String getNameForCall(ContactCacheEntry contactInfo) { String preferredName = ContactDisplayUtils.getPreferredDisplayName( contactInfo.namePrimary, contactInfo.nameAlternative, mContactsPreferences); @@ -982,19 +980,6 @@ public class CallCardPresenter return preferredName; } - /** Gets the number to display for a call. */ - String getNumberForCall(ContactCacheEntry contactInfo) { - // If the name is empty, we use the number for the name...so don't show a second - // number in the number field - String preferredName = - ContactDisplayUtils.getPreferredDisplayName( - contactInfo.namePrimary, contactInfo.nameAlternative, mContactsPreferences); - if (TextUtils.isEmpty(preferredName)) { - return contactInfo.location; - } - return contactInfo.number; - } - @Override public void onSecondaryInfoClicked() { if (mSecondary == null) { @@ -1035,15 +1020,6 @@ public class CallCardPresenter return mPrimary != null && mPrimary.getState() == DialerCall.State.ACTIVE; } - private String getConferenceString(DialerCall call) { - boolean isGenericConference = call.hasProperty(Details.PROPERTY_GENERIC_CONFERENCE); - LogUtil.v("CallCardPresenter.getConferenceString", "" + isGenericConference); - - final int resId = - isGenericConference ? R.string.generic_conference_call_name : R.string.conference_call_name; - return mContext.getResources().getString(resId); - } - private boolean shouldShowEndCallButton(DialerCall primary, int callState) { if (primary == null) { return false; @@ -1063,7 +1039,6 @@ public class CallCardPresenter @Override public void onInCallScreenResumed() { - EnrichedCallComponent.get(mContext).getEnrichedCallManager().registerStateChangedListener(this); updatePrimaryDisplayInfo(); if (shouldSendAccessibilityEvent) { @@ -1072,11 +1047,7 @@ public class CallCardPresenter } @Override - public void onInCallScreenPaused() { - EnrichedCallComponent.get(mContext) - .getEnrichedCallManager() - .unregisterStateChangedListener(this); - } + public void onInCallScreenPaused() {} static boolean sendAccessibilityEvent(Context context, InCallScreen inCallScreen) { AccessibilityManager am = diff --git a/java/com/android/incallui/CallerInfoUtils.java b/java/com/android/incallui/CallerInfoUtils.java index 564446647..8f2310760 100644 --- a/java/com/android/incallui/CallerInfoUtils.java +++ b/java/com/android/incallui/CallerInfoUtils.java @@ -282,4 +282,11 @@ public class CallerInfoUtils { }); loader.startLoading(); } + + /** @return conference name for conference call. */ + public static String getConferenceString(Context context, boolean isGenericConference) { + final int resId = + isGenericConference ? R.string.generic_conference_call_name : R.string.conference_call_name; + return context.getResources().getString(resId); + } } diff --git a/java/com/android/incallui/ContactInfoCache.java b/java/com/android/incallui/ContactInfoCache.java index e45eb9746..fdfba3b9f 100644 --- a/java/com/android/incallui/ContactInfoCache.java +++ b/java/com/android/incallui/ContactInfoCache.java @@ -33,6 +33,7 @@ import android.support.annotation.MainThread; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.WorkerThread; +import android.support.v4.content.ContextCompat; import android.support.v4.os.UserManagerCompat; import android.telecom.TelecomManager; import android.telephony.PhoneNumberUtils; @@ -406,7 +407,7 @@ public class ContactInfoCache implements OnImageLoadCompleteListener { } else { ContactCacheEntry initialCacheEntry = updateCallerInfoInCacheOnAnyThread( - callId, call.getNumberPresentation(), callerInfo, isIncoming, false, queryToken); + callId, call.getNumberPresentation(), callerInfo, false, queryToken); sendInfoNotifications(callId, initialCacheEntry); } } @@ -416,7 +417,6 @@ public class ContactInfoCache implements OnImageLoadCompleteListener { String callId, int numberPresentation, CallerInfo callerInfo, - boolean isIncoming, boolean didLocalLookup, CallerInfoQueryToken queryToken) { Log.d( @@ -443,16 +443,7 @@ public class ContactInfoCache implements OnImageLoadCompleteListener { Log.d(TAG, "Existing cacheEntry in hashMap " + existingCacheEntry); if (didLocalLookup) { - // Before issuing a request for more data from other services, we only check that the - // contact wasn't found in the local DB. We don't check the if the cache entry already - // has a name because we allow overriding cnap data with data from other services. - if (!callerInfo.contactExists && mPhoneNumberService != null) { - Log.d(TAG, "Contact lookup. Local contacts miss, checking remote"); - final PhoneNumberServiceListener listener = - new PhoneNumberServiceListener(callId, queryToken.mQueryId); - cacheEntry.hasPendingQuery = true; - mPhoneNumberService.getPhoneNumberInfo(cacheEntry.number, listener, listener, isIncoming); - } else if (cacheEntry.displayPhotoUri != null) { + if (cacheEntry.displayPhotoUri != null) { // When the difference between 2 numbers is only the prefix (e.g. + or IDD), // we will still trigger force query so that the number can be updated on // the calling screen. We need not query the image again if the previous @@ -606,7 +597,7 @@ public class ContactInfoCache implements OnImageLoadCompleteListener { // This will only be true for emergency numbers if (info.photoResource != 0) { - cce.photo = context.getResources().getDrawable(info.photoResource); + cce.photo = ContextCompat.getDrawable(context, info.photoResource); } else if (info.isCachedPhotoCurrent) { if (info.cachedPhoto != null) { cce.photo = info.cachedPhoto; @@ -789,7 +780,7 @@ public class ContactInfoCache implements OnImageLoadCompleteListener { maybeUpdateFromCequintCallerId(ci, cw.cnapName, mIsIncoming); long time = SystemClock.uptimeMillis() - start; Log.d(TAG, "Cequint Caller Id look up takes " + time + " ms."); - updateCallerInfoInCacheOnAnyThread(cw.callId, cw.numberPresentation, ci, mIsIncoming, true, mQueryToken); + updateCallerInfoInCacheOnAnyThread(cw.callId, cw.numberPresentation, ci, true, mQueryToken); } @Override @@ -807,6 +798,16 @@ public class ContactInfoCache implements OnImageLoadCompleteListener { clearCallbacks(callId); return; } + // Before issuing a request for more data from other services, we only check that the + // contact wasn't found in the local DB. We don't check the if the cache entry already + // has a name because we allow overriding cnap data with data from other services. + if (!callerInfo.contactExists && mPhoneNumberService != null) { + Log.d(TAG, "Contact lookup. Local contacts miss, checking remote"); + final PhoneNumberServiceListener listener = + new PhoneNumberServiceListener(callId, mQueryToken.mQueryId); + cacheEntry.hasPendingQuery = true; + mPhoneNumberService.getPhoneNumberInfo(cacheEntry.number, listener, listener, mIsIncoming); + } sendInfoNotifications(callId, cacheEntry); if (!cacheEntry.hasPendingQuery) { if (callerInfo.contactExists) { @@ -870,6 +871,7 @@ public class ContactInfoCache implements OnImageLoadCompleteListener { entry.shouldShowLocation = oldEntry.shouldShowLocation; // Contact specific ringtone is obtained from local lookup. entry.contactRingtoneUri = oldEntry.contactRingtoneUri; + entry.originalPhoneNumber = oldEntry.originalPhoneNumber; } // If no image and it's a business, switch to using the default business avatar. diff --git a/java/com/android/incallui/ExternalCallNotifier.java b/java/com/android/incallui/ExternalCallNotifier.java index 0c2493c60..f01a29458 100644 --- a/java/com/android/incallui/ExternalCallNotifier.java +++ b/java/com/android/incallui/ExternalCallNotifier.java @@ -29,6 +29,7 @@ import android.net.Uri; import android.os.Build.VERSION_CODES; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.v4.os.BuildCompat; import android.telecom.Call; import android.telecom.PhoneAccount; import android.telecom.VideoProfile; @@ -41,8 +42,7 @@ import com.android.contacts.common.compat.CallCompat; import com.android.contacts.common.preference.ContactsPreferences; import com.android.contacts.common.util.BitmapUtil; import com.android.contacts.common.util.ContactDisplayUtils; -import com.android.dialer.notification.NotificationChannelManager; -import com.android.dialer.notification.NotificationChannelManager.Channel; +import com.android.dialer.notification.NotificationChannelId; import com.android.incallui.call.DialerCall; import com.android.incallui.call.DialerCallDelegate; import com.android.incallui.call.ExternalCallList; @@ -59,9 +59,10 @@ import java.util.Map; public class ExternalCallNotifier implements ExternalCallList.ExternalCallListener { /** Tag used with the notification manager to uniquely identify external call notifications. */ - private static final int NOTIFICATION_ID = R.id.notification_external_call; + private static final String NOTIFICATION_TAG = "EXTERNAL_CALL"; + + private static final int NOTIFICATION_SUMMARY_ID = -1; - private static final String NOTIFICATION_GROUP = "ExternalCallNotifier"; private final Context mContext; private final ContactInfoCache mContactInfoCache; private Map mNotifications = new ArrayMap<>(); @@ -188,15 +189,14 @@ public class ExternalCallNotifier implements ExternalCallList.ExternalCallListen NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.cancel( - String.valueOf(mNotifications.get(call).getNotificationId()), NOTIFICATION_ID); + notificationManager.cancel(NOTIFICATION_TAG, mNotifications.get(call).getNotificationId()); mNotifications.remove(call); if (mShowingSummary && mNotifications.size() <= 1) { // Where a summary notification is showing and there is now not enough notifications to // necessitate a summary, cancel the summary. - notificationManager.cancel(NOTIFICATION_GROUP, NOTIFICATION_ID); + notificationManager.cancel(NOTIFICATION_TAG, NOTIFICATION_SUMMARY_ID); mShowingSummary = false; // If there is still a single call requiring a notification, re-post the notification as a @@ -237,7 +237,7 @@ public class ExternalCallNotifier implements ExternalCallList.ExternalCallListen builder.setOngoing(true); // Make the notification prioritized over the other normal notifications. builder.setPriority(Notification.PRIORITY_HIGH); - builder.setGroup(NOTIFICATION_GROUP); + builder.setGroup(NOTIFICATION_TAG); boolean isVideoCall = VideoProfile.isVideo(info.getCall().getDetails().getVideoState()); // Set the content ("Ongoing call on another device") @@ -251,9 +251,9 @@ public class ExternalCallNotifier implements ExternalCallList.ExternalCallListen builder.setLargeIcon(info.getLargeIcon()); builder.setColor(mContext.getResources().getColor(R.color.dialer_theme_color)); builder.addPerson(info.getPersonReference()); - - NotificationChannelManager.applyChannel( - builder, mContext, Channel.EXTERNAL_CALL, info.getCall().getDetails().getAccountHandle()); + if (BuildCompat.isAtLeastO()) { + builder.setChannelId(NotificationChannelId.DEFAULT); + } // Where the external call supports being transferred to the local device, add an action // to the notification to initiate the call pull process. @@ -286,20 +286,16 @@ public class ExternalCallNotifier implements ExternalCallList.ExternalCallListen Notification.Builder publicBuilder = new Notification.Builder(mContext); publicBuilder.setSmallIcon(R.drawable.quantum_ic_call_white_24); publicBuilder.setColor(mContext.getResources().getColor(R.color.dialer_theme_color)); - - NotificationChannelManager.applyChannel( - publicBuilder, - mContext, - Channel.EXTERNAL_CALL, - info.getCall().getDetails().getAccountHandle()); + if (BuildCompat.isAtLeastO()) { + publicBuilder.setChannelId(NotificationChannelId.DEFAULT); + } builder.setPublicVersion(publicBuilder.build()); Notification notification = builder.build(); NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.notify( - String.valueOf(info.getNotificationId()), NOTIFICATION_ID, notification); + notificationManager.notify(NOTIFICATION_TAG, info.getNotificationId(), notification); if (!mShowingSummary && mNotifications.size() > 1) { // If the number of notifications shown is > 1, and we're not already showing a group summary, @@ -310,12 +306,13 @@ public class ExternalCallNotifier implements ExternalCallList.ExternalCallListen summary.setOngoing(true); // Make the notification prioritized over the other normal notifications. summary.setPriority(Notification.PRIORITY_HIGH); - summary.setGroup(NOTIFICATION_GROUP); + summary.setGroup(NOTIFICATION_TAG); summary.setGroupSummary(true); summary.setSmallIcon(R.drawable.quantum_ic_call_white_24); - NotificationChannelManager.applyChannel( - summary, mContext, Channel.EXTERNAL_CALL, info.getCall().getDetails().getAccountHandle()); - notificationManager.notify(NOTIFICATION_GROUP, NOTIFICATION_ID, summary.build()); + if (BuildCompat.isAtLeastO()) { + summary.setChannelId(NotificationChannelId.DEFAULT); + } + notificationManager.notify(NOTIFICATION_TAG, NOTIFICATION_SUMMARY_ID, summary.build()); mShowingSummary = true; } } @@ -384,11 +381,10 @@ public class ExternalCallNotifier implements ExternalCallList.ExternalCallListen ContactInfoCache.ContactCacheEntry contactInfo, android.telecom.Call call) { - if (call.getDetails().hasProperty(android.telecom.Call.Details.PROPERTY_CONFERENCE) - && !call.getDetails() - .hasProperty(android.telecom.Call.Details.PROPERTY_GENERIC_CONFERENCE)) { - - return context.getResources().getString(R.string.conference_call_name); + if (call.getDetails().hasProperty(android.telecom.Call.Details.PROPERTY_CONFERENCE)) { + return CallerInfoUtils.getConferenceString( + context, + call.getDetails().hasProperty(android.telecom.Call.Details.PROPERTY_GENERIC_CONFERENCE)); } String preferredName = diff --git a/java/com/android/incallui/InCallActivity.java b/java/com/android/incallui/InCallActivity.java index cc9a8e438..6ea31fc4c 100644 --- a/java/com/android/incallui/InCallActivity.java +++ b/java/com/android/incallui/InCallActivity.java @@ -35,9 +35,9 @@ import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import com.android.dialer.common.Assert; -import com.android.dialer.common.ConfigProviderBindings; import com.android.dialer.common.LogUtil; import com.android.dialer.compat.ActivityCompat; +import com.android.dialer.configprovider.ConfigProviderBindings; import com.android.dialer.logging.Logger; import com.android.dialer.logging.ScreenEvent; import com.android.incallui.answer.bindings.AnswerBindings; @@ -630,12 +630,22 @@ public class InCallActivity extends TransactionSafeFragmentActivity AnswerScreen answerScreen = getAnswerScreen(); if (answerScreen.getCallId().equals(call.getId()) && answerScreen.isVideoCall() == call.isVideoCall() - && answerScreen.isVideoUpgradeRequest() == isVideoUpgradeRequest) { + && answerScreen.isVideoUpgradeRequest() == isVideoUpgradeRequest + && !answerScreen.isActionTimeout()) { + LogUtil.d( + "InCallActivity.showAnswerScreenFragment", + "answer fragment exists for same call and has NOT been accepted/rejected/timed out"); return false; } - LogUtil.i( - "InCallActivity.showAnswerScreenFragment", - "answer fragment exists but arguments do not match"); + if (answerScreen.isActionTimeout()) { + LogUtil.i( + "InCallActivity.showAnswerScreenFragment", + "answer fragment exists but has been accepted/rejected and timed out"); + } else { + LogUtil.i( + "InCallActivity.showAnswerScreenFragment", + "answer fragment exists but arguments do not match"); + } hideAnswerScreenFragment(transaction); } @@ -694,13 +704,8 @@ public class InCallActivity extends TransactionSafeFragmentActivity if (didShowInCallScreen) { return false; } - InCallScreen inCallScreen = getInCallScreen(); - if (inCallScreen == null) { - inCallScreen = InCallBindings.createInCallScreen(); - transaction.add(R.id.main, inCallScreen.getInCallScreenFragment(), TAG_IN_CALL_SCREEN); - } else { - transaction.show(inCallScreen.getInCallScreenFragment()); - } + InCallScreen inCallScreen = InCallBindings.createInCallScreen(); + transaction.add(R.id.main, inCallScreen.getInCallScreenFragment(), TAG_IN_CALL_SCREEN); Logger.get(this).logScreenView(ScreenEvent.Type.INCALL, this); didShowInCallScreen = true; return true; @@ -712,7 +717,7 @@ public class InCallActivity extends TransactionSafeFragmentActivity } InCallScreen inCallScreen = getInCallScreen(); if (inCallScreen != null) { - transaction.hide(inCallScreen.getInCallScreenFragment()); + transaction.remove(inCallScreen.getInCallScreenFragment()); } didShowInCallScreen = false; return true; diff --git a/java/com/android/incallui/InCallPresenter.java b/java/com/android/incallui/InCallPresenter.java index 2d6d83c3c..0bfd67e87 100644 --- a/java/com/android/incallui/InCallPresenter.java +++ b/java/com/android/incallui/InCallPresenter.java @@ -695,7 +695,10 @@ public class InCallPresenter implements CallList.Listener { if (newState == InCallState.INCOMING && (waitingForAccountCall = callList.getWaitingForAccountCall()) != null) { waitingForAccountCall.disconnect(); - mInCallActivity.dismissPendingDialogs(); + // The InCallActivity might be destroyed or not started yet at this point. + if (isActivityStarted()) { + mInCallActivity.dismissPendingDialogs(); + } } newState = startOrFinishUi(newState); @@ -1011,6 +1014,13 @@ public class InCallPresenter implements CallList.Listener { } } + public void refreshUi() { + if (mInCallActivity != null) { + // Re-evaluate which fragment is being shown. + mInCallActivity.onPrimaryCallStateChanged(); + } + } + public void addInCallUiListener(InCallUiListener listener) { mInCallUiListeners.add(listener); } diff --git a/java/com/android/incallui/InCallServiceImpl.java b/java/com/android/incallui/InCallServiceImpl.java index 4ab92a797..d2b029741 100644 --- a/java/com/android/incallui/InCallServiceImpl.java +++ b/java/com/android/incallui/InCallServiceImpl.java @@ -36,6 +36,8 @@ import com.android.incallui.call.TelecomAdapter; */ public class InCallServiceImpl extends InCallService { + private ReturnToCallController returnToCallController; + @Override public void onCallAudioStateChanged(CallAudioState audioState) { AudioModeProvider.getInstance().onAudioStateChanged(audioState); @@ -79,6 +81,9 @@ public class InCallServiceImpl extends InCallService { InCallPresenter.getInstance().onServiceBind(); InCallPresenter.getInstance().maybeStartRevealAnimation(intent); TelecomAdapter.getInstance().setInCallService(this); + if (ReturnToCallController.isEnabled(this)) { + returnToCallController = new ReturnToCallController(this); + } return super.onBind(intent); } @@ -98,5 +103,9 @@ public class InCallServiceImpl extends InCallService { // Tear down the InCall system TelecomAdapter.getInstance().clearInCallService(); InCallPresenter.getInstance().tearDown(); + if (returnToCallController != null) { + returnToCallController.tearDown(); + returnToCallController = null; + } } } diff --git a/java/com/android/incallui/ReturnToCallActionReceiver.java b/java/com/android/incallui/ReturnToCallActionReceiver.java new file mode 100644 index 000000000..b645c155c --- /dev/null +++ b/java/com/android/incallui/ReturnToCallActionReceiver.java @@ -0,0 +1,132 @@ +/* + * 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.incallui; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.telecom.CallAudioState; +import com.android.dialer.common.LogUtil; +import com.android.dialer.logging.DialerImpression; +import com.android.dialer.logging.Logger; +import com.android.incallui.audiomode.AudioModeProvider; +import com.android.incallui.call.CallList; +import com.android.incallui.call.DialerCall; +import com.android.incallui.call.TelecomAdapter; + +/** Handles clicks on the return-to-call bubble */ +public class ReturnToCallActionReceiver extends BroadcastReceiver { + + public static final String ACTION_TOGGLE_SPEAKER = "toggleSpeaker"; + public static final String ACTION_SHOW_AUDIO_ROUTE_SELECTOR = "showAudioRouteSelector"; + public static final String ACTION_TOGGLE_MUTE = "toggleMute"; + public static final String ACTION_END_CALL = "endCall"; + + @Override + public void onReceive(Context context, Intent intent) { + switch (intent.getAction()) { + case ACTION_TOGGLE_SPEAKER: + toggleSpeaker(context); + break; + case ACTION_SHOW_AUDIO_ROUTE_SELECTOR: + showAudioRouteSelector(context); + break; + case ACTION_TOGGLE_MUTE: + toggleMute(context); + break; + case ACTION_END_CALL: + endCall(context); + break; + } + } + + private void toggleSpeaker(Context context) { + CallAudioState audioState = AudioModeProvider.getInstance().getAudioState(); + + if ((audioState.getSupportedRouteMask() & CallAudioState.ROUTE_BLUETOOTH) + == CallAudioState.ROUTE_BLUETOOTH) { + LogUtil.w( + "ReturnToCallActionReceiver.toggleSpeaker", + "toggleSpeaker() called when bluetooth available." + + " Probably should have shown audio route selector"); + } + + DialerCall call = getCall(); + + int newRoute; + if (audioState.getRoute() == CallAudioState.ROUTE_SPEAKER) { + newRoute = CallAudioState.ROUTE_WIRED_OR_EARPIECE; + Logger.get(context) + .logCallImpression( + DialerImpression.Type.BUBBLE_TURN_ON_WIRED_OR_EARPIECE, + call != null ? call.getUniqueCallId() : "", + call != null ? call.getTimeAddedMs() : 0); + } else { + newRoute = CallAudioState.ROUTE_SPEAKER; + Logger.get(context) + .logCallImpression( + DialerImpression.Type.BUBBLE_TURN_ON_SPEAKERPHONE, + call != null ? call.getUniqueCallId() : "", + call != null ? call.getTimeAddedMs() : 0); + } + TelecomAdapter.getInstance().setAudioRoute(newRoute); + } + + public void showAudioRouteSelector(Context context) { + context.startActivity(new Intent(context, AudioRouteSelectorActivity.class)); + } + + private void toggleMute(Context context) { + DialerCall call = getCall(); + boolean shouldMute = !AudioModeProvider.getInstance().getAudioState().isMuted(); + Logger.get(context) + .logCallImpression( + shouldMute + ? DialerImpression.Type.BUBBLE_MUTE_CALL + : DialerImpression.Type.BUBBLE_UNMUTE_CALL, + call != null ? call.getUniqueCallId() : "", + call != null ? call.getTimeAddedMs() : 0); + TelecomAdapter.getInstance().mute(shouldMute); + } + + private void endCall(Context context) { + DialerCall call = getCall(); + + Logger.get(context) + .logCallImpression( + DialerImpression.Type.BUBBLE_END_CALL, + call != null ? call.getUniqueCallId() : "", + call != null ? call.getTimeAddedMs() : 0); + if (call != null) { + call.disconnect(); + } + } + + private DialerCall getCall() { + CallList callList = InCallPresenter.getInstance().getCallList(); + if (callList != null) { + DialerCall call = callList.getOutgoingCall(); + if (call == null) { + call = callList.getActiveOrBackgroundCall(); + } + if (call != null) { + return call; + } + } + return null; + } +} diff --git a/java/com/android/incallui/ReturnToCallController.java b/java/com/android/incallui/ReturnToCallController.java new file mode 100644 index 000000000..314aa45d4 --- /dev/null +++ b/java/com/android/incallui/ReturnToCallController.java @@ -0,0 +1,212 @@ +/* + * 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.incallui; + +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.graphics.drawable.Icon; +import android.support.annotation.NonNull; +import android.support.annotation.VisibleForTesting; +import android.telecom.CallAudioState; +import com.android.dialer.common.LogUtil; +import com.android.dialer.configprovider.ConfigProviderBindings; +import com.android.dialer.telecom.TelecomUtil; +import com.android.dialershared.bubble.Bubble; +import com.android.dialershared.bubble.BubbleInfo; +import com.android.dialershared.bubble.BubbleInfo.Action; +import com.android.incallui.InCallPresenter.InCallUiListener; +import com.android.incallui.audiomode.AudioModeProvider; +import com.android.incallui.audiomode.AudioModeProvider.AudioModeListener; +import com.android.incallui.call.CallList; +import com.android.incallui.call.CallList.Listener; +import com.android.incallui.call.DialerCall; +import com.android.incallui.speakerbuttonlogic.SpeakerButtonInfo; +import com.android.incallui.speakerbuttonlogic.SpeakerButtonInfo.IconSize; +import java.util.ArrayList; +import java.util.List; + +/** + * Listens for events relevant to the return-to-call bubble and updates the bubble's state as + * necessary + */ +public class ReturnToCallController implements InCallUiListener, Listener, AudioModeListener { + + private final Context context; + + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + Bubble bubble; + + private CallAudioState audioState; + + private final PendingIntent toggleSpeaker; + private final PendingIntent showSpeakerSelect; + private final PendingIntent toggleMute; + private final PendingIntent endCall; + + public static boolean isEnabled(Context context) { + return !ConfigProviderBindings.get(context).getBoolean("disable_return_to_call_bubble", false); + } + + public ReturnToCallController(Context context) { + this.context = context; + + toggleSpeaker = createActionIntent(ReturnToCallActionReceiver.ACTION_TOGGLE_SPEAKER); + showSpeakerSelect = + createActionIntent(ReturnToCallActionReceiver.ACTION_SHOW_AUDIO_ROUTE_SELECTOR); + toggleMute = createActionIntent(ReturnToCallActionReceiver.ACTION_TOGGLE_MUTE); + endCall = createActionIntent(ReturnToCallActionReceiver.ACTION_END_CALL); + + InCallPresenter.getInstance().addInCallUiListener(this); + CallList.getInstance().addListener(this); + AudioModeProvider.getInstance().addListener(this); + audioState = AudioModeProvider.getInstance().getAudioState(); + } + + public void tearDown() { + InCallPresenter.getInstance().removeInCallUiListener(this); + CallList.getInstance().removeListener(this); + AudioModeProvider.getInstance().removeListener(this); + } + + @Override + public void onUiShowing(boolean showing) { + if (showing) { + hide(); + } else { + if (TelecomUtil.isInCall(context)) { + show(); + } + } + } + + private void hide() { + if (bubble != null) { + bubble.hide(); + } else { + LogUtil.i("ReturnToCallController.hide", "hide() called without calling show()"); + } + } + + private void show() { + if (bubble == null) { + bubble = startNewBubble(); + } else { + bubble.show(); + } + } + + private Bubble startNewBubble() { + if (!Bubble.canShowBubbles(context)) { + LogUtil.i("ReturnToCallController.startNewBubble", "can't show bubble, no permission"); + context.startActivity(Bubble.getRequestPermissionIntent(context)); + return null; + } + Bubble returnToCallBubble = Bubble.createBubble(context, generateBubbleInfo()); + returnToCallBubble.show(); + return returnToCallBubble; + } + + @Override + public void onIncomingCall(DialerCall call) {} + + @Override + public void onUpgradeToVideo(DialerCall call) {} + + @Override + public void onSessionModificationStateChange(DialerCall call) {} + + @Override + public void onCallListChange(CallList callList) {} + + @Override + public void onDisconnect(DialerCall call) { + if (bubble != null && bubble.isShowing()) { + bubble.showText(context.getText(R.string.incall_call_ended)); + } + + if (!TelecomUtil.isInCall(context)) { + hide(); + } + } + + @Override + public void onWiFiToLteHandover(DialerCall call) {} + + @Override + public void onHandoverToWifiFailed(DialerCall call) {} + + @Override + public void onInternationalCallOnWifi(@NonNull DialerCall call) {} + + @Override + public void onAudioStateChanged(CallAudioState audioState) { + this.audioState = audioState; + if (bubble != null) { + bubble.updateActions(generateActions()); + } + } + + private BubbleInfo generateBubbleInfo() { + Intent activityIntent = InCallActivity.getIntent(context, false, false, false); + activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + return BubbleInfo.builder() + .setPrimaryColor(context.getResources().getColor(R.color.dialer_theme_color, null)) + .setPrimaryIcon(Icon.createWithResource(context, R.drawable.on_going_call)) + .setStartingYPosition( + context.getResources().getDimensionPixelOffset(R.dimen.return_to_call_initial_offset_y)) + .setPrimaryIntent(PendingIntent.getActivity(context, 0, activityIntent, 0)) + .setActions(generateActions()) + .build(); + } + + @NonNull + private List generateActions() { + List actions = new ArrayList<>(); + SpeakerButtonInfo speakerButtonInfo = new SpeakerButtonInfo(audioState, IconSize.SIZE_24_DP); + + actions.add( + Action.builder() + .setIcon(Icon.createWithResource(context, speakerButtonInfo.icon)) + .setName(context.getText(speakerButtonInfo.label)) + .setChecked(speakerButtonInfo.isChecked) + .setIntent(speakerButtonInfo.checkable ? toggleSpeaker : showSpeakerSelect) + .build()); + + actions.add( + Action.builder() + .setIcon(Icon.createWithResource(context, R.drawable.quantum_ic_mic_off_white_24)) + .setName(context.getText(R.string.incall_label_mute)) + .setChecked(audioState.isMuted()) + .setIntent(toggleMute) + .build()); + actions.add( + Action.builder() + .setIcon(Icon.createWithResource(context, R.drawable.quantum_ic_call_end_white_24)) + .setName(context.getText(R.string.incall_label_end_call)) + .setIntent(endCall) + .build()); + return actions; + } + + @NonNull + private PendingIntent createActionIntent(String action) { + Intent toggleSpeaker = new Intent(context, ReturnToCallActionReceiver.class); + toggleSpeaker.setAction(action); + return PendingIntent.getBroadcast(context, 0, toggleSpeaker, 0); + } +} diff --git a/java/com/android/incallui/StatusBarNotifier.java b/java/com/android/incallui/StatusBarNotifier.java index 165b30b52..458df5149 100644 --- a/java/com/android/incallui/StatusBarNotifier.java +++ b/java/com/android/incallui/StatusBarNotifier.java @@ -28,7 +28,6 @@ import static com.android.incallui.NotificationBroadcastReceiver.ACTION_HANG_UP_ import android.Manifest; import android.app.ActivityManager; import android.app.Notification; -import android.app.Notification.Builder; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; @@ -62,16 +61,15 @@ import android.text.style.ForegroundColorSpan; import com.android.contacts.common.ContactsUtils; import com.android.contacts.common.ContactsUtils.UserType; import com.android.contacts.common.lettertiles.LetterTileDrawable; +import com.android.contacts.common.lettertiles.LetterTileDrawable.ContactType; import com.android.contacts.common.preference.ContactsPreferences; import com.android.contacts.common.util.BitmapUtil; import com.android.contacts.common.util.ContactDisplayUtils; import com.android.dialer.common.LogUtil; -import com.android.dialer.enrichedcall.EnrichedCallComponent; import com.android.dialer.enrichedcall.EnrichedCallManager; import com.android.dialer.enrichedcall.Session; import com.android.dialer.multimedia.MultimediaData; -import com.android.dialer.notification.NotificationChannelManager; -import com.android.dialer.notification.NotificationChannelManager.Channel; +import com.android.dialer.notification.NotificationChannelId; import com.android.dialer.oem.MotorolaUtils; import com.android.dialer.util.DrawableConverter; import com.android.incallui.ContactInfoCache.ContactCacheEntry; @@ -93,6 +91,9 @@ import java.util.Objects; public class StatusBarNotifier implements InCallPresenter.InCallStateListener, EnrichedCallManager.StateChangedListener { + private static final String NOTIFICATION_TAG = "STATUS_BAR_NOTIFIER"; + private static final int NOTIFICATION_ID = 1; + // Notification types // Indicates that no notification is currently showing. private static final int NOTIFICATION_NONE = 0; @@ -147,7 +148,7 @@ public class StatusBarNotifier NotificationManager notificationManager = backupContext.getSystemService(NotificationManager.class); - notificationManager.cancel(R.id.notification_ongoing_call); + notificationManager.cancel(NOTIFICATION_TAG, NOTIFICATION_ID); } private static int getWorkStringFromPersonalString(int resId) { @@ -173,12 +174,6 @@ public class StatusBarNotifier return PendingIntent.getBroadcast(context, 0, intent, 0); } - private static void setColorized(@NonNull Builder builder) { - if (BuildCompat.isAtLeastO()) { - builder.setColorized(true); - } - } - /** Creates notifications according to the state we receive from {@link InCallPresenter}. */ @Override @RequiresPermission(Manifest.permission.READ_PHONE_STATE) @@ -226,7 +221,7 @@ public class StatusBarNotifier } if (mCurrentNotification != NOTIFICATION_NONE) { LogUtil.i("StatusBarNotifier.cancelNotification", "cancel"); - mNotificationManager.cancel(R.id.notification_ongoing_call); + mNotificationManager.cancel(NOTIFICATION_TAG, NOTIFICATION_ID); } mCurrentNotification = NOTIFICATION_NONE; } @@ -365,13 +360,13 @@ public class StatusBarNotifier LogUtil.i("StatusBarNotifier.buildAndSendNotification", "notificationType=" + notificationType); switch (notificationType) { case NOTIFICATION_INCOMING_CALL: - NotificationChannelManager.applyChannel( - builder, mContext, Channel.INCOMING_CALL, accountHandle); + if (BuildCompat.isAtLeastO()) { + builder.setChannelId(NotificationChannelId.INCOMING_CALL); + } configureFullScreenIntent(builder, createLaunchPendingIntent(true /* isFullScreen */)); // Set the notification category and bump the priority for incoming calls builder.setCategory(Notification.CATEGORY_CALL); // This will be ignored on O+ and handled by the channel - //noinspection deprecation builder.setPriority(Notification.PRIORITY_MAX); if (mCurrentNotification != NOTIFICATION_INCOMING_CALL) { LogUtil.i( @@ -379,18 +374,20 @@ public class StatusBarNotifier "Canceling old notification so this one can be noisy"); // Moving from a non-interuptive notification (or none) to a noisy one. Cancel the old // notification (if there is one) so the fullScreenIntent or HUN will show - mNotificationManager.cancel(R.id.notification_ongoing_call); + mNotificationManager.cancel(NOTIFICATION_TAG, NOTIFICATION_ID); } break; case NOTIFICATION_INCOMING_CALL_QUIET: - NotificationChannelManager.applyChannel( - builder, mContext, Channel.ONGOING_CALL, accountHandle); + if (BuildCompat.isAtLeastO()) { + builder.setChannelId(NotificationChannelId.ONGOING_CALL); + } break; case NOTIFICATION_IN_CALL: - setColorized(publicBuilder); - setColorized(builder); - NotificationChannelManager.applyChannel( - builder, mContext, Channel.ONGOING_CALL, accountHandle); + if (BuildCompat.isAtLeastO()) { + publicBuilder.setColorized(true); + builder.setColorized(true); + builder.setChannelId(NotificationChannelId.ONGOING_CALL); + } break; } @@ -436,7 +433,7 @@ public class StatusBarNotifier "displaying notification for " + notificationType); try { - mNotificationManager.notify(R.id.notification_ongoing_call, notification); + mNotificationManager.notify(NOTIFICATION_TAG, NOTIFICATION_ID, notification); } catch (RuntimeException e) { // TODO(b/34744003): Move the memory stats into silent feedback PSD. ActivityManager activityManager = mContext.getSystemService(ActivityManager.class); @@ -565,8 +562,9 @@ public class StatusBarNotifier @VisibleForTesting @Nullable String getContentTitle(ContactCacheEntry contactInfo, DialerCall call) { - if (call.isConferenceCall() && !call.hasProperty(Details.PROPERTY_GENERIC_CONFERENCE)) { - return mContext.getResources().getString(R.string.conference_call_name); + if (call.isConferenceCall()) { + return CallerInfoUtils.getConferenceString( + mContext, call.hasProperty(Details.PROPERTY_GENERIC_CONFERENCE)); } String preferredName = @@ -604,20 +602,16 @@ public class StatusBarNotifier if (contactInfo.photo == null) { int width = (int) resources.getDimension(android.R.dimen.notification_large_icon_width); int height = (int) resources.getDimension(android.R.dimen.notification_large_icon_height); - int contactType = LetterTileDrawable.TYPE_DEFAULT; + @ContactType + int contactType = + LetterTileDrawable.getContactTypeFromPrimitives( + CallerInfoUtils.isVoiceMailNumber(context, call), + call.isSpam(), + contactInfo.isBusiness, + call.getNumberPresentation(), + call.isConferenceCall() && !call.hasProperty(Details.PROPERTY_GENERIC_CONFERENCE)); LetterTileDrawable lettertile = new LetterTileDrawable(resources); - // TODO: Deduplicate across Dialer. b/36195917 - if (CallerInfoUtils.isVoiceMailNumber(context, call)) { - contactType = LetterTileDrawable.TYPE_VOICEMAIL; - } else if (contactInfo.isBusiness) { - contactType = LetterTileDrawable.TYPE_BUSINESS; - } else if (call.getNumberPresentation() == TelecomManager.PRESENTATION_RESTRICTED) { - contactType = LetterTileDrawable.TYPE_GENERIC_AVATAR; - } else if (call.isConferenceCall() - && !call.hasProperty(Details.PROPERTY_GENERIC_CONFERENCE)) { - contactType = LetterTileDrawable.TYPE_CONFERENCE; - } lettertile.setCanonicalDialerLetterTileDetails( contactInfo.namePrimary == null ? contactInfo.number : contactInfo.namePrimary, contactInfo.lookupKey, @@ -663,13 +657,17 @@ public class StatusBarNotifier return R.drawable.quantum_ic_videocam_white_24; } else if (call.hasProperty(PROPERTY_HIGH_DEF_AUDIO) && MotorolaUtils.shouldShowHdIconInNotification(mContext)) { - // Normally when a call is ongoing the status bar displays an icon of a phone with animated - // lines. This is a helpful hint for users so they know how to get back to the call. - // For Sprint HD calls, we replace this icon with an icon of a phone with a HD badge. - // This is a carrier requirement. + // Normally when a call is ongoing the status bar displays an icon of a phone. This is a + // helpful hint for users so they know how to get back to the call. For Sprint HD calls, we + // replace this icon with an icon of a phone with a HD badge. This is a carrier requirement. return R.drawable.ic_hd_call; } - return R.anim.on_going_call; + // If ReturnToCall is enabled, use the static icon. The animated one will show in the bubble. + if (ReturnToCallController.isEnabled(mContext)) { + return R.drawable.quantum_ic_call_white_24; + } else { + return R.drawable.on_going_call; + } } /** Returns the message to use with the notification. */ @@ -694,20 +692,10 @@ public class StatusBarNotifier } if (isIncomingOrWaiting) { - EnrichedCallManager manager = EnrichedCallComponent.get(mContext).getEnrichedCallManager(); - Session session = null; - if (call.getNumber() != null) { - session = - manager.getSession( - call.getUniqueCallId(), - call.getNumber(), - manager.createIncomingCallComposerFilter()); - } - if (call.isSpam()) { resId = R.string.notification_incoming_spam_call; - } else if (session != null) { - resId = getECIncomingCallText(session); + } else if (shouldShowEnrichedCallNotification(call.getEnrichedCallSession())) { + resId = getECIncomingCallText(call.getEnrichedCallSession()); } else if (call.hasProperty(Details.PROPERTY_WIFI)) { resId = R.string.notification_incoming_call_wifi; } else { @@ -731,6 +719,13 @@ public class StatusBarNotifier return mContext.getString(resId); } + private boolean shouldShowEnrichedCallNotification(Session session) { + if (session == null) { + return false; + } + return session.getMultimediaData().hasData() || session.getMultimediaData().isImportant(); + } + private int getECIncomingCallText(Session session) { int resId; MultimediaData data = session.getMultimediaData(); @@ -756,8 +751,10 @@ public class StatusBarNotifier } else { resId = R.string.important_notification_incoming_call_with_photo; } - } else { + } else if (hasSubject) { resId = R.string.important_notification_incoming_call_with_message; + } else { + resId = R.string.important_notification_incoming_call; } if (mContext.getString(resId).length() > 50) { resId = R.string.important_notification_incoming_call_attachments; @@ -827,13 +824,9 @@ public class StatusBarNotifier "will show \"answer\" action in the incoming call Notification"); PendingIntent answerVoicePendingIntent = createNotificationPendingIntent(mContext, ACTION_ANSWER_VOICE_INCOMING_CALL); - // We put animation resources in "anim" folder instead of "drawable", which causes Android - // Studio to complain. - // TODO: Move "anim" resources to "drawable" as recommended in AnimationDrawable doc? - //noinspection ResourceType builder.addAction( new Notification.Action.Builder( - Icon.createWithResource(mContext, R.anim.on_going_call), + Icon.createWithResource(mContext, R.drawable.quantum_ic_call_white_24), getActionText( R.string.notification_action_answer, R.color.notification_action_accept), answerVoicePendingIntent) @@ -931,7 +924,7 @@ public class StatusBarNotifier builder.setOngoing(true); builder.setOnlyAlertOnce(true); // This will be ignored on O+ and handled by the channel - //noinspection deprecation + // noinspection deprecation builder.setPriority(Notification.PRIORITY_HIGH); return builder; @@ -1005,6 +998,9 @@ public class StatusBarNotifier @Override public void onInternationalCallOnWifi() {} + @Override + public void onEnrichedCallSessionUpdate() {} + /** * Responds to changes in the session modification state for the call by dismissing the status * bar notification as required. diff --git a/java/com/android/incallui/VideoCallPresenter.java b/java/com/android/incallui/VideoCallPresenter.java index 31999ef2e..bd9837097 100644 --- a/java/com/android/incallui/VideoCallPresenter.java +++ b/java/com/android/incallui/VideoCallPresenter.java @@ -27,9 +27,9 @@ import android.telecom.VideoProfile.CameraCapabilities; import android.view.Surface; import android.view.SurfaceView; import com.android.dialer.common.Assert; -import com.android.dialer.common.ConfigProviderBindings; import com.android.dialer.common.LogUtil; import com.android.dialer.compat.CompatUtils; +import com.android.dialer.configprovider.ConfigProviderBindings; import com.android.incallui.InCallPresenter.InCallDetailsListener; import com.android.incallui.InCallPresenter.InCallOrientationListener; import com.android.incallui.InCallPresenter.InCallStateListener; diff --git a/java/com/android/incallui/answer/impl/AnswerFragment.java b/java/com/android/incallui/answer/impl/AnswerFragment.java index 1f0541c4b..44310536d 100644 --- a/java/com/android/incallui/answer/impl/AnswerFragment.java +++ b/java/com/android/incallui/answer/impl/AnswerFragment.java @@ -216,6 +216,7 @@ public class AnswerFragment extends Fragment private void performAnswerAndRelease() { restoreAnswerAndReleaseButtonAnimation(); answerScreenDelegate.onAnswerAndReleaseCall(); + buttonAcceptClicked = true; } private void restoreAnswerAndReleaseButtonAnimation() { @@ -358,6 +359,11 @@ public class AnswerFragment extends Fragment return instance; } + @Override + public boolean isActionTimeout() { + return (buttonAcceptClicked || buttonRejectClicked) && answerScreenDelegate.isActionTimeout(); + } + @Override @NonNull public String getCallId() { @@ -427,8 +433,10 @@ public class AnswerFragment extends Fragment if (allowAnswerAndRelease()) { answerAndReleaseButton.setVisibility(View.VISIBLE); + answerScreenDelegate.onAnswerAndReleaseButtonEnabled(); } else { answerAndReleaseButton.setVisibility(View.INVISIBLE); + answerScreenDelegate.onAnswerAndReleaseButtonDisabled(); } } @@ -524,6 +532,7 @@ public class AnswerFragment extends Fragment if (!isAdded()) { return; } + LogUtil.enterBlock("AnswerFragment.updateDataFragment"); Fragment current = getChildFragmentManager().findFragmentById(R.id.incall_data_container); Fragment newFragment = null; @@ -540,6 +549,7 @@ public class AnswerFragment extends Fragment || !Objects.equals(((MultimediaFragment) current).getSubject(), subject) || !Objects.equals(((MultimediaFragment) current).getImageUri(), imageUri) || !Objects.equals(((MultimediaFragment) current).getLocation(), location)) { + LogUtil.i("AnswerFragment.updateDataFragment", "Replacing multimedia fragment"); // Needs replacement newFragment = MultimediaFragment.newInstance( @@ -551,12 +561,14 @@ public class AnswerFragment extends Fragment } else if (shouldShowAvatar()) { // Needs Avatar if (!(current instanceof AvatarFragment)) { + LogUtil.i("AnswerFragment.updateDataFragment", "Replacing avatar fragment"); // Needs replacement newFragment = new AvatarFragment(); } } else { // Needs empty if (current != null) { + LogUtil.i("AnswerFragment.updateDataFragment", "Removing current fragment"); getChildFragmentManager().beginTransaction().remove(current).commitNow(); } contactGridManager.setAvatarImageView(null, 0, false); @@ -930,7 +942,7 @@ public class AnswerFragment extends Fragment if (hasCallOnHold()) { getAnswerMethod() .setHintText(getText(R.string.call_incoming_default_label_answer_and_release_third)); - } else { + } else if (primaryCallState.supportsCallOnHold) { getAnswerMethod() .setHintText(getText(R.string.call_incoming_default_label_answer_and_release_second)); } @@ -1019,7 +1031,7 @@ public class AnswerFragment extends Fragment } private void updateImportanceBadgeVisibility() { - if (!isAdded()) { + if (!isAdded() || getView() == null) { return; } diff --git a/java/com/android/incallui/answer/impl/PillDrawable.java b/java/com/android/incallui/answer/impl/PillDrawable.java deleted file mode 100644 index 57d84c45f..000000000 --- a/java/com/android/incallui/answer/impl/PillDrawable.java +++ /dev/null @@ -1,43 +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.incallui.answer.impl; - -import android.graphics.Rect; -import android.graphics.drawable.GradientDrawable; - -/** Draws a pill-shaped background */ -public class PillDrawable extends GradientDrawable { - - public PillDrawable() { - super(); - setShape(RECTANGLE); - } - - @Override - protected void onBoundsChange(Rect r) { - super.onBoundsChange(r); - setCornerRadius(r.height() / 2); - } - - @Override - public void setShape(int shape) { - if (shape != GradientDrawable.RECTANGLE) { - throw new UnsupportedOperationException("PillDrawable must be a rectangle"); - } - super.setShape(shape); - } -} 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 9a49075b8..600115e27 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 @@ -41,6 +41,7 @@ android:layout_marginBottom="116dp" android:layout_gravity="center_horizontal" android:alpha="0" + android:gravity="center_horizontal" android:text="@string/call_incoming_will_disconnect" android:textColor="@color/blue_grey_100" android:textSize="16sp" @@ -59,6 +60,7 @@ android:layout_marginBottom="18dp" android:layout_gravity="center_horizontal" android:focusable="false" + android:gravity="center_horizontal" android:text="@string/call_incoming_swipe_to_answer" android:textAlignment="center" android:textAppearance="@style/Dialer.Incall.TextAppearance.Hint"/> @@ -110,6 +112,7 @@ android:layout_gravity="center_horizontal" android:alpha="0" android:focusable="false" + android:gravity="center_horizontal" android:text="@string/call_incoming_swipe_to_reject" android:textAppearance="@style/Dialer.Incall.TextAppearance.Hint" tools:alpha="1"/> diff --git a/java/com/android/incallui/answer/impl/classifier/HumanInteractionClassifier.java b/java/com/android/incallui/answer/impl/classifier/HumanInteractionClassifier.java index 1d3d7ef22..5e83dfc78 100644 --- a/java/com/android/incallui/answer/impl/classifier/HumanInteractionClassifier.java +++ b/java/com/android/incallui/answer/impl/classifier/HumanInteractionClassifier.java @@ -20,7 +20,7 @@ import android.content.Context; import android.hardware.SensorEvent; import android.util.DisplayMetrics; import android.view.MotionEvent; -import com.android.dialer.common.ConfigProviderBindings; +import com.android.dialer.configprovider.ConfigProviderBindings; /** An classifier trying to determine whether it is a human interacting with the phone or not. */ class HumanInteractionClassifier extends Classifier { diff --git a/java/com/android/incallui/answer/impl/hint/AnswerHintFactory.java b/java/com/android/incallui/answer/impl/hint/AnswerHintFactory.java index 77b45ec71..94cf893f0 100644 --- a/java/com/android/incallui/answer/impl/hint/AnswerHintFactory.java +++ b/java/com/android/incallui/answer/impl/hint/AnswerHintFactory.java @@ -23,9 +23,8 @@ import android.os.Build; import android.support.annotation.NonNull; import android.support.annotation.VisibleForTesting; 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.configprovider.ConfigProviderBindings; import com.android.dialer.util.DialerUtils; import com.android.incallui.util.AccessibilityUtil; @@ -35,8 +34,9 @@ import com.android.incallui.util.AccessibilityUtil; */ public class AnswerHintFactory { - private static final String CONFIG_ANSWER_HINT_ANSWERED_THRESHOLD_KEY = - "answer_hint_answered_threshold"; + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + static final String CONFIG_ANSWER_HINT_ANSWERED_THRESHOLD_KEY = "answer_hint_answered_threshold"; + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) static final String CONFIG_ANSWER_HINT_WHITELISTED_DEVICES_KEY = "answer_hint_whitelisted_devices"; @@ -58,12 +58,7 @@ public class AnswerHintFactory { @NonNull public AnswerHint create(Context context, long puckUpDuration, long puckUpDelay) { - - if (shouldShowAnswerHint( - context, - ConfigProviderBindings.get(context), - DialerUtils.getDefaultSharedPreferenceForDeviceProtectedStorageContext(context), - Build.PRODUCT)) { + if (shouldShowAnswerHint(context, Build.PRODUCT)) { return new DotAnswerHint(context, puckUpDuration, puckUpDelay); } @@ -84,24 +79,23 @@ public class AnswerHintFactory { } @VisibleForTesting - static boolean shouldShowAnswerHint( - Context context, - ConfigProvider configProvider, - SharedPreferences sharedPreferences, - String device) { + static boolean shouldShowAnswerHint(Context context, String device) { if (AccessibilityUtil.isTouchExplorationEnabled(context)) { return false; } // Devices that has the legacy dialer installed are whitelisted as they are likely to go through // a UX change during updates. - if (!isDeviceWhitelisted(device, configProvider)) { + if (!isDeviceWhitelisted(context, device)) { return false; } // If the user has gone through the process a few times we can assume they have learnt the // method. - int answeredCount = sharedPreferences.getInt(ANSWERED_COUNT_PREFERENCE_KEY, 0); - long threshold = configProvider.getLong(CONFIG_ANSWER_HINT_ANSWERED_THRESHOLD_KEY, 3); + int answeredCount = + DialerUtils.getDefaultSharedPreferenceForDeviceProtectedStorageContext(context) + .getInt(ANSWERED_COUNT_PREFERENCE_KEY, 0); + long threshold = + ConfigProviderBindings.get(context).getLong(CONFIG_ANSWER_HINT_ANSWERED_THRESHOLD_KEY, 3); LogUtil.i( "AnswerHintFactory.shouldShowAnswerHint", "answerCount: %d, threshold: %d", @@ -115,8 +109,8 @@ public class AnswerHintFactory { * @param configProvider should provide a list of devices quoted with '/' concatenated to a * string. */ - private static boolean isDeviceWhitelisted(String device, ConfigProvider configProvider) { - return configProvider + private static boolean isDeviceWhitelisted(Context context, String device) { + return ConfigProviderBindings.get(context) .getString(CONFIG_ANSWER_HINT_WHITELISTED_DEVICES_KEY, DEFAULT_WHITELISTED_DEVICES_CSV) .contains("/" + device + "/"); } diff --git a/java/com/android/incallui/answer/impl/hint/PawImageLoaderImpl.java b/java/com/android/incallui/answer/impl/hint/PawImageLoaderImpl.java index 21154cade..05358d831 100644 --- a/java/com/android/incallui/answer/impl/hint/PawImageLoaderImpl.java +++ b/java/com/android/incallui/answer/impl/hint/PawImageLoaderImpl.java @@ -24,7 +24,9 @@ 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.util.DialerUtils; +import com.android.incallui.answer.impl.hint.PawSecretCodeListener.PawType; /** Decrypt the event payload to be shown if in a specific time range and the key is received. */ @TargetApi(VERSION_CODES.M) @@ -40,10 +42,25 @@ public final class PawImageLoaderImpl implements PawImageLoader { if (!preferences.getBoolean(PawSecretCodeListener.PAW_ENABLED_WITH_SECRET_CODE_KEY, false)) { return null; } - int drawableId = preferences.getInt(PawSecretCodeListener.PAW_DRAWABLE_ID_KEY, 0); - if (drawableId == 0) { - return null; + @PawType + int pawType = + preferences.getInt(PawSecretCodeListener.PAW_TYPE, PawSecretCodeListener.PAW_TYPE_INVALID); + + if (pawType == PawSecretCodeListener.PAW_TYPE_INVALID) { + LogUtil.i("PawImageLoaderImpl.loadPayload", "paw type not found, rerolling"); + PawSecretCodeListener.selectPawType(preferences); + pawType = + preferences.getInt( + PawSecretCodeListener.PAW_TYPE, PawSecretCodeListener.PAW_TYPE_INVALID); + } + + switch (pawType) { + case PawSecretCodeListener.PAW_TYPE_CAT: + return context.getDrawable(R.drawable.cat_paw); + case PawSecretCodeListener.PAW_TYPE_DOG: + return context.getDrawable(R.drawable.dog_paw); + default: + throw Assert.createAssertionFailException("unknown paw type " + pawType); } - return context.getDrawable(drawableId); } } diff --git a/java/com/android/incallui/answer/impl/hint/PawSecretCodeListener.java b/java/com/android/incallui/answer/impl/hint/PawSecretCodeListener.java index a8737c363..204c4e131 100644 --- a/java/com/android/incallui/answer/impl/hint/PawSecretCodeListener.java +++ b/java/com/android/incallui/answer/impl/hint/PawSecretCodeListener.java @@ -20,15 +20,16 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; -import android.preference.PreferenceManager; +import android.support.annotation.IntDef; import android.support.annotation.VisibleForTesting; import android.text.TextUtils; 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.configprovider.ConfigProviderBindings; import com.android.dialer.logging.DialerImpression.Type; import com.android.dialer.logging.Logger; +import com.android.dialer.util.DialerUtils; import java.util.Random; /** @@ -40,7 +41,20 @@ public class PawSecretCodeListener extends BroadcastReceiver { static final String CONFIG_PAW_SECRET_CODE = "paw_secret_code"; public static final String PAW_ENABLED_WITH_SECRET_CODE_KEY = "paw_enabled_with_secret_code"; - public static final String PAW_DRAWABLE_ID_KEY = "paw_drawable_id"; + + /** Which paw to show, must be {@link PawType} */ + public static final String PAW_TYPE = "paw_type"; + + /** Resource id is not stable across app versions. Use {@link #PAW_TYPE} instead. */ + @Deprecated public static final String PAW_DRAWABLE_ID_KEY = "paw_drawable_id"; + + /** Enum for all paws. */ + @IntDef({PAW_TYPE_INVALID, PAW_TYPE_CAT, PAW_TYPE_DOG}) + @interface PawType {} + + public static final int PAW_TYPE_INVALID = 0; + public static final int PAW_TYPE_CAT = 1; + public static final int PAW_TYPE_DOG = 2; @Override public void onReceive(Context context, Intent intent) { @@ -54,7 +68,8 @@ public class PawSecretCodeListener extends BroadcastReceiver { if (!TextUtils.equals(secretCode, host)) { return; } - SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); + SharedPreferences preferences = + DialerUtils.getDefaultSharedPreferenceForDeviceProtectedStorageContext(context); boolean wasEnabled = preferences.getBoolean(PAW_ENABLED_WITH_SECRET_CODE_KEY, false); if (wasEnabled) { preferences.edit().putBoolean(PAW_ENABLED_WITH_SECRET_CODE_KEY, false).apply(); @@ -62,20 +77,24 @@ public class PawSecretCodeListener extends BroadcastReceiver { Logger.get(context).logImpression(Type.EVENT_ANSWER_HINT_DEACTIVATED); LogUtil.i("PawSecretCodeListener.onReceive", "PawAnswerHint disabled"); } else { - int drawableId; - if (new Random().nextBoolean()) { - drawableId = R.drawable.cat_paw; - } else { - drawableId = R.drawable.dog_paw; - } - preferences - .edit() - .putBoolean(PAW_ENABLED_WITH_SECRET_CODE_KEY, true) - .putInt(PAW_DRAWABLE_ID_KEY, drawableId) - .apply(); + selectPawType(preferences); Toast.makeText(context, R.string.event_activated, Toast.LENGTH_SHORT).show(); Logger.get(context).logImpression(Type.EVENT_ANSWER_HINT_ACTIVATED); LogUtil.i("PawSecretCodeListener.onReceive", "PawAnswerHint enabled"); } } + + public static void selectPawType(SharedPreferences preferences) { + @PawType int pawType; + if (new Random().nextBoolean()) { + pawType = PAW_TYPE_CAT; + } else { + pawType = PAW_TYPE_DOG; + } + preferences + .edit() + .putBoolean(PAW_ENABLED_WITH_SECRET_CODE_KEY, true) + .putInt(PAW_TYPE, pawType) + .apply(); + } } diff --git a/java/com/android/incallui/answer/impl/res/values-af/strings.xml b/java/com/android/incallui/answer/impl/res/values-af/strings.xml index 82a87963d..b155ee874 100644 --- a/java/com/android/incallui/answer/impl/res/values-af/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-af/strings.xml @@ -1,4 +1,20 @@ + + "Swiep vanaf ikoon om met boodskap af te wys" @@ -20,5 +36,5 @@ "Antwoord en beëindig die voortgesette oproep" "Video is af" "Swiep op met twee vingers om te antwoord. Swiep af met twee vingers om af te wys." - "Dringend" + "Belangrik" diff --git a/java/com/android/incallui/answer/impl/res/values-am/strings.xml b/java/com/android/incallui/answer/impl/res/values-am/strings.xml index 40869773e..c27705fd2 100644 --- a/java/com/android/incallui/answer/impl/res/values-am/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-am/strings.xml @@ -1,4 +1,20 @@ + + "በመልዕክት ላለመቀበል ከአዶ ያንሸራቱ" @@ -20,5 +36,5 @@ "ይመልሱ እና በመካሄድ ላይ ያለ ጥሪን ይጨርሱ" "ቪዲዮ ጠፍቷል" "ለመመለስ በሁለት ጣት ወደ ላይ ያንሸራቱ። ላለመቀበል በሁለት ጣት ወደ ታች ያንሸራቱ።" - "አስቸኳይ" + "አስፈላጊ" diff --git a/java/com/android/incallui/answer/impl/res/values-ar/strings.xml b/java/com/android/incallui/answer/impl/res/values-ar/strings.xml index fc29c16fa..e3f84fff5 100644 --- a/java/com/android/incallui/answer/impl/res/values-ar/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-ar/strings.xml @@ -1,4 +1,20 @@ + + "تمرير سريع من الرمز للرفض مع إرسال رسالة" @@ -20,5 +36,5 @@ "الرد وإنهاء مكالمة جارية" "الفيديو قيد إيقاف التشغيل" "مرر بأصبعين لأعلى للرد. مرر بأصبعين لأسفل للرفض." - "عاجل" + "مهم" diff --git a/java/com/android/incallui/answer/impl/res/values-az/strings.xml b/java/com/android/incallui/answer/impl/res/values-az/strings.xml index fff561de3..5d113b48d 100644 --- a/java/com/android/incallui/answer/impl/res/values-az/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-az/strings.xml @@ -1,4 +1,20 @@ + + "Mesaj göndərərək imtina etmək üçün ikonadan sürüşdürün" @@ -20,5 +36,5 @@ "Cavab verin və gedən zəngi bitirin" "Videoları deaktivdir" "Cavab vermək üçün iki barmaq ilə yuxarı sürüşdürün. İmtina etmək üçün iki barmaq ilə aşağı sürüşdürün." - "Vacib" + "Önəmli" 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 index 7b29bfa66..3acc576d9 100644 --- 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 @@ -1,4 +1,20 @@ + + "Prevucite od ikone da biste odbili porukom" @@ -20,5 +36,5 @@ "Javite se i završite poziv koji je u toku" "Kamera je isključena" "Prevucite nagore pomoću dva prsta da biste odgovorili. Prevucite nadole pomoću dva prsta da biste odbili." - "Hitno" + "Važno" diff --git a/java/com/android/incallui/answer/impl/res/values-be/strings.xml b/java/com/android/incallui/answer/impl/res/values-be/strings.xml index 228a80f7f..4f34150e6 100644 --- a/java/com/android/incallui/answer/impl/res/values-be/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-be/strings.xml @@ -1,4 +1,20 @@ + + "Правядзіце ад значка, каб адхіліць, адправіўшы SMS" @@ -20,5 +36,5 @@ "Адказаць і скончыць бягучы выклік" "Відэа адключана" "Правядзіце двума пальцамі ўверх, каб адказаць; двума пальцамі ўніз – каб адхіліць." - "Тэрмінова" + "Важны" diff --git a/java/com/android/incallui/answer/impl/res/values-bg/strings.xml b/java/com/android/incallui/answer/impl/res/values-bg/strings.xml index 4e9422f00..54a5ab946 100644 --- a/java/com/android/incallui/answer/impl/res/values-bg/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-bg/strings.xml @@ -1,4 +1,20 @@ + + "Прекарайте пръст от иконата, за да отхвърлите със съобщение" @@ -20,5 +36,5 @@ "Отговор и завършване на текущото обаждане" "Видеото е изключено" "Прекарайте два пръста нагоре за отговаряне, надолу за отхвърляне." - "Спешно" + "Важно" diff --git a/java/com/android/incallui/answer/impl/res/values-bn/strings.xml b/java/com/android/incallui/answer/impl/res/values-bn/strings.xml index 869f7b9ae..d2aa4c3f3 100644 --- a/java/com/android/incallui/answer/impl/res/values-bn/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-bn/strings.xml @@ -1,4 +1,20 @@ + + "বার্তা সহ প্রত্যাখ্যান করতে আইকন থেকে সোয়াইপ করুন" @@ -20,5 +36,5 @@ "উত্তর দিন এবং চলছে এমন কল কেটে দিন" "ভিডিও বন্ধ আছে" "উত্তর দিতে উপরের দিকে, প্রত্যাখ্যান করতে নিচের দিকে দুই আঙুল দিয়ে সোয়াইপ করুন৷" - "জরুরি" + "গুরুত্বপূর্ণ" diff --git a/java/com/android/incallui/answer/impl/res/values-bs/strings.xml b/java/com/android/incallui/answer/impl/res/values-bs/strings.xml index b36e178f4..e17588750 100644 --- a/java/com/android/incallui/answer/impl/res/values-bs/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-bs/strings.xml @@ -1,4 +1,20 @@ + + "Prevucite preko ikone da odbijete porukom" @@ -20,5 +36,5 @@ "Odgovorite na poziv i završite ga" "Kamera je isključena" "Prevucite pomoću dva prsta prema gore da odgovorite. Prevucite pomoću dva prsta prema dolje da odbijete." - "Hitno" + "Važno" diff --git a/java/com/android/incallui/answer/impl/res/values-ca/strings.xml b/java/com/android/incallui/answer/impl/res/values-ca/strings.xml index 13b3b321a..538e0d3e0 100644 --- a/java/com/android/incallui/answer/impl/res/values-ca/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-ca/strings.xml @@ -1,4 +1,20 @@ + + "Llisca des de la icona per rebutjar la trucada amb un missatge" @@ -20,5 +36,5 @@ "Respon a la trucada i finalitza l\'actual" "El vídeo està desactivat" "Llisca amb dos dits cap amunt per respondre a la trucada i cap avall per rebutjar-la." - "Urgent" + "Important" diff --git a/java/com/android/incallui/answer/impl/res/values-cs/strings.xml b/java/com/android/incallui/answer/impl/res/values-cs/strings.xml index 6c6903041..626409ead 100644 --- a/java/com/android/incallui/answer/impl/res/values-cs/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-cs/strings.xml @@ -1,4 +1,20 @@ + + "Přejetím prstem od ikony hovor odmítnete a pošlete zprávu" @@ -20,5 +36,5 @@ "Přijmout hovor a ukončit probíhající hovor" "Video je vypnuté" "Přejetím dvěma prsty nahoru hovor přijmete. Přejetím dvěma prsty dolů jej odmítnete." - "Naléhavé" + "Důležité" diff --git a/java/com/android/incallui/answer/impl/res/values-da/strings.xml b/java/com/android/incallui/answer/impl/res/values-da/strings.xml index 3a87d44fe..387089116 100644 --- a/java/com/android/incallui/answer/impl/res/values-da/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-da/strings.xml @@ -1,4 +1,20 @@ + + "Stryg fra ikonet for at afvise med en besked" @@ -20,5 +36,5 @@ "Besvar, og afslut det igangværende opkald" "Video er deaktiveret" "Stryg op med to fingre for at besvare. Stryg ned med to fingre for at afvise." - "Haster" + "Vigtigt" diff --git a/java/com/android/incallui/answer/impl/res/values-de/strings.xml b/java/com/android/incallui/answer/impl/res/values-de/strings.xml index f4356d29f..ab3c33cc5 100644 --- a/java/com/android/incallui/answer/impl/res/values-de/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-de/strings.xml @@ -1,4 +1,20 @@ + + "Zum Ablehnen mit Nachricht vom Symbol wegwischen" @@ -20,5 +36,5 @@ "Nimm den Anruf an und beende den aktuellen Anruf" "Video deaktiviert" "Zum Annehmen mit zwei Fingern nach oben wischen. Zum Ablehnen mit zwei Fingern nach unten wischen." - "Dringend" + "Wichtig" diff --git a/java/com/android/incallui/answer/impl/res/values-el/strings.xml b/java/com/android/incallui/answer/impl/res/values-el/strings.xml index 9c9a0f35f..d847aac54 100644 --- a/java/com/android/incallui/answer/impl/res/values-el/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-el/strings.xml @@ -1,4 +1,20 @@ + + "Σύρετε από το εικονίδιο προς τα έξω για απόρριψη του μηνύματος" @@ -20,5 +36,5 @@ "Απάντηση και τερματισμός κλήσης σε εξέλιξη" "Το βίντεο είναι ανενεργό" "Σύρετε με δύο δάχτυλα, προς τα επάνω για απάντηση και προς τα κάτω για απόρριψη." - "Επείγον" + "Σημαντικό" diff --git a/java/com/android/incallui/answer/impl/res/values-en-rAU/strings.xml b/java/com/android/incallui/answer/impl/res/values-en-rAU/strings.xml index fb8d15682..fe6aa4607 100644 --- a/java/com/android/incallui/answer/impl/res/values-en-rAU/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-en-rAU/strings.xml @@ -1,4 +1,20 @@ + + "Swipe from icon to decline with a message" @@ -20,5 +36,5 @@ "Answer and end ongoing call" "Video is off" "Swipe up with two fingers to answer. Swipe down with two fingers to decline." - "Urgent" + "Important" diff --git a/java/com/android/incallui/answer/impl/res/values-en-rGB/strings.xml b/java/com/android/incallui/answer/impl/res/values-en-rGB/strings.xml index fb8d15682..fe6aa4607 100644 --- a/java/com/android/incallui/answer/impl/res/values-en-rGB/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-en-rGB/strings.xml @@ -1,4 +1,20 @@ + + "Swipe from icon to decline with a message" @@ -20,5 +36,5 @@ "Answer and end ongoing call" "Video is off" "Swipe up with two fingers to answer. Swipe down with two fingers to decline." - "Urgent" + "Important" diff --git a/java/com/android/incallui/answer/impl/res/values-en-rIN/strings.xml b/java/com/android/incallui/answer/impl/res/values-en-rIN/strings.xml index fb8d15682..fe6aa4607 100644 --- a/java/com/android/incallui/answer/impl/res/values-en-rIN/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-en-rIN/strings.xml @@ -1,4 +1,20 @@ + + "Swipe from icon to decline with a message" @@ -20,5 +36,5 @@ "Answer and end ongoing call" "Video is off" "Swipe up with two fingers to answer. Swipe down with two fingers to decline." - "Urgent" + "Important" diff --git a/java/com/android/incallui/answer/impl/res/values-es-rUS/strings.xml b/java/com/android/incallui/answer/impl/res/values-es-rUS/strings.xml index 14928eeb6..60fcd014e 100644 --- a/java/com/android/incallui/answer/impl/res/values-es-rUS/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-es-rUS/strings.xml @@ -1,4 +1,20 @@ + + "Desliza desde el ícono para rechazar la llamada con un mensaje" @@ -20,5 +36,5 @@ "Responder y finalizar la llamada en curso" "El video está desactivado" "Desliza dos dedos hacia arriba para responder la llamada o hacia abajo para rechazarla." - "Urgente" + "Importante" diff --git a/java/com/android/incallui/answer/impl/res/values-es/strings.xml b/java/com/android/incallui/answer/impl/res/values-es/strings.xml index 972bbc503..7b2f19a81 100644 --- a/java/com/android/incallui/answer/impl/res/values-es/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-es/strings.xml @@ -1,4 +1,20 @@ + + "Desliza desde el icono para rechazar con mensaje" @@ -20,5 +36,5 @@ "Responder a una llamada y finalizar otra en curso" "El vídeo está desconectado" "Desliza dos dedos hacia arriba para responder o hacia abajo para rechazar la llamada." - "Urgente" + "Importante" diff --git a/java/com/android/incallui/answer/impl/res/values-et/strings.xml b/java/com/android/incallui/answer/impl/res/values-et/strings.xml index 9e303bb16..b4632d184 100644 --- a/java/com/android/incallui/answer/impl/res/values-et/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-et/strings.xml @@ -1,4 +1,20 @@ + + "Sõnumiga keeldumiseks pühkige ikoonilt eemale" @@ -20,5 +36,5 @@ "Vastake ja lõpetage käimasolev kõne" "Video on välja lülitatud" "Vastamiseks pühkige kahe sõrmega üles. Keeldumiseks pühkige kahe sõrmega alla." - "Kiireloomuline" + "Tähtis" diff --git a/java/com/android/incallui/answer/impl/res/values-eu/strings.xml b/java/com/android/incallui/answer/impl/res/values-eu/strings.xml index a1f6d717d..118a2c74d 100644 --- a/java/com/android/incallui/answer/impl/res/values-eu/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-eu/strings.xml @@ -1,4 +1,20 @@ + + "Pasatu hatza ikonotik baztertzeko eta mezu bat bidaltzeko" @@ -20,5 +36,5 @@ "Erantzun eta amaitu uneko deia" "Desaktibatuta dago kamera" "Pasatu bi hatz gora erantzuteko; eta behera, baztertzeko." - "Premiazkoa" + "Garrantzitsua" diff --git a/java/com/android/incallui/answer/impl/res/values-fa/strings.xml b/java/com/android/incallui/answer/impl/res/values-fa/strings.xml index 28cf82619..971b172ef 100644 --- a/java/com/android/incallui/answer/impl/res/values-fa/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-fa/strings.xml @@ -1,4 +1,20 @@ + + "برای رد کردن با ارسال پیام، انگشتتان را تند از روی نماد بکشید" @@ -20,5 +36,5 @@ "پاسخ دادن به تماس درحال انجام و پایان دادن به آن" "ویدیو خاموش است" "برای پاسخ‌گویی، دو انگشتتان را تند به بالا بکشید و برای رد کردن به پایین بکشید." - "فوری" + "مهم" diff --git a/java/com/android/incallui/answer/impl/res/values-fi/strings.xml b/java/com/android/incallui/answer/impl/res/values-fi/strings.xml index 8b8eac942..7ae9a1f87 100644 --- a/java/com/android/incallui/answer/impl/res/values-fi/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-fi/strings.xml @@ -1,4 +1,20 @@ + + "Hylkää ja kirjoita viesti pyyhkäisemällä kuvaketta." @@ -20,5 +36,5 @@ "Vastaa puheluun ja lopeta nykyinen puhelu" "Videokuva ei ole käytössä." "Vastaa pyyhkäisemällä ylös kahdella sormella. Hylkää pyyhkäisemällä alas kahdella sormella." - "Kiireellinen" + "Tärkeä" diff --git a/java/com/android/incallui/answer/impl/res/values-fr-rCA/strings.xml b/java/com/android/incallui/answer/impl/res/values-fr-rCA/strings.xml index 9ea27b89c..ce454b5ce 100644 --- a/java/com/android/incallui/answer/impl/res/values-fr-rCA/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-fr-rCA/strings.xml @@ -1,4 +1,20 @@ + + "Balayez à partir de l\'icône pour refuser avec un message" @@ -20,5 +36,5 @@ "Répondre et mettre fin à l\'appel en cours" "La vidéo est désactivée" "Balayez vers le haut avec deux doigts pour répondre. Balayez vers le bas avec deux doigts pour refuser." - "Urgent" + "Important" diff --git a/java/com/android/incallui/answer/impl/res/values-fr/strings.xml b/java/com/android/incallui/answer/impl/res/values-fr/strings.xml index 3aa3c12c9..7f77ed0c8 100644 --- a/java/com/android/incallui/answer/impl/res/values-fr/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-fr/strings.xml @@ -1,4 +1,20 @@ + + "Appuyer sur l\'icône, puis balayer l\'écran pour refuser l\'appel en envoyant un message" @@ -20,5 +36,5 @@ "Répondre ou mettre fin à l\'appel en cours" "La vidéo est désactivée." "Balayez l\'écran avec deux doigts vers le haut pour répondre, ou vers le bas pour refuser l\'appel." - "Urgent" + "Importants" diff --git a/java/com/android/incallui/answer/impl/res/values-gl/strings.xml b/java/com/android/incallui/answer/impl/res/values-gl/strings.xml index 16c0f6969..07e0c516d 100644 --- a/java/com/android/incallui/answer/impl/res/values-gl/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-gl/strings.xml @@ -1,4 +1,20 @@ + + "Pasar o dedo desde a icona para rexeitar cunha mensaxe" @@ -20,5 +36,5 @@ "Responde á chamada entrante e finaliza a chamada en curso" "O vídeo está desactivado" "Pasa dous dedos cara arriba para responder a chamada ou cara abaixo para rexeitala." - "Urxente" + "Importante" diff --git a/java/com/android/incallui/answer/impl/res/values-gu/strings.xml b/java/com/android/incallui/answer/impl/res/values-gu/strings.xml index 3f99c7108..845e9def8 100644 --- a/java/com/android/incallui/answer/impl/res/values-gu/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-gu/strings.xml @@ -1,4 +1,20 @@ + + "સંદેશ સાથે નકારવા માટે આઇકનથી સ્વાઇપ કરો" @@ -20,5 +36,5 @@ "જવાબ આપો અને ચાલુ કૉલ સમાપ્ત કરો" "વિડિઓ બંધ છે" "જવાબ આપવા માટે બે આંગળી ઉપર સ્વાઇપ કરો. નકારવા માટે બે આંગળી નીચે સ્વાઇપ કરો." - "તાત્કાલિક" + "મહત્વપૂર્ણ" diff --git a/java/com/android/incallui/answer/impl/res/values-hi/strings.xml b/java/com/android/incallui/answer/impl/res/values-hi/strings.xml index f28505f7c..e8e3c75c4 100644 --- a/java/com/android/incallui/answer/impl/res/values-hi/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-hi/strings.xml @@ -1,4 +1,20 @@ + + "संदेश के साथ अस्वीकार करने के लिए आइकन से स्वाइप करें" @@ -20,5 +36,5 @@ "कॉल का जवाब दें और जारी कॉल समाप्त करें" "वीडियो बंद है" "जवाब देने के लिए दो अंगुलियों से ऊपर स्वाइप करें. अस्वीकार करने के लिए दो अंगुलियों से नीचे स्वाइप करें." - "बहुत ज़रूरी" + "महत्वपूर्ण" diff --git a/java/com/android/incallui/answer/impl/res/values-hr/strings.xml b/java/com/android/incallui/answer/impl/res/values-hr/strings.xml index 280743976..ffd0c9b8c 100644 --- a/java/com/android/incallui/answer/impl/res/values-hr/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-hr/strings.xml @@ -1,4 +1,20 @@ + + "Prijeđite prstom od ikone da biste odbili poruku" @@ -20,5 +36,5 @@ "Odgovorite na poziv i prekinite poziv u tijeku" "Videokamera je isključena" "Prijeđite dvama prstima prema gore za odgovor, a dvama prstima prema dolje za odbijanje." - "Hitno" + "Važno" diff --git a/java/com/android/incallui/answer/impl/res/values-hu/strings.xml b/java/com/android/incallui/answer/impl/res/values-hu/strings.xml index d7dacbfe0..13ec7da17 100644 --- a/java/com/android/incallui/answer/impl/res/values-hu/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-hu/strings.xml @@ -1,4 +1,20 @@ + + "Csúsztassa el az ujját az ikonról az üzenettel való elutasításhoz" @@ -20,5 +36,5 @@ "Hívásfogadás és a folyamatban lévő hívás befejezése" "A videokép ki van kapcsolva" "Csúsztassa felfelé két ujját a hívás fogadásához. Csúsztassa lefelé két ujját a hívás elutasításához." - "Sürgős" + "Fontos" diff --git a/java/com/android/incallui/answer/impl/res/values-hy/strings.xml b/java/com/android/incallui/answer/impl/res/values-hy/strings.xml index 4492833d9..7fb7ef45f 100644 --- a/java/com/android/incallui/answer/impl/res/values-hy/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-hy/strings.xml @@ -1,4 +1,20 @@ + + "Զանգը մերժելու և հաղորդագրություն ուղարկելու համար պատկերակից մատով մի կողմ սահեցրեք" @@ -20,5 +36,5 @@ "Պատասխանել և ավարտել ընթացիկ զանգը" "Տեսախցիկն անջատած է" "Պատասխանելու համար երկու մատով սահեցրեք վերև, մերժելու համար՝ ներքև:" - "Շտապ" + "Կարևոր" diff --git a/java/com/android/incallui/answer/impl/res/values-in/strings.xml b/java/com/android/incallui/answer/impl/res/values-in/strings.xml index a1fd19f6e..48d71af9a 100644 --- a/java/com/android/incallui/answer/impl/res/values-in/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-in/strings.xml @@ -1,4 +1,20 @@ + + "Gesek dari ikon untuk menolak dengan pesan" @@ -20,5 +36,5 @@ "Menjawab dan mengakhiri panggilan yang sedang berlangsung" "Video nonaktif" "Geser ke atas dengan dua jari untuk menjawab. Geser ke bawah dengan dua jari untuk menolak." - "Penting" + "Penting" diff --git a/java/com/android/incallui/answer/impl/res/values-is/strings.xml b/java/com/android/incallui/answer/impl/res/values-is/strings.xml index c4f9eb40c..a92a411ee 100644 --- a/java/com/android/incallui/answer/impl/res/values-is/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-is/strings.xml @@ -1,4 +1,20 @@ + + "Strjúktu frá tákninu til að hafna með skilaboðum" @@ -20,5 +36,5 @@ "Svara og ljúka yfirstandandi símtali" "Slökkt á myndavél" "Strjúktu upp með tveimur fingrum til að svara. Strjúktu niður með tveimur fingrum til að hafna." - "Áríðandi" + "Mikilvægt" diff --git a/java/com/android/incallui/answer/impl/res/values-it/strings.xml b/java/com/android/incallui/answer/impl/res/values-it/strings.xml index 70e972212..b29bca7c8 100644 --- a/java/com/android/incallui/answer/impl/res/values-it/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-it/strings.xml @@ -1,4 +1,20 @@ + + "Fai scorrere dall\'icona per rifiutare e inviare un messaggio" @@ -20,5 +36,5 @@ "Rispondi e termina la chiamata in corso" "Il video è disattivato" "Fai scorrere con due dita verso l\'alto per rispondere e verso il basso per rifiutare." - "Urgente" + "Importante" diff --git a/java/com/android/incallui/answer/impl/res/values-iw/strings.xml b/java/com/android/incallui/answer/impl/res/values-iw/strings.xml index 08c02e389..6544e8f3c 100644 --- a/java/com/android/incallui/answer/impl/res/values-iw/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-iw/strings.xml @@ -1,4 +1,20 @@ + + "החלק מהסמל כדי לדחות עם הודעה" @@ -20,5 +36,5 @@ "מענה וסיום שיחה" "הווידאו מושבת" "החלק עם שתי אצבעות למעלה כדי לענות או למטה כדי לדחות." - "דחופה" + "חשוב" diff --git a/java/com/android/incallui/answer/impl/res/values-ja/strings.xml b/java/com/android/incallui/answer/impl/res/values-ja/strings.xml index b7bd65bc4..83f8f094a 100644 --- a/java/com/android/incallui/answer/impl/res/values-ja/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-ja/strings.xml @@ -1,4 +1,20 @@ + + "アイコンをスワイプして着信を拒否し、メッセージを送信" @@ -20,5 +36,5 @@ "通話に応答し、進行中の通話を終了" "ビデオ: OFF" "応答するには 2 本の指で上にスワイプ、拒否するには 2 本の指で下にスワイプします。" - "緊急" + "重要" diff --git a/java/com/android/incallui/answer/impl/res/values-ka/strings.xml b/java/com/android/incallui/answer/impl/res/values-ka/strings.xml index 681306776..4a1120c69 100644 --- a/java/com/android/incallui/answer/impl/res/values-ka/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-ka/strings.xml @@ -1,4 +1,20 @@ + + "გადაუსვით ხატულადან შეტყობინებით უარყოფისთვის" @@ -20,5 +36,5 @@ "პასუხი და მიმდინარე ზარის დასრულება" "ვიდეო გამორთულია" "საპასუხოდ გადაფურცლეთ ზემოთ ორი თითით. უარყოფისთვის გადაფურცლეთ ქვემოთ ორი თითით." - "სასწრაფო" + "მნიშვნელოვანი" diff --git a/java/com/android/incallui/answer/impl/res/values-kk/strings.xml b/java/com/android/incallui/answer/impl/res/values-kk/strings.xml index 3d1863323..69cf9497d 100644 --- a/java/com/android/incallui/answer/impl/res/values-kk/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-kk/strings.xml @@ -1,4 +1,20 @@ + + "Қабылдамай, жай хабар жіберу үшін, белгішеден әрі қарай сырғытыңыз" @@ -20,5 +36,5 @@ "Қоңырауға жауап беру және ағымдағы қоңырауды аяқтау" "Бейне өшірулі" "Жауап беру үшін екі саусақпен жоғары сырғытылады. Қабылдамау үшін екі саусақпен төмен сырғытылады." - "Шұғыл" + "Маңызды" diff --git a/java/com/android/incallui/answer/impl/res/values-km/strings.xml b/java/com/android/incallui/answer/impl/res/values-km/strings.xml index 89f9031e9..db65a97f5 100644 --- a/java/com/android/incallui/answer/impl/res/values-km/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-km/strings.xml @@ -1,4 +1,20 @@ + + "អូស​ចេញ​ពី​រូបតំណាង​ដើម្បី​បដិសេធ​​ដោយ​មាន​សារ" @@ -20,5 +36,5 @@ "ឆ្លើយ និង​បញ្ចប់​ការ​ហៅ​ទូរសព្ទ​ដែល​កំពុង​ដំណើរការ" "វីដេអូត្រូវបានបិទ" "អូស​ម្រាម​ដៃ​ពីរ​ឡើងលើ​ ដើម្បី​ឆ្លើយ។ អូស​ម្រាមដៃ​ពីរ​ចុះ​ក្រោម​ ដើម្បី​បដិសេធ។" - "បន្ទាន់" + "សំខាន់" diff --git a/java/com/android/incallui/answer/impl/res/values-kn/strings.xml b/java/com/android/incallui/answer/impl/res/values-kn/strings.xml index f02a6b8a3..8426aef46 100644 --- a/java/com/android/incallui/answer/impl/res/values-kn/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-kn/strings.xml @@ -1,4 +1,20 @@ + + "ಸಂದೇಶದ ಜೊತೆಗೆ ನಿರಾಕರಿಸಲು ಐಕಾನ್‌ನಿಂದ ಸ್ವೈಪ್ ಮಾಡಿ" @@ -20,5 +36,5 @@ "ಚಾಲ್ತಿಯಲ್ಲಿರುವ ಕರೆಗೆ ಉತ್ತರಿಸಿ ಮತ್ತು ಅಂತ್ಯಗೊಳಿಸಿ" "ವೀಡಿಯೊ ಆಫ್ ಆಗಿದೆ" "ಉತ್ತರಿಸಲು ಎರಡು ಬೆರಳಿನಿಂದ ಮೇಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ. ನಿರಾಕರಿಸಲು ಎರಡು ಬೆರಳಿನಿಂದ ಕೆಳಗೆ ಸ್ವೈಪ್ ಮಾಡಿ." - "ತುರ್ತು" + "ಪ್ರಮುಖ" diff --git a/java/com/android/incallui/answer/impl/res/values-ko/strings.xml b/java/com/android/incallui/answer/impl/res/values-ko/strings.xml index 850b44007..6b6beff85 100644 --- a/java/com/android/incallui/answer/impl/res/values-ko/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-ko/strings.xml @@ -1,4 +1,20 @@ + + "메시지를 거부하려면 아이콘에서 스와이프하세요." @@ -20,5 +36,5 @@ "현재 통화를 종료하고 전화 받기" "동영상이 꺼져 있습니다." "받으려면 두 손가락을 위로 스와이프하고 거부하려면 두 손가락을 아래로 스와이프하세요." - "긴급" + "중요" diff --git a/java/com/android/incallui/answer/impl/res/values-ky/strings.xml b/java/com/android/incallui/answer/impl/res/values-ky/strings.xml index dc08e8449..6dd5a2dd7 100644 --- a/java/com/android/incallui/answer/impl/res/values-ky/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-ky/strings.xml @@ -1,4 +1,20 @@ + + "Чалууну билдирүү менен четке кагуу үчүн сүрөтчөнү сүрүңүз" @@ -20,5 +36,5 @@ "Чалууга жооп бериңиз же учурдагы чалууну аяктаңыз" "Видео өчүк" "Жооп берүү үчүн экранды өйдө сүрүп, четке кагуу үчүн ылдый сүрүп коюңуз." - "Шашылыш" + "Маанилүү" diff --git a/java/com/android/incallui/answer/impl/res/values-lo/strings.xml b/java/com/android/incallui/answer/impl/res/values-lo/strings.xml index 06ad00c88..776c027b5 100644 --- a/java/com/android/incallui/answer/impl/res/values-lo/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-lo/strings.xml @@ -1,4 +1,20 @@ + + "ປັດຈາກໄອຄອນເພື່ອປະຕິເສດຂໍ້ຄວາມ" @@ -20,5 +36,5 @@ "ຮັບສາຍ ແລະ ວາງສາຍທີ່ກຳລັງໂທອອກ" "ວິດີໂອປິດຢູ່" "ປັດສອງນິ້ວຂຶ້ນເພື່ອຮັບສາຍ. ປັດສອງນິ້ວລົງເພື່ອປະຕິເສດ." - "ດ່ວນ" + "ສຳຄັນ" diff --git a/java/com/android/incallui/answer/impl/res/values-lt/strings.xml b/java/com/android/incallui/answer/impl/res/values-lt/strings.xml index 3366e337b..2ef70eaff 100644 --- a/java/com/android/incallui/answer/impl/res/values-lt/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-lt/strings.xml @@ -1,4 +1,20 @@ + + "Perbraukite iš piktogramos, kad atmestumėte išsiųsdami pranešimą" @@ -20,5 +36,5 @@ "Atsakykite ir užbaikite vykstantį skambutį" "Vaizdas išjungtas" "Perbraukite dviem pirštais aukštyn, kad atsakytumėte. Perbraukite dviem pirštais žemyn, kad atmestumėte." - "Skubus" + "Svarbu" diff --git a/java/com/android/incallui/answer/impl/res/values-lv/strings.xml b/java/com/android/incallui/answer/impl/res/values-lv/strings.xml index 49d1dc9f4..3fc754db4 100644 --- a/java/com/android/incallui/answer/impl/res/values-lv/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-lv/strings.xml @@ -1,4 +1,20 @@ + + "Lai noraidītu, izmantojot ziņojumu, velciet no ikonas" @@ -20,5 +36,5 @@ "Atbildiet un beidziet notiekošo zvanu" "Video ir izslēgts" "Ar diviem pirkstiem velciet augšup, lai atbildētu. Ar diviem pirkstiem velciet lejup, lai noraidītu." - "Steidzams" + "Svarīgs" diff --git a/java/com/android/incallui/answer/impl/res/values-mk/strings.xml b/java/com/android/incallui/answer/impl/res/values-mk/strings.xml index c068f665b..deeba45e6 100644 --- a/java/com/android/incallui/answer/impl/res/values-mk/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-mk/strings.xml @@ -1,4 +1,20 @@ + + "Повлечете од иконата за да одбиете со порака" @@ -20,5 +36,5 @@ "Одговорете и завршете го тековниот повик" "Видеото е исклучено" "Повлечете нагоре со два прста за да одговорите. Повлечете надолу со два прста за да одбиете." - "Итно" + "Важно" diff --git a/java/com/android/incallui/answer/impl/res/values-ml/strings.xml b/java/com/android/incallui/answer/impl/res/values-ml/strings.xml index 8e1d492e7..d8ce90dab 100644 --- a/java/com/android/incallui/answer/impl/res/values-ml/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-ml/strings.xml @@ -1,4 +1,20 @@ + + "സന്ദേശമയച്ചുകൊണ്ട് നിരസിക്കാൻ ഐക്കണിൽ നിന്ന് സ്വൈപ്പുചെയ്യുക" @@ -20,5 +36,5 @@ "മറുപടി നൽകുകയും നിലവിലുള്ള കോൾ അവസാനിപ്പിക്കുകയും ചെയ്യൂ" "വീഡിയോ ഓഫാണ്" "മറുപടി നൽകാൻ രണ്ടുവിരലുകൾ ഉപയോഗിച്ച് മുകളിലേക്ക് സ്വൈപ്പുചെയ്യുക. നിരസിക്കാൻ രണ്ടുവിരലുകൾ ഉപയോഗിച്ച് താഴേക്ക് സ്വൈപ്പുചെയ്യുക." - "അടിയന്തിര പ്രാധാന്യം" + "പ്രധാനപ്പെട്ടവ" diff --git a/java/com/android/incallui/answer/impl/res/values-mn/strings.xml b/java/com/android/incallui/answer/impl/res/values-mn/strings.xml index 4bdd912ad..aaa16213a 100644 --- a/java/com/android/incallui/answer/impl/res/values-mn/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-mn/strings.xml @@ -1,4 +1,20 @@ + + "Зурвас явуулангаа татгалзах бол дүрснээс шударна уу" @@ -20,5 +36,5 @@ "Ирсэн дуудлагыг авч, одоогийн дуудлагыг таслах" "Видео идэвхгүй байна" "Хариулах бол хоёр хуруугаар дээш шударна уу. Таслах бол хоёр хуруугаар доош шударна уу." - "Яаралтай" + "Чухал" diff --git a/java/com/android/incallui/answer/impl/res/values-mr/strings.xml b/java/com/android/incallui/answer/impl/res/values-mr/strings.xml index 11c826896..eea662fa1 100644 --- a/java/com/android/incallui/answer/impl/res/values-mr/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-mr/strings.xml @@ -1,4 +1,20 @@ + + "संदेशासह नाकारण्यासाठी आयकॉनपासून स्वाइप करा" @@ -20,5 +36,5 @@ "उत्तर द्या आणि सुरु असलेला कॉल बंद करा" "व्हिडिओ बंद आहे" "उत्तर देण्यासाठी दोन बोटांनी वर स्वाइप करा. नकार देण्यासाठी दोन बोटांनी खाली स्वाइप करा." - "त्वरित" + "महत्त्वाचे" diff --git a/java/com/android/incallui/answer/impl/res/values-ms/strings.xml b/java/com/android/incallui/answer/impl/res/values-ms/strings.xml index 36ede7568..04b054e4e 100644 --- a/java/com/android/incallui/answer/impl/res/values-ms/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-ms/strings.xml @@ -1,4 +1,20 @@ + + "Leret dari ikon untuk menolak dengan mesej" @@ -20,5 +36,5 @@ "Jawab dan tamatkan panggilan yang sedang berlangsung" "Video dimatikan" "Leret dua jari ke atas untuk menjawab. Leret dua jari ke bawah untuk menolak." - "Segera" + "Penting" diff --git a/java/com/android/incallui/answer/impl/res/values-my/strings.xml b/java/com/android/incallui/answer/impl/res/values-my/strings.xml index 5ad7a8284..f3d6a2e38 100644 --- a/java/com/android/incallui/answer/impl/res/values-my/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-my/strings.xml @@ -1,4 +1,20 @@ + + "မက်ဆေ့ဂျ်ဖြင့်ငြင်းပယ်ရန် သင်္ကေတမှ ပွတ်ဆွဲပါ" @@ -20,5 +36,5 @@ "ဖြေကြားပြီး လက်ရှိခေါ်ဆိုမှုကို အပြီးသတ်ပါ" "ဗီဒီယို ပိတ်ထားပါသည်" "ဖြေကြားရန် လက်နှစ်ချောင်းဖြင့် အပေါ်သို့ ပွတ်ဆွဲပါ။ ငြင်းပယ်ရန် လက်နှစ်ချောင်းဖြင့် အောက်သို့ ပွတ်ဆွဲပါ။" - "အရေးတကြီး" + "အရေးကြီး" diff --git a/java/com/android/incallui/answer/impl/res/values-nb/strings.xml b/java/com/android/incallui/answer/impl/res/values-nb/strings.xml index b1c32bea4..42ff3d0af 100644 --- a/java/com/android/incallui/answer/impl/res/values-nb/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-nb/strings.xml @@ -1,4 +1,20 @@ + + "Sveip fra ikonet for å avslå med en melding" @@ -20,5 +36,5 @@ "Svar, og avslutt samtalen som er i gang" "Video er av" "Sveip oppover med to fingre for å svare. Sveip nedover med to fingre for å avvise." - "Haster" + "Viktig" diff --git a/java/com/android/incallui/answer/impl/res/values-ne/strings.xml b/java/com/android/incallui/answer/impl/res/values-ne/strings.xml index 40ef7b6e3..f0b8641af 100644 --- a/java/com/android/incallui/answer/impl/res/values-ne/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-ne/strings.xml @@ -1,4 +1,20 @@ + + "सन्देश सहित अस्वीकार गर्न आइकनबाट स्वाइप गर्नुहोस्" @@ -20,5 +36,5 @@ "जवाफ फर्काउनुहोस् र जारी कललाई अन्त्य गर्नुहोस्" "भिडियो निष्क्रिय छ" "जवाफ दिन दुई औंलाले माथितिर स्वाइप गर्नुहोस्। अस्वीकार गर्न दुई औंलाले तलतिर स्वाइप गर्नुहोस्।" - "जरुरी" + "महत्त्वपूर्ण" diff --git a/java/com/android/incallui/answer/impl/res/values-nl/strings.xml b/java/com/android/incallui/answer/impl/res/values-nl/strings.xml index b2f619fa3..89c956a9f 100644 --- a/java/com/android/incallui/answer/impl/res/values-nl/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-nl/strings.xml @@ -1,4 +1,20 @@ + + "Veeg vanaf pictogram om te weigeren met bericht" @@ -20,5 +36,5 @@ "Opnemen en actieve oproep beëindigen" "Video is uit" "Veeg met twee vingers omhoog om te beantwoorden. Veeg met twee vingers omlaag om te weigeren." - "Urgent" + "Belangrijk" diff --git a/java/com/android/incallui/answer/impl/res/values-no/strings.xml b/java/com/android/incallui/answer/impl/res/values-no/strings.xml index b1c32bea4..42ff3d0af 100644 --- a/java/com/android/incallui/answer/impl/res/values-no/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-no/strings.xml @@ -1,4 +1,20 @@ + + "Sveip fra ikonet for å avslå med en melding" @@ -20,5 +36,5 @@ "Svar, og avslutt samtalen som er i gang" "Video er av" "Sveip oppover med to fingre for å svare. Sveip nedover med to fingre for å avvise." - "Haster" + "Viktig" diff --git a/java/com/android/incallui/answer/impl/res/values-pa/strings.xml b/java/com/android/incallui/answer/impl/res/values-pa/strings.xml index d2b14523c..3772f291f 100644 --- a/java/com/android/incallui/answer/impl/res/values-pa/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-pa/strings.xml @@ -1,4 +1,20 @@ + + "ਸੁਨੇਹੇ ਦੇ ਨਾਲ ਅਸਵੀਕਾਰ ਕਰਨ ਲਈ ਚਿੰਨ੍ਹ ਤੋਂ ਸਵਾਈਪ ਕਰੋ" @@ -20,5 +36,5 @@ "ਜਵਾਬ ਦਿਓ ਅਤੇ ਜਾਰੀ ਕਾਲ ਨੂੰ ਸਮਾਪਤ ਕਰੋ" "ਵੀਡੀਓ ਬੰਦ ਹੈ" "ਜਵਾਬ ਦੇਣ ਲਈ ਦੋ ਉਂਗਲਾਂ ਨਾਲ ਉੱਪਰ ਵੱਲ ਸਵਾਈਪ ਕਰੋ। ਅਸਵੀਕਾਰ ਕਰਨ ਲਈ ਦੋ ਉਂਗਲਾਂ ਨਾਲ ਹੇਠਾਂ ਵੱਲ ਸਵਾਈਪ ਕਰੋ।" - "ਜ਼ਰੂਰੀ" + "ਮਹੱਤਵਪੂਰਨ" diff --git a/java/com/android/incallui/answer/impl/res/values-pl/strings.xml b/java/com/android/incallui/answer/impl/res/values-pl/strings.xml index b0c44e72a..f6e1f1ba4 100644 --- a/java/com/android/incallui/answer/impl/res/values-pl/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-pl/strings.xml @@ -1,4 +1,20 @@ + + "Przesuń palcem od ikony, aby odrzucić połączenie i wysłać wiadomość" @@ -20,5 +36,5 @@ "Odbierz połączenie i zakończ trwającą rozmowę" "Wideo jest wyłączone" "Przesuń dwoma palcami w górę, aby odebrać. Przesuń dwoma palcami w dół, aby odrzucić." - "Pilne" + "Ważne" diff --git a/java/com/android/incallui/answer/impl/res/values-pt-rBR/strings.xml b/java/com/android/incallui/answer/impl/res/values-pt-rBR/strings.xml index fe1c89de4..1ed245140 100644 --- a/java/com/android/incallui/answer/impl/res/values-pt-rBR/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-pt-rBR/strings.xml @@ -1,4 +1,20 @@ + + "Deslize a partir do ícone para recusar com uma mensagem" @@ -20,5 +36,5 @@ "Atender e encerrar a chamada em andamento" "O vídeo está desativado" "Deslize com dois dedos para cima para atender. Deslize com dois dedos para baixo para recusar." - "Urgente" + "Importante" diff --git a/java/com/android/incallui/answer/impl/res/values-pt-rPT/strings.xml b/java/com/android/incallui/answer/impl/res/values-pt-rPT/strings.xml index 1a23a4a9d..f1e17a1d9 100644 --- a/java/com/android/incallui/answer/impl/res/values-pt-rPT/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-pt-rPT/strings.xml @@ -1,4 +1,20 @@ + + "Deslize rapidamente a partir do ícone para recusar com uma mensagem" @@ -20,5 +36,5 @@ "Atender e terminar uma chamada em curso" "O vídeo está desativado" "Deslize rapidamente com dois dedos para cima para responder. Deslize rapidamente com dois dedos para baixo para recusar." - "Urgente" + "Importante" diff --git a/java/com/android/incallui/answer/impl/res/values-pt/strings.xml b/java/com/android/incallui/answer/impl/res/values-pt/strings.xml index fe1c89de4..1ed245140 100644 --- a/java/com/android/incallui/answer/impl/res/values-pt/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-pt/strings.xml @@ -1,4 +1,20 @@ + + "Deslize a partir do ícone para recusar com uma mensagem" @@ -20,5 +36,5 @@ "Atender e encerrar a chamada em andamento" "O vídeo está desativado" "Deslize com dois dedos para cima para atender. Deslize com dois dedos para baixo para recusar." - "Urgente" + "Importante" diff --git a/java/com/android/incallui/answer/impl/res/values-ro/strings.xml b/java/com/android/incallui/answer/impl/res/values-ro/strings.xml index 6c8bafa28..0b1f4f481 100644 --- a/java/com/android/incallui/answer/impl/res/values-ro/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-ro/strings.xml @@ -1,4 +1,20 @@ + + "Glisați de pe pictogramă pentru a respinge cu un mesaj" @@ -20,5 +36,5 @@ "Răspundeți și încheiați apelul în curs" "Camera video este dezactivată." "Glisați cu două degete în sus pentru a răspunde și în jos pentru a respinge." - "Urgent" + "Important" diff --git a/java/com/android/incallui/answer/impl/res/values-ru/strings.xml b/java/com/android/incallui/answer/impl/res/values-ru/strings.xml index 67ff06a34..d1fdcf73e 100644 --- a/java/com/android/incallui/answer/impl/res/values-ru/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-ru/strings.xml @@ -1,4 +1,20 @@ + + "Чтобы отклонить вызов и отправить SMS, проведите пальцем от значка" @@ -20,5 +36,5 @@ "Ответить и завершить текущий вызов" "Камера выключена" "Проведите двумя пальцами по экрану вверх, чтобы ответить, или вниз, чтобы отклонить вызов." - "Срочно" + "Важный звонок" diff --git a/java/com/android/incallui/answer/impl/res/values-si/strings.xml b/java/com/android/incallui/answer/impl/res/values-si/strings.xml index ae3c08008..99f4989aa 100644 --- a/java/com/android/incallui/answer/impl/res/values-si/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-si/strings.xml @@ -1,4 +1,20 @@ + + "පණිවිඩය සහිතව ප්‍රතික්ෂේප කිරීමට නිරූපකයේ සිට ස්වයිප් කරන්න" @@ -20,5 +36,5 @@ "යන අැමතුමට පිළිතරු දී අවසන් කරන්න" "වීඩියෝව ක්‍රියාවිරහිතයි" "පිළිතුරු දීමට ඇඟිලි දෙකකින් ඉහළට ස්වයිප් කරන්න, ප්‍රතික්ෂේප කිරීමට ඇඟිලි දෙකකින් පහළට ස්වයිප් කරන්න." - "හදිසි" + "වැදගත්" diff --git a/java/com/android/incallui/answer/impl/res/values-sk/strings.xml b/java/com/android/incallui/answer/impl/res/values-sk/strings.xml index 179be7b08..fa00ac4c6 100644 --- a/java/com/android/incallui/answer/impl/res/values-sk/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-sk/strings.xml @@ -1,4 +1,20 @@ + + "Prejdením prstom od ikony odmietnuť so správou" @@ -20,5 +36,5 @@ "Prijať hovor a ukončiť prebiehajúci hovor" "Video je vypnuté" "Ak chcete hovor prijať, prejdite dvomi prstami nahor. Ak ho chcete odmietnuť, prejdite dvomi prstami nadol." - "Naliehavé" + "Dôležité" diff --git a/java/com/android/incallui/answer/impl/res/values-sl/strings.xml b/java/com/android/incallui/answer/impl/res/values-sl/strings.xml index 5f658be9d..147a09835 100644 --- a/java/com/android/incallui/answer/impl/res/values-sl/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-sl/strings.xml @@ -1,4 +1,20 @@ + + "Povlecite z ikone, da klic zavrnete s sporočilom" @@ -20,5 +36,5 @@ "Sprejmi klic in končaj aktivni klic" "Video je izklopljen" "Z dvema prstoma povlecite navzgor, da sprejmete klic. Z dvema prstoma povlecite navzdol, da zavrnete klic." - "Nujno" + "Pomembno" diff --git a/java/com/android/incallui/answer/impl/res/values-sq/strings.xml b/java/com/android/incallui/answer/impl/res/values-sq/strings.xml index 1de60c9c9..e71691af8 100644 --- a/java/com/android/incallui/answer/impl/res/values-sq/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-sq/strings.xml @@ -1,4 +1,20 @@ + + "Rrëshqit nga ikona për të refuzuar me mesazh" @@ -20,5 +36,5 @@ "Përgjigju dhe mbyll telefonatën në vazhdim" "Videoja është joaktive" "Rrëshqit dy gishta lart për t\'u përgjigjur. Rrëshqit dy gishta poshtë për të refuzuar." - "Urgjente" + "E rëndësishme" diff --git a/java/com/android/incallui/answer/impl/res/values-sr/strings.xml b/java/com/android/incallui/answer/impl/res/values-sr/strings.xml index 4d6ef5636..c802b0e97 100644 --- a/java/com/android/incallui/answer/impl/res/values-sr/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-sr/strings.xml @@ -1,4 +1,20 @@ + + "Превуците од иконе да бисте одбили поруком" @@ -20,5 +36,5 @@ "Јавите се и завршите позив који је у току" "Камера је искључена" "Превуците нагоре помоћу два прста да бисте одговорили. Превуците надоле помоћу два прста да бисте одбили." - "Хитно" + "Важно" diff --git a/java/com/android/incallui/answer/impl/res/values-sv/strings.xml b/java/com/android/incallui/answer/impl/res/values-sv/strings.xml index e47b4e0a3..2265dc4c2 100644 --- a/java/com/android/incallui/answer/impl/res/values-sv/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-sv/strings.xml @@ -1,4 +1,20 @@ + + "Svep från ikonen för att avvisa med meddelande" @@ -20,5 +36,5 @@ "Svara och avsluta pågående samtal" "Video avstängd" "Dra två fingrar uppåt för att svara och två nedåt för att avvisa." - "Brådskande" + "Viktigt" diff --git a/java/com/android/incallui/answer/impl/res/values-sw/strings.xml b/java/com/android/incallui/answer/impl/res/values-sw/strings.xml index 1e5896662..26e1b7ab5 100644 --- a/java/com/android/incallui/answer/impl/res/values-sw/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-sw/strings.xml @@ -1,4 +1,20 @@ + + "Telezesha kidole ukianzia kwenye aikoni ili utume ujumbe wa kukataa" @@ -20,5 +36,5 @@ "Jibu na ukate simu inayoendelea" "Video imezimwa" "Telezesha juu kwa vidole viwili ili uijibu. Telezesha chini kwa vidole viwili ili uikate." - "Dharura" + "Muhimu" diff --git a/java/com/android/incallui/answer/impl/res/values-ta/strings.xml b/java/com/android/incallui/answer/impl/res/values-ta/strings.xml index 847936f5b..453781dae 100644 --- a/java/com/android/incallui/answer/impl/res/values-ta/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-ta/strings.xml @@ -1,4 +1,20 @@ + + "செய்தியுடன் நிராகரிக்க, ஐகானிலிருந்து ஸ்வைப் செய்யவும்" @@ -20,5 +36,5 @@ "உள்வரும் அழைப்பிற்குப் பதிலளித்து, செயலில் உள்ள அழைப்பை முடிக்கும்" "வீடியோ முடக்கப்பட்டுள்ளது" "பதிலளிக்க, இரு விரல்களால் மேலே ஸ்வைப் செய்யவும். நிராகரிக்க, இரு விரல்களால் கீழே ஸ்வைப் செய்யவும்." - "அவசரம்" + "முக்கிய அழைப்பு" diff --git a/java/com/android/incallui/answer/impl/res/values-te/strings.xml b/java/com/android/incallui/answer/impl/res/values-te/strings.xml index abc390294..e0e508768 100644 --- a/java/com/android/incallui/answer/impl/res/values-te/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-te/strings.xml @@ -1,4 +1,20 @@ + + "సందేశంతో తిరస్కరించడానికి చిహ్నం నుండి స్వైప్ చేయండి" @@ -20,5 +36,5 @@ "సమాధానం ఇస్తుంది మరియు కొనసాగుతున్న కాల్‌ను ముగిస్తుంది" "వీడియో ఆఫ్‌లో ఉంది" "సమాధానం ఇవ్వడానికి రెండు వేళ్లతో పైకి స్వైప్ చేయండి. తిరస్కరించడానికి రెండు వేళ్లతో క్రిందికి స్వైప్ చేయండి." - "అత్యవసరం" + "ముఖ్యమైనది" diff --git a/java/com/android/incallui/answer/impl/res/values-th/strings.xml b/java/com/android/incallui/answer/impl/res/values-th/strings.xml index 54069b3d8..695da74f7 100644 --- a/java/com/android/incallui/answer/impl/res/values-th/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-th/strings.xml @@ -1,4 +1,20 @@ + + "เลื่อนไอคอนเพื่อปฏิเสธสายด้วยข้อความ" @@ -20,5 +36,5 @@ "รับและวางสาย" "วิดีโอปิดอยู่" "ใช้สองนิ้วเลื่อนขึ้นเพื่อรับสายและเลื่อนลงเพื่อตัดสาย" - "ด่วน" + "สำคัญ" diff --git a/java/com/android/incallui/answer/impl/res/values-tl/strings.xml b/java/com/android/incallui/answer/impl/res/values-tl/strings.xml index 8f87b5605..6128d6fad 100644 --- a/java/com/android/incallui/answer/impl/res/values-tl/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-tl/strings.xml @@ -1,4 +1,20 @@ + + "I-swipe mula sa icon upang tanggihan gamit ang mensahe" @@ -20,5 +36,5 @@ "Sagutin at tapusin ang kasalukuyang tawag" "Naka-off ang video" "I-swipe nang pataas gamit ang dalawang daliri upang sagutin. I-swipe nang pababa gamit ang dalawang daliri upang tanggihan." - "Apurahan" + "Mahalaga" diff --git a/java/com/android/incallui/answer/impl/res/values-tr/strings.xml b/java/com/android/incallui/answer/impl/res/values-tr/strings.xml index 53f5eb9a9..87583c03d 100644 --- a/java/com/android/incallui/answer/impl/res/values-tr/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-tr/strings.xml @@ -1,4 +1,20 @@ + + "Mesajla reddetmek için, simgeden hızlıca kaydırın" @@ -20,5 +36,5 @@ "Bir çağrı cevaplanır ve devam eden çağrı sona erdirilir" "Video kapalı" "Cevaplamak için iki parmağınızla hızlıca yukarı kaydırın. Reddetmek içinse iki parmağınızla hızlıca aşağı kaydırın." - "Acil" + "Önemli" diff --git a/java/com/android/incallui/answer/impl/res/values-uk/strings.xml b/java/com/android/incallui/answer/impl/res/values-uk/strings.xml index a0332d377..76eb2b0a2 100644 --- a/java/com/android/incallui/answer/impl/res/values-uk/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-uk/strings.xml @@ -1,4 +1,20 @@ + + "Проведіть пальцем убік від значка, щоб відхилити з повідомленням" @@ -20,5 +36,5 @@ "Відповісти на виклик, завершивши поточний" "Відео вимкнено" "Проведіть двома пальцями вгору, щоб відповісти, або вниз, щоб відхилити дзвінок." - "Терміново" + "Важливо" diff --git a/java/com/android/incallui/answer/impl/res/values-ur/strings.xml b/java/com/android/incallui/answer/impl/res/values-ur/strings.xml index e1813cbf7..2a44e9083 100644 --- a/java/com/android/incallui/answer/impl/res/values-ur/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-ur/strings.xml @@ -1,4 +1,20 @@ + + "پیغام کے ساتھ رد کرنے کیلئے آئیکن سے سوائپ کریں" @@ -20,5 +36,5 @@ "جواب دیں اور جاری کال ختم کریں" "ویڈیو آف ہے" "جواب دینے کیلئے دوانگلیوں کے ساتھ اوپر سوائپ کریں۔ مسترد کرنے کیلئے دو انگلیوں کے ساتھ نیچے سوائپ کریں۔" - "ارجنٹ" + "اہم" diff --git a/java/com/android/incallui/answer/impl/res/values-uz/strings.xml b/java/com/android/incallui/answer/impl/res/values-uz/strings.xml index b83abcce0..f348a499d 100644 --- a/java/com/android/incallui/answer/impl/res/values-uz/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-uz/strings.xml @@ -1,4 +1,20 @@ + + "Qo‘ng‘iroqni SMS bilan rad etish uchun nishonchadan suring." @@ -20,5 +36,5 @@ "Kiruvchi chaqiruvga javob berish va joriy qo‘ng‘iroqni tugatish" "Kamera o‘chiq" "Chaqiruvga javob berish uchun ikki barmoq bilan tepaga, rad etish uchun ikki barmoq bilan pastga suring." - "Juda muhim" + "Muhim qo‘ng‘iroq" diff --git a/java/com/android/incallui/answer/impl/res/values-vi/strings.xml b/java/com/android/incallui/answer/impl/res/values-vi/strings.xml index 94dd1c386..f4dfa5b1d 100644 --- a/java/com/android/incallui/answer/impl/res/values-vi/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-vi/strings.xml @@ -1,4 +1,20 @@ + + "Vuốt từ biểu tượng để từ chối kèm thông báo" @@ -20,5 +36,5 @@ "Trả lời và kết thúc cuộc gọi đang diễn ra" "Video đã tắt" "Vuốt hai ngón tay lên để trả lời. Vuốt hai ngón tay xuống để từ chối." - "Khẩn cấp" + "Quan trọng" diff --git a/java/com/android/incallui/answer/impl/res/values-zh-rCN/strings.xml b/java/com/android/incallui/answer/impl/res/values-zh-rCN/strings.xml index fc7ce6409..9698aa06d 100644 --- a/java/com/android/incallui/answer/impl/res/values-zh-rCN/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-zh-rCN/strings.xml @@ -1,4 +1,20 @@ + + "滑动图标即可拒接来电并发送信息" @@ -20,5 +36,5 @@ "接听并结束当前通话" "摄像头处于关闭状态" "双指向上滑动即可接听,向下滑动则可拒接。" - "紧急" + "重要" diff --git a/java/com/android/incallui/answer/impl/res/values-zh-rHK/strings.xml b/java/com/android/incallui/answer/impl/res/values-zh-rHK/strings.xml index 97955396f..81a88151b 100644 --- a/java/com/android/incallui/answer/impl/res/values-zh-rHK/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-zh-rHK/strings.xml @@ -1,4 +1,20 @@ + + "從圖示快速滑動即可透過訊息拒絕" @@ -20,5 +36,5 @@ "接聽及結束進行中的通話" "視像已關閉" "兩指向上滑動可接聽,向下滑動則可拒接。" - "緊急" + "重要事項" diff --git a/java/com/android/incallui/answer/impl/res/values-zh-rTW/strings.xml b/java/com/android/incallui/answer/impl/res/values-zh-rTW/strings.xml index f27e5ae5b..8f04992d1 100644 --- a/java/com/android/incallui/answer/impl/res/values-zh-rTW/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-zh-rTW/strings.xml @@ -1,4 +1,20 @@ + + "滑動圖示即可拒接來電並傳送簡訊" @@ -20,5 +36,5 @@ "接聽來電及結束進行中的通話" "已關閉攝影機" "用雙指向上滑動可接聽,向下滑動可拒接。" - "緊急" + "重要" diff --git a/java/com/android/incallui/answer/impl/res/values-zu/strings.xml b/java/com/android/incallui/answer/impl/res/values-zu/strings.xml index 52f2400eb..23c988eaa 100644 --- a/java/com/android/incallui/answer/impl/res/values-zu/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values-zu/strings.xml @@ -1,4 +1,20 @@ + + "Swayipha isithonjana ukuze wenqabe ngomlayezo" @@ -20,5 +36,5 @@ "Phendula uphinde uqede ikholi eqhubekayo" "Ividiyo ivaliwe" "Swayiphela iminwe emibili phezulu ukuze uphendule. Swayiphela iminwe emibili phansi ukuze wenqabe." - "Okuphuthumayo" + "Kubalulekile" diff --git a/java/com/android/incallui/answer/impl/res/values/strings.xml b/java/com/android/incallui/answer/impl/res/values/strings.xml index 235922047..de5ee6e69 100644 --- a/java/com/android/incallui/answer/impl/res/values/strings.xml +++ b/java/com/android/incallui/answer/impl/res/values/strings.xml @@ -1,4 +1,19 @@ + Swipe from icon to decline with message Swipe from icon to answer as an audio call @@ -26,5 +41,5 @@ Two finger swipe up to answer. Two finger swipe down to decline. - Urgent + Important diff --git a/java/com/android/incallui/answer/protocol/AnswerScreen.java b/java/com/android/incallui/answer/protocol/AnswerScreen.java index 8bcad6e35..5ad500200 100644 --- a/java/com/android/incallui/answer/protocol/AnswerScreen.java +++ b/java/com/android/incallui/answer/protocol/AnswerScreen.java @@ -30,6 +30,8 @@ public interface AnswerScreen { boolean allowAnswerAndRelease(); + boolean isActionTimeout(); + void setTextResponses(List textResponses); boolean hasPendingDialogs(); diff --git a/java/com/android/incallui/answer/protocol/AnswerScreenDelegate.java b/java/com/android/incallui/answer/protocol/AnswerScreenDelegate.java index 9815981ca..5d2c415ed 100644 --- a/java/com/android/incallui/answer/protocol/AnswerScreenDelegate.java +++ b/java/com/android/incallui/answer/protocol/AnswerScreenDelegate.java @@ -32,6 +32,10 @@ public interface AnswerScreenDelegate { void onReject(); void onAnswerAndReleaseCall(); + + void onAnswerAndReleaseButtonEnabled(); + + void onAnswerAndReleaseButtonDisabled(); /** * Sets the window background color based on foreground call's theme and the given progress. This * is called from the answer UI to animate the accept and reject action. @@ -42,4 +46,7 @@ public interface AnswerScreenDelegate { * @param progress float from -1 to 1. -1 is fully rejected, 1 is fully accepted, and 0 is neutral */ void updateWindowBackgroundColor(@FloatRange(from = -1f, to = 1.0f) float progress); + + /** Returns true if any answer/reject action timed out. */ + boolean isActionTimeout(); } diff --git a/java/com/android/incallui/answerproximitysensor/AnswerProximitySensor.java b/java/com/android/incallui/answerproximitysensor/AnswerProximitySensor.java index 24fbfc428..536a470b0 100644 --- a/java/com/android/incallui/answerproximitysensor/AnswerProximitySensor.java +++ b/java/com/android/incallui/answerproximitysensor/AnswerProximitySensor.java @@ -20,8 +20,8 @@ import android.content.Context; import android.hardware.display.DisplayManager; import android.os.PowerManager; import android.view.Display; -import com.android.dialer.common.ConfigProviderBindings; import com.android.dialer.common.LogUtil; +import com.android.dialer.configprovider.ConfigProviderBindings; import com.android.incallui.call.DialerCall; import com.android.incallui.call.DialerCall.State; import com.android.incallui.call.DialerCallListener; @@ -142,6 +142,9 @@ public class AnswerProximitySensor @Override public void onInternationalCallOnWifi() {} + @Override + public void onEnrichedCallSessionUpdate() {} + @Override public void onDialerCallSessionModificationStateChange() {} diff --git a/java/com/android/incallui/audioroute/AudioRouteSelectorDialogFragment.java b/java/com/android/incallui/audioroute/AudioRouteSelectorDialogFragment.java index c757477f1..c7a9d6332 100644 --- a/java/com/android/incallui/audioroute/AudioRouteSelectorDialogFragment.java +++ b/java/com/android/incallui/audioroute/AudioRouteSelectorDialogFragment.java @@ -18,6 +18,7 @@ package com.android.incallui.audioroute; import android.app.Dialog; import android.content.Context; +import android.content.DialogInterface; import android.content.res.ColorStateList; import android.graphics.PorterDuff.Mode; import android.os.Bundle; @@ -41,6 +42,8 @@ public class AudioRouteSelectorDialogFragment extends BottomSheetDialogFragment /** Called when an audio route is picked */ public interface AudioRouteSelectorPresenter { void onAudioRouteSelected(int audioRoute); + + void onAudioRouteSelectorDismiss(); } public static AudioRouteSelectorDialogFragment newInstance(CallAudioState audioState) { @@ -91,6 +94,14 @@ public class AudioRouteSelectorDialogFragment extends BottomSheetDialogFragment return view; } + @Override + public void onDismiss(DialogInterface dialogInterface) { + super.onDismiss(dialogInterface); + FragmentUtils.getParentUnsafe( + AudioRouteSelectorDialogFragment.this, AudioRouteSelectorPresenter.class) + .onAudioRouteSelectorDismiss(); + } + private void initItem(TextView item, final int itemRoute, CallAudioState audioState) { int selectedColor = getResources().getColor(R.color.dialer_theme_color); if ((audioState.getSupportedRouteMask() & itemRoute) == 0) { diff --git a/java/com/android/incallui/bindings/InCallUiBindings.java b/java/com/android/incallui/bindings/InCallUiBindings.java index d3d3a8b37..5c6aef4be 100644 --- a/java/com/android/incallui/bindings/InCallUiBindings.java +++ b/java/com/android/incallui/bindings/InCallUiBindings.java @@ -19,7 +19,6 @@ package com.android.incallui.bindings; import android.content.Context; import android.content.Intent; import android.support.annotation.Nullable; -import com.android.dialer.common.ConfigProvider; /** This interface allows the container application to customize the in call UI. */ public interface InCallUiBindings { @@ -37,12 +36,4 @@ public interface InCallUiBindings { */ @Nullable Intent getCallStateButtonBroadcastIntent(Context context); - - @Nullable - DistanceHelper newDistanceHelper(Context context, DistanceHelper.Listener listener); - - @Nullable - ContactUtils getContactUtilsInstance(Context context); - - ConfigProvider getConfigProvider(); } diff --git a/java/com/android/incallui/bindings/InCallUiBindingsStub.java b/java/com/android/incallui/bindings/InCallUiBindingsStub.java index 7b42fb375..3a005b0fb 100644 --- a/java/com/android/incallui/bindings/InCallUiBindingsStub.java +++ b/java/com/android/incallui/bindings/InCallUiBindingsStub.java @@ -19,11 +19,9 @@ package com.android.incallui.bindings; import android.content.Context; import android.content.Intent; import android.support.annotation.Nullable; -import com.android.dialer.common.ConfigProvider; /** Default implementation for InCallUi bindings. */ public class InCallUiBindingsStub implements InCallUiBindings { - private ConfigProvider configProvider; @Override @Nullable @@ -42,40 +40,4 @@ public class InCallUiBindingsStub implements InCallUiBindings { public Intent getCallStateButtonBroadcastIntent(Context context) { return null; } - - @Override - @Nullable - public DistanceHelper newDistanceHelper(Context context, DistanceHelper.Listener listener) { - return null; - } - - @Override - @Nullable - public ContactUtils getContactUtilsInstance(Context context) { - return null; - } - - @Override - public ConfigProvider getConfigProvider() { - if (configProvider == null) { - configProvider = - new ConfigProvider() { - @Override - public String getString(String key, String defaultValue) { - return defaultValue; - } - - @Override - public long getLong(String key, long defaultValue) { - return defaultValue; - } - - @Override - public boolean getBoolean(String key, boolean defaultValue) { - return defaultValue; - } - }; - } - return configProvider; - } } diff --git a/java/com/android/incallui/call/CallList.java b/java/com/android/incallui/call/CallList.java index 34f0cc0d7..269fcd68b 100644 --- a/java/com/android/incallui/call/CallList.java +++ b/java/com/android/incallui/call/CallList.java @@ -32,6 +32,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.enrichedcall.EnrichedCallComponent; +import com.android.dialer.enrichedcall.EnrichedCallManager; import com.android.dialer.location.GeoUtil; import com.android.dialer.logging.DialerImpression; import com.android.dialer.logging.Logger; @@ -117,6 +119,10 @@ public class CallList implements DialerCallDelegate { new DialerCall(context, this, telecomCall, latencyReport, true /* registerCallback */); logSecondIncomingCall(context, call); + EnrichedCallManager manager = EnrichedCallComponent.get(context).getEnrichedCallManager(); + manager.registerCapabilitiesListener(call); + manager.registerStateChangedListener(call); + final DialerCallListenerImpl dialerCallListener = new DialerCallListenerImpl(call); call.addListener(dialerCallListener); LogUtil.d("CallList.onCallAdded", "callState=" + call.getState()); @@ -278,6 +284,10 @@ public class CallList implements DialerCallDelegate { DialerCall call = mCallByTelecomCall.get(telecomCall); Assert.checkArgument(!call.isExternalCall()); + EnrichedCallManager manager = EnrichedCallComponent.get(context).getEnrichedCallManager(); + manager.unregisterCapabilitiesListener(call); + manager.unregisterStateChangedListener(call); + // Don't log an already logged call. logCall() might be called multiple times // for the same call due to b/24109437. if (call.getLogState() != null && !call.getLogState().isLogged) { @@ -289,6 +299,8 @@ public class CallList implements DialerCallDelegate { LogUtil.w( "CallList.onCallRemoved", "Removing call not previously disconnected " + call.getId()); } + + call.onRemovedFromCallList(); } if (!hasLiveCall()) { @@ -556,7 +568,8 @@ public class CallList implements DialerCallDelegate { * * @param call The call to update. */ - private void onUpdateCall(DialerCall call) { + @VisibleForTesting + void onUpdateCall(DialerCall call) { LogUtil.d("CallList.onUpdateCall", String.valueOf(call)); if (!mCallById.containsKey(call.getId()) && call.isExternalCall()) { // When a regular call becomes external, it is removed from the call list, and there may be @@ -792,6 +805,9 @@ public class CallList implements DialerCallDelegate { } } + @Override + public void onEnrichedCallSessionUpdate() {} + @Override public void onDialerCallSessionModificationStateChange() { for (Listener listener : mListeners) { diff --git a/java/com/android/incallui/call/DialerCall.java b/java/com/android/incallui/call/DialerCall.java index acedf41f1..88e0dbb5e 100644 --- a/java/com/android/incallui/call/DialerCall.java +++ b/java/com/android/incallui/call/DialerCall.java @@ -47,10 +47,14 @@ import com.android.dialer.callintent.CallInitiationType; import com.android.dialer.callintent.CallIntentParser; 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.configprovider.ConfigProviderBindings; import com.android.dialer.enrichedcall.EnrichedCallCapabilities; import com.android.dialer.enrichedcall.EnrichedCallComponent; +import com.android.dialer.enrichedcall.EnrichedCallManager; +import com.android.dialer.enrichedcall.EnrichedCallManager.CapabilitiesListener; +import com.android.dialer.enrichedcall.EnrichedCallManager.Filter; +import com.android.dialer.enrichedcall.EnrichedCallManager.StateChangedListener; import com.android.dialer.enrichedcall.Session; import com.android.dialer.lightbringer.LightbringerComponent; import com.android.dialer.logging.ContactLookupResult; @@ -77,7 +81,7 @@ import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.TimeUnit; /** Describes a single call and its state. */ -public class DialerCall implements VideoTechListener { +public class DialerCall implements VideoTechListener, StateChangedListener, CapabilitiesListener { public static final int CALL_HISTORY_STATUS_UNKNOWN = 0; public static final int CALL_HISTORY_STATUS_PRESENT = 1; @@ -143,6 +147,12 @@ public class DialerCall implements VideoTechListener { private EnrichedCallCapabilities mEnrichedCallCapabilities; private Session mEnrichedCallSession; + private int answerAndReleaseButtonDisplayedTimes = 0; + private boolean releasedByAnsweringSecondCall = false; + // Times when a second call is received but AnswerAndRelease button is not shown + // since it's not supported. + private int secondCallWithoutAnswerAndReleasedButtonTimes = 0; + public static String getNumberFromHandle(Uri handle) { return handle == null ? "" : handle.getSchemeSpecificPart(); } @@ -153,6 +163,9 @@ public class DialerCall implements VideoTechListener { */ private boolean isRemotelyHeld; + /** Indicates whether this call is currently in the process of being merged into a conference. */ + private boolean isMergeInProcess; + /** * Indicates whether the phone account associated with this call supports specifying a call * subject. @@ -255,6 +268,14 @@ public class DialerCall implements VideoTechListener { case TelephonyManagerCompat.EVENT_NOTIFY_INTERNATIONAL_CALL_ON_WFC: notifyInternationalCallOnWifi(); break; + case TelephonyManagerCompat.EVENT_MERGE_START: + LogUtil.i("DialerCall.onConnectionEvent", "merge start"); + isMergeInProcess = true; + break; + case TelephonyManagerCompat.EVENT_MERGE_COMPLETE: + LogUtil.i("DialerCall.onConnectionEvent", "merge complete"); + isMergeInProcess = false; + break; default: break; } @@ -292,6 +313,8 @@ public class DialerCall implements VideoTechListener { mTimeAddedMs = System.currentTimeMillis(); parseCallSpecificAppData(); + + updateEnrichedCallSession(); } private static int translateState(int state) { @@ -413,6 +436,12 @@ public class DialerCall implements VideoTechListener { for (DialerCallListener listener : mListeners) { listener.onDialerCallDisconnect(); } + EnrichedCallComponent.get(mContext) + .getEnrichedCallManager() + .unregisterCapabilitiesListener(this); + EnrichedCallComponent.get(mContext) + .getEnrichedCallManager() + .unregisterCapabilitiesListener(this); } else { for (DialerCallListener listener : mListeners) { listener.onDialerCallUpdate(); @@ -952,6 +981,10 @@ public class DialerCall implements VideoTechListener { return isRemotelyHeld; } + public boolean isMergeInProcess() { + return isMergeInProcess; + } + public boolean isIncoming() { return mLogState.isIncoming; } @@ -960,6 +993,30 @@ public class DialerCall implements VideoTechListener { return mLatencyReport; } + public int getAnswerAndReleaseButtonDisplayedTimes() { + return answerAndReleaseButtonDisplayedTimes; + } + + public void increaseAnswerAndReleaseButtonDisplayedTimes() { + answerAndReleaseButtonDisplayedTimes++; + } + + public boolean getReleasedByAnsweringSecondCall() { + return releasedByAnsweringSecondCall; + } + + public void setReleasedByAnsweringSecondCall(boolean releasedByAnsweringSecondCall) { + this.releasedByAnsweringSecondCall = releasedByAnsweringSecondCall; + } + + public int getSecondCallWithoutAnswerAndReleasedButtonTimes() { + return secondCallWithoutAnswerAndReleasedButtonTimes; + } + + public void increaseSecondCallWithoutAnswerAndReleasedButtonTimes() { + secondCallWithoutAnswerAndReleasedButtonTimes++; + } + @Nullable public EnrichedCallCapabilities getEnrichedCallCapabilities() { return mEnrichedCallCapabilities; @@ -1172,6 +1229,71 @@ public class DialerCall implements VideoTechListener { TelecomAdapter.getInstance().setAudioRoute(CallAudioState.ROUTE_SPEAKER); } + @Override + public void onCapabilitiesUpdated() { + if (getNumber() == null) { + return; + } + EnrichedCallCapabilities capabilities = + EnrichedCallComponent.get(mContext).getEnrichedCallManager().getCapabilities(getNumber()); + if (capabilities != null) { + setEnrichedCallCapabilities(capabilities); + update(); + } + } + + @Override + public void onEnrichedCallStateChanged() { + updateEnrichedCallSession(); + } + + private void updateEnrichedCallSession() { + if (getNumber() == null) { + return; + } + if (getEnrichedCallSession() != null) { + // State changes to existing sessions are currently handled by the UI components (which have + // their own listeners). Someday instead we could remove those and just call update() here and + // have the usual onDialerCallUpdate update the UI. + dispatchOnEnrichedCallSessionUpdate(); + return; + } + + EnrichedCallManager manager = EnrichedCallComponent.get(mContext).getEnrichedCallManager(); + + Filter filter = + isIncoming() + ? manager.createIncomingCallComposerFilter() + : manager.createOutgoingCallComposerFilter(); + + Session session = manager.getSession(getUniqueCallId(), getNumber(), filter); + if (session == null) { + return; + } + + session.setUniqueDialerCallId(getUniqueCallId()); + setEnrichedCallSession(session); + + LogUtil.i( + "DialerCall.updateEnrichedCallSession", + "setting session %d's dialer id to %s", + session.getSessionId(), + getUniqueCallId()); + + dispatchOnEnrichedCallSessionUpdate(); + } + + private void dispatchOnEnrichedCallSessionUpdate() { + for (DialerCallListener listener : mListeners) { + listener.onEnrichedCallSessionUpdate(); + } + } + + void onRemovedFromCallList() { + // Ensure we clean up when this call is removed. + mVideoTechManager.dispatchRemovedFromCallList(); + } + /** * Specifies whether a number is in the call history or not. {@link #CALL_HISTORY_STATUS_UNKNOWN} * means there is no result. @@ -1372,6 +1494,7 @@ 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 videoTechs = new ArrayList<>(); @@ -1390,7 +1513,10 @@ public class DialerCall implements VideoTechListener { videoTechs.add( new LightbringerTech( - LightbringerComponent.get(call.mContext).getLightbringer(), call, phoneNumber)); + LightbringerComponent.get(call.mContext).getLightbringer(), + call, + call.mTelecomCall, + phoneNumber)); } VideoTech getVideoTech() { @@ -1414,6 +1540,12 @@ public class DialerCall implements VideoTechListener { videoTech.onCallStateChanged(context, newState); } } + + void dispatchRemovedFromCallList() { + for (VideoTech videoTech : videoTechs) { + videoTech.onRemovedFromCallList(); + } + } } /** Called when canned text responses have been loaded. */ diff --git a/java/com/android/incallui/call/DialerCallListener.java b/java/com/android/incallui/call/DialerCallListener.java index ed321be05..5d24a4d4b 100644 --- a/java/com/android/incallui/call/DialerCallListener.java +++ b/java/com/android/incallui/call/DialerCallListener.java @@ -36,4 +36,6 @@ public interface DialerCallListener { void onHandoverToWifiFailure(); void onInternationalCallOnWifi(); + + void onEnrichedCallSessionUpdate(); } diff --git a/java/com/android/incallui/call/TelecomAdapter.java b/java/com/android/incallui/call/TelecomAdapter.java index ebf4ecf4f..4fc9f81eb 100644 --- a/java/com/android/incallui/call/TelecomAdapter.java +++ b/java/com/android/incallui/call/TelecomAdapter.java @@ -20,12 +20,13 @@ import android.content.ActivityNotFoundException; import android.content.Intent; import android.os.Looper; import android.support.annotation.MainThread; +import android.support.annotation.VisibleForTesting; import android.telecom.InCallService; import com.android.dialer.common.LogUtil; import java.util.List; /** Wrapper around Telecom APIs. */ -public final class TelecomAdapter implements InCallServiceListener { +public class TelecomAdapter implements InCallServiceListener { private static final String ADD_CALL_MODE_KEY = "add_call_mode"; @@ -45,6 +46,11 @@ public final class TelecomAdapter implements InCallServiceListener { return sInstance; } + @VisibleForTesting(otherwise = VisibleForTesting.NONE) + public static void setInstanceForTesting(TelecomAdapter telecomAdapter) { + sInstance = telecomAdapter; + } + @Override public void setInCallService(InCallService inCallService) { mInCallService = inCallService; diff --git a/java/com/android/incallui/calllocation/impl/DownloadMapImageTask.java b/java/com/android/incallui/calllocation/impl/DownloadMapImageTask.java index 801b0d35c..b093a1b15 100644 --- a/java/com/android/incallui/calllocation/impl/DownloadMapImageTask.java +++ b/java/com/android/incallui/calllocation/impl/DownloadMapImageTask.java @@ -21,6 +21,7 @@ import android.location.Location; import android.net.TrafficStats; import android.os.AsyncTask; import com.android.dialer.common.LogUtil; +import com.android.dialer.constants.TrafficStatsTags; import com.android.incallui.calllocation.impl.LocationPresenter.LocationUi; import java.io.InputStream; import java.lang.ref.WeakReference; diff --git a/java/com/android/incallui/calllocation/impl/LocationHelper.java b/java/com/android/incallui/calllocation/impl/LocationHelper.java index 3a1478945..99a759bbb 100644 --- a/java/com/android/incallui/calllocation/impl/LocationHelper.java +++ b/java/com/android/incallui/calllocation/impl/LocationHelper.java @@ -24,6 +24,7 @@ import android.os.Bundle; import android.os.Handler; import android.support.annotation.IntDef; import android.support.annotation.MainThread; +import android.support.v4.os.UserManagerCompat; import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; import com.android.dialer.util.PermissionsUtil; @@ -87,6 +88,12 @@ public class LocationHelper { LogUtil.i("LocationHelper.canGetLocation", "location service is disabled."); return false; } + + if (!UserManagerCompat.isUserUnlocked(context)) { + LogUtil.i("LocationHelper.canGetLocation", "location unavailable in FBE mode."); + return false; + } + return true; } diff --git a/java/com/android/incallui/calllocation/impl/ReverseGeocodeTask.java b/java/com/android/incallui/calllocation/impl/ReverseGeocodeTask.java index eb5957b05..060ec0b4f 100644 --- a/java/com/android/incallui/calllocation/impl/ReverseGeocodeTask.java +++ b/java/com/android/incallui/calllocation/impl/ReverseGeocodeTask.java @@ -20,6 +20,7 @@ import android.location.Location; import android.net.TrafficStats; import android.os.AsyncTask; import com.android.dialer.common.LogUtil; +import com.android.dialer.constants.TrafficStatsTags; import com.android.incallui.calllocation.impl.LocationPresenter.LocationUi; import java.lang.ref.WeakReference; import org.json.JSONArray; diff --git a/java/com/android/incallui/calllocation/impl/TrafficStatsTags.java b/java/com/android/incallui/calllocation/impl/TrafficStatsTags.java deleted file mode 100644 index 02cc2e083..000000000 --- a/java/com/android/incallui/calllocation/impl/TrafficStatsTags.java +++ /dev/null @@ -1,29 +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 - */ - -package com.android.incallui.calllocation.impl; - -/** Constants used for logging */ -public class TrafficStatsTags { - - /** - * Must be greater than {@link com.android.contacts.common.util.TrafficStatsTags#TAG_MAX}, to - * respect the namespace of the tags in ContactsCommon. - */ - public static final int DOWNLOAD_LOCATION_MAP_TAG = 0xd000; - - public static final int REVERSE_GEOCODE_TAG = 0xd001; -} diff --git a/java/com/android/incallui/commontheme/res/anim/blinking.xml b/java/com/android/incallui/commontheme/res/anim/blinking.xml deleted file mode 100644 index 4b921c611..000000000 --- a/java/com/android/incallui/commontheme/res/anim/blinking.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - \ No newline at end of file diff --git a/java/com/android/incallui/commontheme/res/drawable-hdpi/ic_phone_audio_white_36dp.png b/java/com/android/incallui/commontheme/res/drawable-hdpi/ic_phone_audio_white_36dp.png deleted file mode 100644 index 26f3fe001..000000000 Binary files a/java/com/android/incallui/commontheme/res/drawable-hdpi/ic_phone_audio_white_36dp.png and /dev/null differ diff --git a/java/com/android/incallui/commontheme/res/drawable-mdpi/ic_phone_audio_white_36dp.png b/java/com/android/incallui/commontheme/res/drawable-mdpi/ic_phone_audio_white_36dp.png deleted file mode 100644 index 5b0a9d663..000000000 Binary files a/java/com/android/incallui/commontheme/res/drawable-mdpi/ic_phone_audio_white_36dp.png and /dev/null differ diff --git a/java/com/android/incallui/commontheme/res/drawable-xhdpi/ic_phone_audio_white_36dp.png b/java/com/android/incallui/commontheme/res/drawable-xhdpi/ic_phone_audio_white_36dp.png deleted file mode 100644 index d595b190d..000000000 Binary files a/java/com/android/incallui/commontheme/res/drawable-xhdpi/ic_phone_audio_white_36dp.png and /dev/null differ diff --git a/java/com/android/incallui/commontheme/res/drawable-xxhdpi/ic_phone_audio_white_36dp.png b/java/com/android/incallui/commontheme/res/drawable-xxhdpi/ic_phone_audio_white_36dp.png deleted file mode 100644 index fb7cf161b..000000000 Binary files a/java/com/android/incallui/commontheme/res/drawable-xxhdpi/ic_phone_audio_white_36dp.png and /dev/null differ diff --git a/java/com/android/incallui/commontheme/res/drawable-xxxhdpi/ic_phone_audio_white_36dp.png b/java/com/android/incallui/commontheme/res/drawable-xxxhdpi/ic_phone_audio_white_36dp.png deleted file mode 100644 index 4bb58d9f5..000000000 Binary files a/java/com/android/incallui/commontheme/res/drawable-xxxhdpi/ic_phone_audio_white_36dp.png and /dev/null differ diff --git a/java/com/android/incallui/commontheme/res/values-af/strings.xml b/java/com/android/incallui/commontheme/res/values-af/strings.xml index 0dfdbc7d5..0721869bb 100644 --- a/java/com/android/incallui/commontheme/res/values-af/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-af/strings.xml @@ -1,4 +1,20 @@ + + "Beëindig oproep" @@ -15,4 +31,6 @@ "Video aan" "Video af" "Verwissel video" + "Luidspreker" + "Klank" diff --git a/java/com/android/incallui/commontheme/res/values-am/strings.xml b/java/com/android/incallui/commontheme/res/values-am/strings.xml index 3155c39be..9d748e380 100644 --- a/java/com/android/incallui/commontheme/res/values-am/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-am/strings.xml @@ -1,4 +1,20 @@ + + "ጥሪ ጨርስ" @@ -15,4 +31,6 @@ "ቪዲዮ በርቷል" "ቪዲዮ ጠፍቷል" "ቪዲዮ አገላብጥ" + "የድምጽ ማጉያ" + "ድምፅ" diff --git a/java/com/android/incallui/commontheme/res/values-ar/strings.xml b/java/com/android/incallui/commontheme/res/values-ar/strings.xml index ecb3608bd..693bfc57a 100644 --- a/java/com/android/incallui/commontheme/res/values-ar/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-ar/strings.xml @@ -1,4 +1,20 @@ + + "إنهاء المكالمة" @@ -15,4 +31,6 @@ "الفيديو قيد التشغيل" "الفيديو ليس قيد التشغيل" "تبديل الفيديو" + "مكبر الصوت" + "صوت" diff --git a/java/com/android/incallui/commontheme/res/values-az/strings.xml b/java/com/android/incallui/commontheme/res/values-az/strings.xml index d935a6c93..a1d88ceef 100644 --- a/java/com/android/incallui/commontheme/res/values-az/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-az/strings.xml @@ -1,4 +1,20 @@ + + "Zəngi sonlandırın" @@ -15,4 +31,6 @@ "Video aktivdir" "Video deaktivdir" "Videonu dəyişdirin" + "Dinamik" + "Səs" 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 index 36430c42b..05ae59cdd 100644 --- 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 @@ -1,4 +1,20 @@ + + "Završi poziv" @@ -15,4 +31,6 @@ "Uključi video" "Isključi video" "Zameni video" + "Zvučnik" + "Zvuk" diff --git a/java/com/android/incallui/commontheme/res/values-be/strings.xml b/java/com/android/incallui/commontheme/res/values-be/strings.xml index 9609a6346..e772e2795 100644 --- a/java/com/android/incallui/commontheme/res/values-be/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-be/strings.xml @@ -1,4 +1,20 @@ + + "Завяршыць выклік" @@ -15,4 +31,6 @@ "Відэа ўкл." "Відэа выкл." "Пераключыць відэа" + "Вонк.дынамік" + "Гук" diff --git a/java/com/android/incallui/commontheme/res/values-bg/strings.xml b/java/com/android/incallui/commontheme/res/values-bg/strings.xml index 1a0f3e312..63364f8e6 100644 --- a/java/com/android/incallui/commontheme/res/values-bg/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-bg/strings.xml @@ -1,4 +1,20 @@ + + "Край на обаждането" @@ -15,4 +31,6 @@ "Видеото е включено" "Видеото е изключено" "Размяна на видеото" + "Високогов." + "Звук" diff --git a/java/com/android/incallui/commontheme/res/values-bn/strings.xml b/java/com/android/incallui/commontheme/res/values-bn/strings.xml index ef2408f64..9871ea447 100644 --- a/java/com/android/incallui/commontheme/res/values-bn/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-bn/strings.xml @@ -1,4 +1,20 @@ + + "কল কেটে দিন" @@ -15,4 +31,6 @@ "ভিডিও চালু আছে" "ভিডিও বন্ধ আছে" "ভিডিও অদল বদল করুন" + "স্পিকার" + "শব্দ" diff --git a/java/com/android/incallui/commontheme/res/values-bs/strings.xml b/java/com/android/incallui/commontheme/res/values-bs/strings.xml index bfaff983f..76f991d64 100644 --- a/java/com/android/incallui/commontheme/res/values-bs/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-bs/strings.xml @@ -1,4 +1,20 @@ + + "Prekini poziv" @@ -15,4 +31,6 @@ "Kamera je uključena" "Kamera je isključena" "Zamijeni kameru" + "Zvučnik" + "Zvuk" diff --git a/java/com/android/incallui/commontheme/res/values-ca/strings.xml b/java/com/android/incallui/commontheme/res/values-ca/strings.xml index 1b6ed4492..832027d39 100644 --- a/java/com/android/incallui/commontheme/res/values-ca/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-ca/strings.xml @@ -1,4 +1,20 @@ + + "Finalitza la trucada" @@ -15,4 +31,6 @@ "Vídeo activat" "Vídeo desactivat" "Canvia de vídeo" + "Altaveu" + "So" diff --git a/java/com/android/incallui/commontheme/res/values-cs/strings.xml b/java/com/android/incallui/commontheme/res/values-cs/strings.xml index 1f10d85fe..7afdcba0b 100644 --- a/java/com/android/incallui/commontheme/res/values-cs/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-cs/strings.xml @@ -1,4 +1,20 @@ + + "Ukončit hovor" @@ -15,4 +31,6 @@ "Zapnuté video" "Vypnuté video" "Přepnout video" + "Reproduktor" + "Zvuk" diff --git a/java/com/android/incallui/commontheme/res/values-da/strings.xml b/java/com/android/incallui/commontheme/res/values-da/strings.xml index 35d01e317..bd26e90e5 100644 --- a/java/com/android/incallui/commontheme/res/values-da/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-da/strings.xml @@ -1,4 +1,20 @@ + + "Afslut opkald" @@ -15,4 +31,6 @@ "Video til" "Video fra" "Byt video" + "Højttaler" + "Lyd" diff --git a/java/com/android/incallui/commontheme/res/values-de/strings.xml b/java/com/android/incallui/commontheme/res/values-de/strings.xml index 57a95b7f3..3fd10f0e6 100644 --- a/java/com/android/incallui/commontheme/res/values-de/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-de/strings.xml @@ -1,4 +1,20 @@ + + "Anruf beenden" @@ -15,4 +31,6 @@ "Video an" "Video aus" "Video wechseln" + "Lautsprecher" + "Tonausgabe" diff --git a/java/com/android/incallui/commontheme/res/values-el/strings.xml b/java/com/android/incallui/commontheme/res/values-el/strings.xml index 6bb9edcd1..71c0be9a7 100644 --- a/java/com/android/incallui/commontheme/res/values-el/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-el/strings.xml @@ -1,4 +1,20 @@ + + "Τερματισμός" @@ -15,4 +31,6 @@ "Εικόνα βίντεο ενεργοποιημένη" "Εικόνα βίντεο απενεργοποιημένη" "Εναλλαγή βίντεο" + "Ηχείο" + "Ήχος" diff --git a/java/com/android/incallui/commontheme/res/values-en-rAU/strings.xml b/java/com/android/incallui/commontheme/res/values-en-rAU/strings.xml index 8133185b5..4869c3fa3 100644 --- a/java/com/android/incallui/commontheme/res/values-en-rAU/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-en-rAU/strings.xml @@ -1,4 +1,20 @@ + + "End call" @@ -15,4 +31,6 @@ "Video on" "Video off" "Swap video" + "Speaker" + "Sound" diff --git a/java/com/android/incallui/commontheme/res/values-en-rGB/strings.xml b/java/com/android/incallui/commontheme/res/values-en-rGB/strings.xml index 8133185b5..4869c3fa3 100644 --- a/java/com/android/incallui/commontheme/res/values-en-rGB/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-en-rGB/strings.xml @@ -1,4 +1,20 @@ + + "End call" @@ -15,4 +31,6 @@ "Video on" "Video off" "Swap video" + "Speaker" + "Sound" diff --git a/java/com/android/incallui/commontheme/res/values-en-rIN/strings.xml b/java/com/android/incallui/commontheme/res/values-en-rIN/strings.xml index 8133185b5..4869c3fa3 100644 --- a/java/com/android/incallui/commontheme/res/values-en-rIN/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-en-rIN/strings.xml @@ -1,4 +1,20 @@ + + "End call" @@ -15,4 +31,6 @@ "Video on" "Video off" "Swap video" + "Speaker" + "Sound" diff --git a/java/com/android/incallui/commontheme/res/values-es-rUS/strings.xml b/java/com/android/incallui/commontheme/res/values-es-rUS/strings.xml index 45f2e2f42..a9596d9e6 100644 --- a/java/com/android/incallui/commontheme/res/values-es-rUS/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-es-rUS/strings.xml @@ -1,4 +1,20 @@ + + "Finalizar llamada" @@ -15,4 +31,6 @@ "Video activado" "Video desactivado" "Intercambiar video" + "Altavoz" + "Sonido" diff --git a/java/com/android/incallui/commontheme/res/values-es/strings.xml b/java/com/android/incallui/commontheme/res/values-es/strings.xml index 56c8b2852..aa84c625b 100644 --- a/java/com/android/incallui/commontheme/res/values-es/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-es/strings.xml @@ -1,4 +1,20 @@ + + "Finalizar llamada" @@ -15,4 +31,6 @@ "Vídeo activado" "Vídeo desactivado" "Cambiar de vídeo" + "Altavoz" + "Sonido" diff --git a/java/com/android/incallui/commontheme/res/values-et/strings.xml b/java/com/android/incallui/commontheme/res/values-et/strings.xml index 069f3b5fd..ae2e1ba53 100644 --- a/java/com/android/incallui/commontheme/res/values-et/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-et/strings.xml @@ -1,4 +1,20 @@ + + "Kõne lõpetamine" @@ -15,4 +31,6 @@ "Video on sees" "Video on väljas" "Video vahetamine" + "Kõlar" + "Heli" diff --git a/java/com/android/incallui/commontheme/res/values-eu/strings.xml b/java/com/android/incallui/commontheme/res/values-eu/strings.xml index bbcf5dc6e..0dd126c5a 100644 --- a/java/com/android/incallui/commontheme/res/values-eu/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-eu/strings.xml @@ -1,4 +1,20 @@ + + "Amaitu deia" @@ -15,4 +31,6 @@ "Aktibatuta dago bideoa" "Desaktibatuta dago bideoa" "Aldatu bideoa" + "Bozgorailua" + "Soinua" diff --git a/java/com/android/incallui/commontheme/res/values-fa/strings.xml b/java/com/android/incallui/commontheme/res/values-fa/strings.xml index ea967bb7e..1996ad47b 100644 --- a/java/com/android/incallui/commontheme/res/values-fa/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-fa/strings.xml @@ -1,4 +1,20 @@ + + "پایان تماس" @@ -15,4 +31,6 @@ "ویدئو فعال" "ویدئو غیرفعال" "جابه‌جایی ویدئو" + "بلندگو" + "صدا" diff --git a/java/com/android/incallui/commontheme/res/values-fi/strings.xml b/java/com/android/incallui/commontheme/res/values-fi/strings.xml index f0da44f07..5a579816b 100644 --- a/java/com/android/incallui/commontheme/res/values-fi/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-fi/strings.xml @@ -1,4 +1,20 @@ + + "Päätä puhelu" @@ -15,4 +31,6 @@ "Videokuva käytössä" "Videokuva poissa käytöstä" "Vaihda videota" + "Kaiutin" + "Ääni" diff --git a/java/com/android/incallui/commontheme/res/values-fr-rCA/strings.xml b/java/com/android/incallui/commontheme/res/values-fr-rCA/strings.xml index bf74dfbef..a1db3065a 100644 --- a/java/com/android/incallui/commontheme/res/values-fr-rCA/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-fr-rCA/strings.xml @@ -1,4 +1,20 @@ + + "Mettre fin à l\'appel" @@ -15,4 +31,6 @@ "Vidéo activée" "Vidéo désactivée" "Permuter la vidéo" + "Haut-parleur" + "Son" diff --git a/java/com/android/incallui/commontheme/res/values-fr/strings.xml b/java/com/android/incallui/commontheme/res/values-fr/strings.xml index fb674a483..e169a3d7a 100644 --- a/java/com/android/incallui/commontheme/res/values-fr/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-fr/strings.xml @@ -1,4 +1,20 @@ + + "Mettre fin à l\'appel" @@ -15,4 +31,6 @@ "Vidéo activée" "Vidéo désactivée" "Permuter la vidéo" + "Haut-parleur" + "Audio" diff --git a/java/com/android/incallui/commontheme/res/values-gl/strings.xml b/java/com/android/incallui/commontheme/res/values-gl/strings.xml index c7e221416..ba98a98a7 100644 --- a/java/com/android/incallui/commontheme/res/values-gl/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-gl/strings.xml @@ -1,4 +1,20 @@ + + "Finalizar chamada" @@ -15,4 +31,6 @@ "Vídeo activado" "Vídeo desactivado" "Alternar vídeo" + "Altofalante" + "Son" diff --git a/java/com/android/incallui/commontheme/res/values-gu/strings.xml b/java/com/android/incallui/commontheme/res/values-gu/strings.xml index 75584ea0d..194590cec 100644 --- a/java/com/android/incallui/commontheme/res/values-gu/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-gu/strings.xml @@ -1,4 +1,20 @@ + + "કૉલ સમાપ્ત કરો" @@ -15,4 +31,6 @@ "વિડિઓ ચાલુ" "વિડિઓ બંધ" "વિડિઓ સ્વેપ કરો" + "સ્પીકર" + "ધ્વનિ" diff --git a/java/com/android/incallui/commontheme/res/values-hi/strings.xml b/java/com/android/incallui/commontheme/res/values-hi/strings.xml index f7ea68ad8..207bbf2be 100644 --- a/java/com/android/incallui/commontheme/res/values-hi/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-hi/strings.xml @@ -1,4 +1,20 @@ + + "कॉल समाप्त करें" @@ -15,4 +31,6 @@ "वीडियो चालू" "वीडियो बंद" "वीडियो स्वैप करें" + "स्‍पीकर" + "ध्वनि" diff --git a/java/com/android/incallui/commontheme/res/values-hr/strings.xml b/java/com/android/incallui/commontheme/res/values-hr/strings.xml index c30f3977e..c58ab852f 100644 --- a/java/com/android/incallui/commontheme/res/values-hr/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-hr/strings.xml @@ -1,4 +1,20 @@ + + "Prekid poziva" @@ -15,4 +31,6 @@ "Videopoziv uključen" "Videopoziv isključen" "Zamijeni videopoziv" + "Zvučnik" + "Zvuk" diff --git a/java/com/android/incallui/commontheme/res/values-hu/strings.xml b/java/com/android/incallui/commontheme/res/values-hu/strings.xml index 9ee2300e2..ba7fec7d5 100644 --- a/java/com/android/incallui/commontheme/res/values-hu/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-hu/strings.xml @@ -1,4 +1,20 @@ + + "Hívás befejezése" @@ -15,4 +31,6 @@ "Videó be" "Videó ki" "Videó cseréje" + "Hangszóró" + "Hang" diff --git a/java/com/android/incallui/commontheme/res/values-hy/strings.xml b/java/com/android/incallui/commontheme/res/values-hy/strings.xml index 96a0cab6f..81262e4c6 100644 --- a/java/com/android/incallui/commontheme/res/values-hy/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-hy/strings.xml @@ -1,4 +1,20 @@ + + "Ավարտել զանգը" @@ -15,4 +31,6 @@ "Տեսախցիկը միացած է" "Տեսախցիկն անջատած է" "Փոխարկել խցիկը" + "Բարձրախոս" + "Ձայն" diff --git a/java/com/android/incallui/commontheme/res/values-in/strings.xml b/java/com/android/incallui/commontheme/res/values-in/strings.xml index 4536f5db0..fb3fc56ec 100644 --- a/java/com/android/incallui/commontheme/res/values-in/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-in/strings.xml @@ -1,4 +1,20 @@ + + "Akhiri panggilan" @@ -15,4 +31,6 @@ "Video aktif" "Video nonaktif" "Tukar Video" + "Speaker" + "Suara" diff --git a/java/com/android/incallui/commontheme/res/values-is/strings.xml b/java/com/android/incallui/commontheme/res/values-is/strings.xml index 357f90eee..438b143e4 100644 --- a/java/com/android/incallui/commontheme/res/values-is/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-is/strings.xml @@ -1,4 +1,20 @@ + + "Ljúka símtali" @@ -15,4 +31,6 @@ "Kveikja á mynd" "Slökkva á mynd" "Skipta um mynd" + "Hátalari" + "Hljóð" diff --git a/java/com/android/incallui/commontheme/res/values-it/strings.xml b/java/com/android/incallui/commontheme/res/values-it/strings.xml index a63d3140a..b7c1d3f4e 100644 --- a/java/com/android/incallui/commontheme/res/values-it/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-it/strings.xml @@ -1,4 +1,20 @@ + + "Termina chiamata" @@ -15,4 +31,6 @@ "Video attivo" "Video non attivo" "Scambia video" + "Altoparlante" + "Suono" diff --git a/java/com/android/incallui/commontheme/res/values-iw/strings.xml b/java/com/android/incallui/commontheme/res/values-iw/strings.xml index 1e2b7f2b1..cbd6d7573 100644 --- a/java/com/android/incallui/commontheme/res/values-iw/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-iw/strings.xml @@ -1,4 +1,20 @@ + + "סיים שיחה" @@ -15,4 +31,6 @@ "הווידאו מופעל" "הווידאו מושבת" "החלף וידאו" + "רמקול" + "קול" diff --git a/java/com/android/incallui/commontheme/res/values-ja/strings.xml b/java/com/android/incallui/commontheme/res/values-ja/strings.xml index 658b51349..4ea949581 100644 --- a/java/com/android/incallui/commontheme/res/values-ja/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-ja/strings.xml @@ -1,4 +1,20 @@ + + "通話を終了" @@ -15,4 +31,6 @@ "ビデオが ON になっています" "ビデオが OFF になっています" "ビデオを切り替える" + "スピーカー" + "音声" diff --git a/java/com/android/incallui/commontheme/res/values-ka/strings.xml b/java/com/android/incallui/commontheme/res/values-ka/strings.xml index ffba7cede..3163476b6 100644 --- a/java/com/android/incallui/commontheme/res/values-ka/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-ka/strings.xml @@ -1,4 +1,20 @@ + + "ზარის დასრულება" @@ -15,4 +31,6 @@ "ვიდეო ჩართულია" "ვიდეო გამორთულია" "ვიდეოს შენაცვლება" + "სპიკერი" + "ხმა" diff --git a/java/com/android/incallui/commontheme/res/values-kk/strings.xml b/java/com/android/incallui/commontheme/res/values-kk/strings.xml index ace83ecee..23b3a2ad6 100644 --- a/java/com/android/incallui/commontheme/res/values-kk/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-kk/strings.xml @@ -1,4 +1,20 @@ + + "Қоңырауды аяқтау" @@ -15,4 +31,6 @@ "Бейне қосулы" "Бейне өшірулі" "Бейнені ауыстыру" + "Динамик" + "Дыбыс" diff --git a/java/com/android/incallui/commontheme/res/values-km/strings.xml b/java/com/android/incallui/commontheme/res/values-km/strings.xml index e28f12029..55cfa0a16 100644 --- a/java/com/android/incallui/commontheme/res/values-km/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-km/strings.xml @@ -1,4 +1,20 @@ + + "បញ្ចប់​ការ​ហៅ" @@ -15,4 +31,6 @@ "បើក​វីដេអូ​" "បិទ​វីដេអូ" "ប្ដូរ​វីដេអូ" + "ឧបករណ៍​បំពង​សំឡេង" + "សំឡេង" diff --git a/java/com/android/incallui/commontheme/res/values-kn/strings.xml b/java/com/android/incallui/commontheme/res/values-kn/strings.xml index 59186e0a3..685ef642f 100644 --- a/java/com/android/incallui/commontheme/res/values-kn/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-kn/strings.xml @@ -1,4 +1,20 @@ + + "ಕರೆ ಅಂತ್ಯಗೊಳಿಸಿ" @@ -15,4 +31,6 @@ "ವೀಡಿಯೊ ಆನ್" "ವೀಡಿಯೊ ಆಫ್" "ವೀಡಿಯೊ ಬದಲಾಯಿಸಿ" + "ಸ್ಪೀಕರ್‌" + "ಶಬ್ದ" diff --git a/java/com/android/incallui/commontheme/res/values-ko/strings.xml b/java/com/android/incallui/commontheme/res/values-ko/strings.xml index 0a0e3c9aa..088746ddd 100644 --- a/java/com/android/incallui/commontheme/res/values-ko/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-ko/strings.xml @@ -1,4 +1,20 @@ + + "통화 종료" @@ -15,4 +31,6 @@ "동영상 켜짐" "동영상 꺼짐" "동영상 전환" + "스피커" + "소리" diff --git a/java/com/android/incallui/commontheme/res/values-ky/strings.xml b/java/com/android/incallui/commontheme/res/values-ky/strings.xml index ac697e4fe..5dd4d0c21 100644 --- a/java/com/android/incallui/commontheme/res/values-ky/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-ky/strings.xml @@ -1,4 +1,20 @@ + + "Чалууну бүтүрүү" @@ -15,4 +31,6 @@ "Видео күйүк" "Видео өчүк" "Видеону иштетүү/өчүрүү" + "Катуу сүйлөткүч" + "Добуш" diff --git a/java/com/android/incallui/commontheme/res/values-lo/strings.xml b/java/com/android/incallui/commontheme/res/values-lo/strings.xml index da2050ac2..2f0b94b54 100644 --- a/java/com/android/incallui/commontheme/res/values-lo/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-lo/strings.xml @@ -1,4 +1,20 @@ + + "ວາງສາຍ" @@ -15,4 +31,6 @@ "ວິດີໂອເປີດ" "ວິດີໂອປິດ" "ສະຫຼັບວິດີໂອ" + "ລຳໂພງ" + "ສຽງ" diff --git a/java/com/android/incallui/commontheme/res/values-lt/strings.xml b/java/com/android/incallui/commontheme/res/values-lt/strings.xml index bda53d6f6..d0a5e0d9c 100644 --- a/java/com/android/incallui/commontheme/res/values-lt/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-lt/strings.xml @@ -1,4 +1,20 @@ + + "Baigti skambutį" @@ -15,4 +31,6 @@ "Vaizdas įjungtas" "Vaizdas išjungtas" "Sukeisti vaizdą" + "Garsiakalbis" + "Garsas" diff --git a/java/com/android/incallui/commontheme/res/values-lv/strings.xml b/java/com/android/incallui/commontheme/res/values-lv/strings.xml index beaf35c58..443ac5e80 100644 --- a/java/com/android/incallui/commontheme/res/values-lv/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-lv/strings.xml @@ -1,4 +1,20 @@ + + "Beigt zvanu" @@ -15,4 +31,6 @@ "Video ieslēgts" "Video izslēgts" "Mainīt video" + "Skaļrunis" + "Skaņa" diff --git a/java/com/android/incallui/commontheme/res/values-mk/strings.xml b/java/com/android/incallui/commontheme/res/values-mk/strings.xml index 5b4f6d0c5..d9a339eab 100644 --- a/java/com/android/incallui/commontheme/res/values-mk/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-mk/strings.xml @@ -1,4 +1,20 @@ + + "Завршете го повикот" @@ -15,4 +31,6 @@ "Видеото е вклучено" "Видеото е исклучено" "Заменете го видеото" + "Звучник" + "Звук" diff --git a/java/com/android/incallui/commontheme/res/values-ml/strings.xml b/java/com/android/incallui/commontheme/res/values-ml/strings.xml index 024266736..0f2d88968 100644 --- a/java/com/android/incallui/commontheme/res/values-ml/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-ml/strings.xml @@ -1,4 +1,20 @@ + + "കോള്‍ അവസാനിപ്പിക്കൂ" @@ -15,4 +31,6 @@ "വീഡിയോ ഓണാണ്" "വീഡിയോ ഓഫാണ്" "വീഡിയോ സ്വാപ്പുചെയ്യുക" + "സ്പീക്കർ" + "ശബ്‌ദം" diff --git a/java/com/android/incallui/commontheme/res/values-mn/strings.xml b/java/com/android/incallui/commontheme/res/values-mn/strings.xml index cd286edb9..3665fcfa6 100644 --- a/java/com/android/incallui/commontheme/res/values-mn/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-mn/strings.xml @@ -1,4 +1,20 @@ + + "Дуудлагыг таслах" @@ -15,4 +31,6 @@ "Видео идэвхтэй" "Видео идэвхгүй" "Видеог солих" + "Чанга яригч" + "Дуу" diff --git a/java/com/android/incallui/commontheme/res/values-mr/strings.xml b/java/com/android/incallui/commontheme/res/values-mr/strings.xml index 2c626edbd..f7498097f 100644 --- a/java/com/android/incallui/commontheme/res/values-mr/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-mr/strings.xml @@ -1,4 +1,20 @@ + + "कॉल समाप्त करा" @@ -15,4 +31,6 @@ "व्हिडिओ चालू" "व्हिडिओ बंद" "व्हिडिओ बदला" + "स्पीकर" + "ध्वनी" diff --git a/java/com/android/incallui/commontheme/res/values-ms/strings.xml b/java/com/android/incallui/commontheme/res/values-ms/strings.xml index f6c358d79..fb38fa9d1 100644 --- a/java/com/android/incallui/commontheme/res/values-ms/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-ms/strings.xml @@ -1,4 +1,20 @@ + + "Tamatkan panggilan" @@ -15,4 +31,6 @@ "Video dihidupkan" "Video dimatikan" "Silih video" + "Pmbsr suara" + "Bunyi" diff --git a/java/com/android/incallui/commontheme/res/values-my/strings.xml b/java/com/android/incallui/commontheme/res/values-my/strings.xml index 6b6614c36..5b396be59 100644 --- a/java/com/android/incallui/commontheme/res/values-my/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-my/strings.xml @@ -1,4 +1,20 @@ + + "ခေါ်ဆိုမှုအပြီးသတ်ရန်" @@ -15,4 +31,6 @@ "ဗီဒီယိုဖွင့်ထားသည်" "ဗီဒီယိုပိတ်ထားသည်" "ဗီဒီယိုဖလှယ်ရန်" + "စပီကာ" + "အသံ" diff --git a/java/com/android/incallui/commontheme/res/values-nb/strings.xml b/java/com/android/incallui/commontheme/res/values-nb/strings.xml index 4974411bc..506b15e31 100644 --- a/java/com/android/incallui/commontheme/res/values-nb/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-nb/strings.xml @@ -1,4 +1,20 @@ + + "Avslutt samtalen" @@ -15,4 +31,6 @@ "Video på" "Video av" "Bytt video" + "Høyttaler" + "Lyd" diff --git a/java/com/android/incallui/commontheme/res/values-ne/strings.xml b/java/com/android/incallui/commontheme/res/values-ne/strings.xml index 5cd91b336..fa9d87fb7 100644 --- a/java/com/android/incallui/commontheme/res/values-ne/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-ne/strings.xml @@ -1,4 +1,20 @@ + + "कल अन्त्य गर्नुहोस्" @@ -15,4 +31,6 @@ "सक्रिय भिडियो" "निष्क्रिय भिडियो" "भिडियो साट्नुहोस्" + "स्पिकर" + "आवाज" diff --git a/java/com/android/incallui/commontheme/res/values-nl/strings.xml b/java/com/android/incallui/commontheme/res/values-nl/strings.xml index d33d60075..192c47b97 100644 --- a/java/com/android/incallui/commontheme/res/values-nl/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-nl/strings.xml @@ -1,4 +1,20 @@ + + "Oproep beëindigen" @@ -15,4 +31,6 @@ "Video aan" "Video uit" "Video wisselen" + "Luidspreker" + "Geluid" diff --git a/java/com/android/incallui/commontheme/res/values-no/strings.xml b/java/com/android/incallui/commontheme/res/values-no/strings.xml index 4974411bc..506b15e31 100644 --- a/java/com/android/incallui/commontheme/res/values-no/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-no/strings.xml @@ -1,4 +1,20 @@ + + "Avslutt samtalen" @@ -15,4 +31,6 @@ "Video på" "Video av" "Bytt video" + "Høyttaler" + "Lyd" diff --git a/java/com/android/incallui/commontheme/res/values-pa/strings.xml b/java/com/android/incallui/commontheme/res/values-pa/strings.xml index 7e59e6114..77ceb252a 100644 --- a/java/com/android/incallui/commontheme/res/values-pa/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-pa/strings.xml @@ -1,4 +1,20 @@ + + "ਕਾਲ ਸਮਾਪਤ ਕਰੋ" @@ -15,4 +31,6 @@ "ਵੀਡੀਓ ਚਾਲੂ" "ਵੀਡੀਓ ਬੰਦ" "ਵੀਡੀਓ ਦੀ ਅਦਲਾ ਬਦਲੀ ਕਰੋ" + "ਸਪੀਕਰ" + "ਧੁਨੀ" diff --git a/java/com/android/incallui/commontheme/res/values-pl/strings.xml b/java/com/android/incallui/commontheme/res/values-pl/strings.xml index 4ab1d244d..d9b037e8d 100644 --- a/java/com/android/incallui/commontheme/res/values-pl/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-pl/strings.xml @@ -1,4 +1,20 @@ + + "Zakończ połączenie" @@ -15,4 +31,6 @@ "Wideo włączone" "Wideo wyłączone" "Przełącz wideo" + "Głośnik" + "Dźwięk" diff --git a/java/com/android/incallui/commontheme/res/values-pt-rBR/strings.xml b/java/com/android/incallui/commontheme/res/values-pt-rBR/strings.xml index 67f367466..2c1834e0f 100644 --- a/java/com/android/incallui/commontheme/res/values-pt-rBR/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-pt-rBR/strings.xml @@ -1,4 +1,20 @@ + + "Encerrar chamada" @@ -15,4 +31,6 @@ "Vídeo ativado" "Vídeo desativado" "Trocar vídeo" + "Alto-falante" + "Som" diff --git a/java/com/android/incallui/commontheme/res/values-pt-rPT/strings.xml b/java/com/android/incallui/commontheme/res/values-pt-rPT/strings.xml index 27c564928..f0c14d027 100644 --- a/java/com/android/incallui/commontheme/res/values-pt-rPT/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-pt-rPT/strings.xml @@ -1,4 +1,20 @@ + + "Terminar chamada" @@ -15,4 +31,6 @@ "Vídeo ativado" "Vídeo desativado" "Alternar vídeo" + "Altifalante" + "Som" diff --git a/java/com/android/incallui/commontheme/res/values-pt/strings.xml b/java/com/android/incallui/commontheme/res/values-pt/strings.xml index 67f367466..2c1834e0f 100644 --- a/java/com/android/incallui/commontheme/res/values-pt/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-pt/strings.xml @@ -1,4 +1,20 @@ + + "Encerrar chamada" @@ -15,4 +31,6 @@ "Vídeo ativado" "Vídeo desativado" "Trocar vídeo" + "Alto-falante" + "Som" diff --git a/java/com/android/incallui/commontheme/res/values-ro/strings.xml b/java/com/android/incallui/commontheme/res/values-ro/strings.xml index b7fec9a58..f7c8f7257 100644 --- a/java/com/android/incallui/commontheme/res/values-ro/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-ro/strings.xml @@ -1,4 +1,20 @@ + + "Încheiați apelul" @@ -15,4 +31,6 @@ "Imaginea video este activată" "Imaginea video este dezactivată" "Schimbați imaginea video" + "Difuzor" + "Sunet" diff --git a/java/com/android/incallui/commontheme/res/values-ru/strings.xml b/java/com/android/incallui/commontheme/res/values-ru/strings.xml index 5d1807f7a..1853ad23f 100644 --- a/java/com/android/incallui/commontheme/res/values-ru/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-ru/strings.xml @@ -1,4 +1,20 @@ + + "Завершить вызов" @@ -15,4 +31,6 @@ "Камера включена" "Камера выключена" "Включить/выключить камеру" + "Динамик" + "Звук" diff --git a/java/com/android/incallui/commontheme/res/values-si/strings.xml b/java/com/android/incallui/commontheme/res/values-si/strings.xml index 0a0f35c47..ae13cc424 100644 --- a/java/com/android/incallui/commontheme/res/values-si/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-si/strings.xml @@ -1,4 +1,20 @@ + + "ඇමතුම අවසන් කරන්න" @@ -15,4 +31,6 @@ "වීඩියෝව ක්‍රියාත්මකයි" "වීඩියෝව ක්‍රියාවිරහිතයි" "වීඩියෝව මාරු කරන්න" + "ස්පීකරය" + "හඬ" diff --git a/java/com/android/incallui/commontheme/res/values-sk/strings.xml b/java/com/android/incallui/commontheme/res/values-sk/strings.xml index 97eabebb4..cd9aa9912 100644 --- a/java/com/android/incallui/commontheme/res/values-sk/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-sk/strings.xml @@ -1,4 +1,20 @@ + + "Ukončiť hovor" @@ -15,4 +31,6 @@ "Video je zapnuté" "Video je vypnuté" "Zameniť video" + "Reproduktor" + "Zvuk" diff --git a/java/com/android/incallui/commontheme/res/values-sl/strings.xml b/java/com/android/incallui/commontheme/res/values-sl/strings.xml index 46cf2e8ee..0aa6e699a 100644 --- a/java/com/android/incallui/commontheme/res/values-sl/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-sl/strings.xml @@ -1,4 +1,20 @@ + + "Končaj klic" @@ -15,4 +31,6 @@ "Vklopi video" "Izklopi video" "Zamenjaj video" + "Zvočnik" + "Zvok" diff --git a/java/com/android/incallui/commontheme/res/values-sq/strings.xml b/java/com/android/incallui/commontheme/res/values-sq/strings.xml index 17ec08167..b9c97d1dd 100644 --- a/java/com/android/incallui/commontheme/res/values-sq/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-sq/strings.xml @@ -1,4 +1,20 @@ + + "Mbylle telefonatën" @@ -15,4 +31,6 @@ "Videoja aktive" "Videoja joaktive" "Shkëmbe video" + "Altoparlanti" + "Tingulli" diff --git a/java/com/android/incallui/commontheme/res/values-sr/strings.xml b/java/com/android/incallui/commontheme/res/values-sr/strings.xml index 2928bc992..67586b72e 100644 --- a/java/com/android/incallui/commontheme/res/values-sr/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-sr/strings.xml @@ -1,4 +1,20 @@ + + "Заврши позив" @@ -15,4 +31,6 @@ "Укључи видео" "Искључи видео" "Замени видео" + "Звучник" + "Звук" diff --git a/java/com/android/incallui/commontheme/res/values-sv/strings.xml b/java/com/android/incallui/commontheme/res/values-sv/strings.xml index 17b5d3745..957a2f85a 100644 --- a/java/com/android/incallui/commontheme/res/values-sv/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-sv/strings.xml @@ -1,4 +1,20 @@ + + "Avsluta samtal" @@ -15,4 +31,6 @@ "Video på" "Video av" "Byt video" + "Högtalare" + "Ljud" diff --git a/java/com/android/incallui/commontheme/res/values-sw/strings.xml b/java/com/android/incallui/commontheme/res/values-sw/strings.xml index 165d57622..8752c2d37 100644 --- a/java/com/android/incallui/commontheme/res/values-sw/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-sw/strings.xml @@ -1,4 +1,20 @@ + + "Kata simu" @@ -15,4 +31,6 @@ "Washa video" "Zima video" "Badilisha video" + "Spika" + "Sauti" diff --git a/java/com/android/incallui/commontheme/res/values-ta/strings.xml b/java/com/android/incallui/commontheme/res/values-ta/strings.xml index fa2dfb280..69258d2e6 100644 --- a/java/com/android/incallui/commontheme/res/values-ta/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-ta/strings.xml @@ -1,4 +1,20 @@ + + "அழைப்பைத் துண்டிக்கும்" @@ -15,4 +31,6 @@ "வீடியோ இயக்கப்பட்டது" "வீடியோ முடக்கப்பட்டது" "வீடியோவிற்கு மாற்றும்" + "ஸ்பீக்கர்" + "ஒலி" diff --git a/java/com/android/incallui/commontheme/res/values-te/strings.xml b/java/com/android/incallui/commontheme/res/values-te/strings.xml index 3ce431cd1..9454e15b7 100644 --- a/java/com/android/incallui/commontheme/res/values-te/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-te/strings.xml @@ -1,4 +1,20 @@ + + "కాల్‌ను ముగిస్తుంది" @@ -15,4 +31,6 @@ "వీడియో ఆన్‌లో ఉంది" "వీడియో ఆఫ్‌లో ఉంది" "వీడియోను మారుస్తుంది" + "స్పీకర్" + "ధ్వని" diff --git a/java/com/android/incallui/commontheme/res/values-th/strings.xml b/java/com/android/incallui/commontheme/res/values-th/strings.xml index 1fa145c02..823531000 100644 --- a/java/com/android/incallui/commontheme/res/values-th/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-th/strings.xml @@ -1,4 +1,20 @@ + + "วางสาย" @@ -15,4 +31,6 @@ "เปิดวิดีโอ" "ปิดวิดีโอ" "สลับวิดีโอ" + "ลำโพง" + "เสียง" diff --git a/java/com/android/incallui/commontheme/res/values-tl/strings.xml b/java/com/android/incallui/commontheme/res/values-tl/strings.xml index a53e11c7d..f368e3a68 100644 --- a/java/com/android/incallui/commontheme/res/values-tl/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-tl/strings.xml @@ -1,4 +1,20 @@ + + "Tapusin ang tawag" @@ -15,4 +31,6 @@ "Naka-on ang video" "Naka-off ang video" "Pagpalitin ang video" + "Speaker" + "Tunog" diff --git a/java/com/android/incallui/commontheme/res/values-tr/strings.xml b/java/com/android/incallui/commontheme/res/values-tr/strings.xml index 09552730a..cbf550211 100644 --- a/java/com/android/incallui/commontheme/res/values-tr/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-tr/strings.xml @@ -1,4 +1,20 @@ + + "Çağrıyı sonlandırın" @@ -15,4 +31,6 @@ "Video açık" "Video kapalı" "Videoyu değiştirin" + "Hoparlör" + "Ses" diff --git a/java/com/android/incallui/commontheme/res/values-uk/strings.xml b/java/com/android/incallui/commontheme/res/values-uk/strings.xml index e17e781b3..2bcd04c0e 100644 --- a/java/com/android/incallui/commontheme/res/values-uk/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-uk/strings.xml @@ -1,4 +1,20 @@ + + "Завершити виклик" @@ -15,4 +31,6 @@ "Відео ввімкнено" "Відео вимкнено" "Поміняти відео" + "Динамік" + "Звук" diff --git a/java/com/android/incallui/commontheme/res/values-ur/strings.xml b/java/com/android/incallui/commontheme/res/values-ur/strings.xml index 5082e9d11..bd8cf6807 100644 --- a/java/com/android/incallui/commontheme/res/values-ur/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-ur/strings.xml @@ -1,4 +1,20 @@ + + "کال ختم کریں" @@ -15,4 +31,6 @@ "ویڈیو آن ہے" "ویڈیو آف ہے" "ویڈیو کا تبادلہ کریں" + "اسپیکر" + "آواز" diff --git a/java/com/android/incallui/commontheme/res/values-uz/strings.xml b/java/com/android/incallui/commontheme/res/values-uz/strings.xml index d349d3f9a..9bc995de2 100644 --- a/java/com/android/incallui/commontheme/res/values-uz/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-uz/strings.xml @@ -1,4 +1,20 @@ + + "Qo‘ng‘iroqni tugatish" @@ -15,4 +31,6 @@ "Video yoniq" "Video o‘chiq" "Videoni yoqish/ochirish" + "Karnay" + "Tovush" diff --git a/java/com/android/incallui/commontheme/res/values-vi/strings.xml b/java/com/android/incallui/commontheme/res/values-vi/strings.xml index 3bd39ae4d..caf8f3434 100644 --- a/java/com/android/incallui/commontheme/res/values-vi/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-vi/strings.xml @@ -1,4 +1,20 @@ + + "Kết thúc cuộc gọi" @@ -15,4 +31,6 @@ "Bật video" "Tắt video" "Hoán đổi video" + "Loa" + "Âm báo" diff --git a/java/com/android/incallui/commontheme/res/values-zh-rCN/strings.xml b/java/com/android/incallui/commontheme/res/values-zh-rCN/strings.xml index 0f57120e2..4d8bda6bc 100644 --- a/java/com/android/incallui/commontheme/res/values-zh-rCN/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-zh-rCN/strings.xml @@ -1,4 +1,20 @@ + + "结束通话" @@ -15,4 +31,6 @@ "视频已开启" "视频已关闭" "切换视频" + "免提" + "音频路径" diff --git a/java/com/android/incallui/commontheme/res/values-zh-rHK/strings.xml b/java/com/android/incallui/commontheme/res/values-zh-rHK/strings.xml index a3809ebca..175b3e657 100644 --- a/java/com/android/incallui/commontheme/res/values-zh-rHK/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-zh-rHK/strings.xml @@ -1,4 +1,20 @@ + + "結束通話" @@ -15,4 +31,6 @@ "視像已開啟" "視像已關閉" "切換視像" + "喇叭" + "音效" diff --git a/java/com/android/incallui/commontheme/res/values-zh-rTW/strings.xml b/java/com/android/incallui/commontheme/res/values-zh-rTW/strings.xml index 983dddda7..dee1b9c95 100644 --- a/java/com/android/incallui/commontheme/res/values-zh-rTW/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-zh-rTW/strings.xml @@ -1,4 +1,20 @@ + + "結束通話" @@ -15,4 +31,6 @@ "開啟視訊畫面" "關閉視訊畫面" "切換視訊畫面" + "擴音" + "音訊" diff --git a/java/com/android/incallui/commontheme/res/values-zu/strings.xml b/java/com/android/incallui/commontheme/res/values-zu/strings.xml index 2dd2c897e..953596231 100644 --- a/java/com/android/incallui/commontheme/res/values-zu/strings.xml +++ b/java/com/android/incallui/commontheme/res/values-zu/strings.xml @@ -1,4 +1,20 @@ + + "Qeda ikholi" @@ -15,4 +31,6 @@ "Ividiyo ivuliwe" "Ividiyo ivaliwe" "Shintsha ividiyo" + "Isipikha" + "Umsindo" diff --git a/java/com/android/incallui/commontheme/res/values/strings.xml b/java/com/android/incallui/commontheme/res/values/strings.xml index 6f346a34d..94a8c901b 100644 --- a/java/com/android/incallui/commontheme/res/values/strings.xml +++ b/java/com/android/incallui/commontheme/res/values/strings.xml @@ -1,4 +1,19 @@ + End call @@ -32,4 +47,11 @@ Swap video + + Speaker + + Sound + diff --git a/java/com/android/incallui/contactgrid/BottomRow.java b/java/com/android/incallui/contactgrid/BottomRow.java index 228c786a0..d0ff1926a 100644 --- a/java/com/android/incallui/contactgrid/BottomRow.java +++ b/java/com/android/incallui/contactgrid/BottomRow.java @@ -22,7 +22,6 @@ import android.telephony.PhoneNumberUtils; import android.text.BidiFormatter; import android.text.TextDirectionHeuristics; import android.text.TextUtils; -import com.android.contacts.common.compat.PhoneNumberUtilsCompat; import com.android.incallui.call.DialerCall.State; import com.android.incallui.incall.protocol.PrimaryCallState; import com.android.incallui.incall.protocol.PrimaryInfo; @@ -137,7 +136,7 @@ public class BottomRow { } private static CharSequence spanDisplayNumber(String displayNumber) { - return PhoneNumberUtilsCompat.createTtsSpannable( + return PhoneNumberUtils.createTtsSpannable( BidiFormatter.getInstance().unicodeWrap(displayNumber, TextDirectionHeuristics.LTR)); } diff --git a/java/com/android/incallui/contactgrid/ContactGridManager.java b/java/com/android/incallui/contactgrid/ContactGridManager.java index 1322d58ea..502cc52b8 100644 --- a/java/com/android/incallui/contactgrid/ContactGridManager.java +++ b/java/com/android/incallui/contactgrid/ContactGridManager.java @@ -20,10 +20,8 @@ import android.content.Context; import android.graphics.drawable.Animatable; import android.graphics.drawable.Drawable; import android.os.SystemClock; -import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.view.ViewCompat; -import android.telecom.TelecomManager; import android.text.TextUtils; import android.view.View; import android.view.accessibility.AccessibilityEvent; @@ -78,6 +76,7 @@ public class ContactGridManager { private boolean hideAvatar; private boolean showAnonymousAvatar; private boolean middleRowVisible = true; + private boolean isTimerStarted; private PrimaryInfo primaryInfo = PrimaryInfo.createEmptyPrimaryInfo(); private PrimaryCallState primaryCallState = PrimaryCallState.createEmptyPrimaryCallState(); @@ -105,6 +104,7 @@ public class ContactGridManager { contactGridLayout = (View) contactNameTextView.getParent(); letterTile = new LetterTileDrawable(context.getResources()); + isTimerStarted = false; } public void show() { @@ -213,7 +213,7 @@ public class ContactGridManager { *
    */ private void updateTopRow() { - TopRow.Info info = TopRow.getInfo(context, primaryCallState); + TopRow.Info info = TopRow.getInfo(context, primaryCallState, primaryInfo); if (TextUtils.isEmpty(info.label)) { // Use INVISIBLE here to prevent the rows below this one from moving up and down. statusTextView.setVisibility(View.INVISIBLE); @@ -232,26 +232,6 @@ public class ContactGridManager { } } - /** - * Returns the appropriate LetterTileDrawable.TYPE_ based on a given call state. - * - *

    If no special state is detected, yields TYPE_DEFAULT. - */ - private static @LetterTileDrawable.ContactType int getContactTypeForPrimaryCallState( - @NonNull PrimaryCallState callState, @NonNull PrimaryInfo primaryInfo) { - if (callState.isVoiceMailNumber) { - return LetterTileDrawable.TYPE_VOICEMAIL; - } else if (callState.isBusinessNumber) { - return LetterTileDrawable.TYPE_BUSINESS; - } else if (primaryInfo.numberPresentation == TelecomManager.PRESENTATION_RESTRICTED) { - return LetterTileDrawable.TYPE_GENERIC_AVATAR; - } else if (callState.isConference) { - return LetterTileDrawable.TYPE_CONFERENCE; - } else { - return LetterTileDrawable.TYPE_DEFAULT; - } - } - /** * Updates row 1. For example: * @@ -295,8 +275,12 @@ public class ContactGridManager { primaryInfo.name, primaryInfo.contactInfoLookupKey, LetterTileDrawable.SHAPE_CIRCLE, - getContactTypeForPrimaryCallState(primaryCallState, primaryInfo)); - + LetterTileDrawable.getContactTypeFromPrimitives( + primaryCallState.isVoiceMailNumber, + primaryInfo.isSpam, + primaryCallState.isBusinessNumber, + primaryInfo.numberPresentation, + primaryCallState.isConference)); // By invalidating the avatarImageView we force a redraw of the letter tile. // This is required to properly display the updated letter tile iconography based on the // contact type, because the background drawable reference cached in the view, and the @@ -363,15 +347,19 @@ public class ContactGridManager { } if (info.isTimerVisible) { - bottomTextSwitcher.setDisplayedChild(1); - bottomTimerView.setBase( - primaryCallState.connectTimeMillis - - System.currentTimeMillis() - + SystemClock.elapsedRealtime()); - bottomTimerView.start(); + if (!isTimerStarted) { + bottomTextSwitcher.setDisplayedChild(1); + bottomTimerView.setBase( + primaryCallState.connectTimeMillis + - System.currentTimeMillis() + + SystemClock.elapsedRealtime()); + bottomTimerView.start(); + isTimerStarted = true; + } } else { bottomTextSwitcher.setDisplayedChild(0); bottomTimerView.stop(); + isTimerStarted = false; } } } diff --git a/java/com/android/incallui/contactgrid/TopRow.java b/java/com/android/incallui/contactgrid/TopRow.java index 8c3d6b004..ab003570f 100644 --- a/java/com/android/incallui/contactgrid/TopRow.java +++ b/java/com/android/incallui/contactgrid/TopRow.java @@ -19,10 +19,14 @@ package com.android.incallui.contactgrid; import android.content.Context; import android.graphics.drawable.Drawable; import android.support.annotation.Nullable; +import android.telephony.PhoneNumberUtils; +import android.text.BidiFormatter; +import android.text.TextDirectionHeuristics; import android.text.TextUtils; import com.android.dialer.common.Assert; import com.android.incallui.call.DialerCall.State; import com.android.incallui.incall.protocol.PrimaryCallState; +import com.android.incallui.incall.protocol.PrimaryInfo; import com.android.incallui.videotech.utils.SessionModificationState; import com.android.incallui.videotech.utils.VideoUtils; @@ -55,7 +59,7 @@ public class TopRow { private TopRow() {} - public static Info getInfo(Context context, PrimaryCallState state) { + public static Info getInfo(Context context, PrimaryCallState state, PrimaryInfo primaryInfo) { CharSequence label = null; Drawable icon = state.connectionIcon; boolean labelIsSingleLine = true; @@ -73,6 +77,11 @@ public class TopRow { labelIsSingleLine = false; } else { label = getLabelForIncoming(context, state); + // Show phone number if it's not displayed in name (center row) or location field (bottom + // row). + if (shouldShowNumber(primaryInfo)) { + label = TextUtils.concat(label, " ", spanDisplayNumber(primaryInfo.number)); + } } } else if (VideoUtils.hasSentVideoUpgradeRequest(state.sessionModificationState) || VideoUtils.hasReceivedVideoUpgradeRequest(state.sessionModificationState)) { @@ -85,6 +94,8 @@ public class TopRow { label = getLabelForDialing(context, state); } else if (state.state == State.ACTIVE && state.isRemotelyHeld) { label = context.getString(R.string.incall_remotely_held); + } else if (state.state == State.ACTIVE && shouldShowNumber(primaryInfo)) { + label = spanDisplayNumber(primaryInfo.number); } else { // Video calling... // [Wi-Fi icon] Starbucks Wi-Fi @@ -94,9 +105,27 @@ public class TopRow { return new Info(label, icon, labelIsSingleLine); } + private static CharSequence spanDisplayNumber(String displayNumber) { + return PhoneNumberUtils.createTtsSpannable( + BidiFormatter.getInstance().unicodeWrap(displayNumber, TextDirectionHeuristics.LTR)); + } + + private static boolean shouldShowNumber(PrimaryInfo primaryInfo) { + if (primaryInfo.nameIsNumber) { + return false; + } + if (primaryInfo.location == null) { + return false; + } + if (TextUtils.isEmpty(primaryInfo.number)) { + return false; + } + return true; + } + private static CharSequence getLabelForIncoming(Context context, PrimaryCallState state) { if (state.isVideoCall) { - return getLabelForIncomingVideo(context, state.isWifi); + return getLabelForIncomingVideo(context, state.sessionModificationState, state.isWifi); } else if (state.isWifi && !TextUtils.isEmpty(state.connectionLabel)) { return state.connectionLabel; } else if (isAccount(state)) { @@ -108,11 +137,20 @@ public class TopRow { } } - private static CharSequence getLabelForIncomingVideo(Context context, boolean isWifi) { - if (isWifi) { - return context.getString(R.string.contact_grid_incoming_wifi_video_call); + private static CharSequence getLabelForIncomingVideo( + Context context, @SessionModificationState int sessionModificationState, boolean isWifi) { + if (sessionModificationState == SessionModificationState.RECEIVED_UPGRADE_TO_VIDEO_REQUEST) { + if (isWifi) { + return context.getString(R.string.contact_grid_incoming_wifi_video_request); + } else { + return context.getString(R.string.contact_grid_incoming_video_request); + } } else { - return context.getString(R.string.contact_grid_incoming_video_call); + if (isWifi) { + return context.getString(R.string.contact_grid_incoming_wifi_video_call); + } else { + return context.getString(R.string.contact_grid_incoming_video_call); + } } } @@ -154,7 +192,7 @@ public class TopRow { case SessionModificationState.UPGRADE_TO_VIDEO_REQUEST_TIMED_OUT: return context.getString(R.string.incall_video_call_request_timed_out); case SessionModificationState.RECEIVED_UPGRADE_TO_VIDEO_REQUEST: - return getLabelForIncomingVideo(context, state.isWifi); + return getLabelForIncomingVideo(context, state.sessionModificationState, state.isWifi); case SessionModificationState.NO_REQUEST: default: Assert.fail(); diff --git a/java/com/android/incallui/contactgrid/res/values-af/strings.xml b/java/com/android/incallui/contactgrid/res/values-af/strings.xml index 95ec39bc3..75a8bf37f 100644 --- a/java/com/android/incallui/contactgrid/res/values-af/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-af/strings.xml @@ -1,4 +1,20 @@ + + "Bel via %s" @@ -14,6 +30,8 @@ "Hou aan" "Video-oproep vanaf" "Wi-Fi-video-oproep vanaf" + "Versoekvorm vir video-opgradering" + "Versoekvorm vir Wi-Fi-video-opgradering" "Oproep vanaf" "Werkoproep vanaf" "Inkomend via %s" diff --git a/java/com/android/incallui/contactgrid/res/values-am/strings.xml b/java/com/android/incallui/contactgrid/res/values-am/strings.xml index d8060c9c5..3d11f73c2 100644 --- a/java/com/android/incallui/contactgrid/res/values-am/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-am/strings.xml @@ -1,4 +1,20 @@ + + "በ%s በኩል በመደወል ላይ" @@ -14,6 +30,8 @@ "ያዝና ቆይ" "ቪዲዮ ጥሪ ከ" "Wi-Fi ቪዲዮ ጥሪ ከ" + "የቪዲዮ ማሻሻል ጥያቄ ከ" + "የWi-Fi ቪዲዮ ማሻሻል ጥያቄ ከ" "ጥሪ ከ" "የሥራ ጥሪ ከ" "በ%s በኩል የገባ" diff --git a/java/com/android/incallui/contactgrid/res/values-ar/strings.xml b/java/com/android/incallui/contactgrid/res/values-ar/strings.xml index 30fd32cfa..cddd1eca9 100644 --- a/java/com/android/incallui/contactgrid/res/values-ar/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-ar/strings.xml @@ -1,4 +1,20 @@ + + "الاتصال عبر %s" @@ -14,6 +30,8 @@ "معلقة" "مكالمة فيديو من" "‏مكالمة فيديو عبر Wi-Fi من" + "طلب ترقية الفيديو من" + "‏طلب ترقية فيديو Wi-Fi من" "اتصال من" "مكالمة عمل من" "واردة عبر %s" diff --git a/java/com/android/incallui/contactgrid/res/values-az/strings.xml b/java/com/android/incallui/contactgrid/res/values-az/strings.xml index 4fe79eeaa..8c1993dc0 100644 --- a/java/com/android/incallui/contactgrid/res/values-az/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-az/strings.xml @@ -1,4 +1,20 @@ + + "%s vasitəsilə zəng edilir" @@ -14,6 +30,8 @@ "Gözləmədə" "Video zəng edən" "Wi-Fi video zəng edən" + "Video təkmilləşdirilməsi üçün təklif" + "Wi-Fi video təkmilləşdirilməsi üçün təklif" "Zəng edən" "İş zəngi edən" "%s vasitəsilə gələn" 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 index f1a938ea9..caa61bdac 100644 --- 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 @@ -1,4 +1,20 @@ + + "Pozivamo preko %s" @@ -14,6 +30,8 @@ "Na čekanju" "Video poziv od" "Wi-Fi video poziv od" + "Zahtev za prelazak na video poziv od" + "Zahtev za prelazak na video poziv preko Wi-Fi-ja od" "Poziv od" "Poslovni poziv od" "Dolazni poziv preko %s" diff --git a/java/com/android/incallui/contactgrid/res/values-be/strings.xml b/java/com/android/incallui/contactgrid/res/values-be/strings.xml index aec3a3106..51f7ea97a 100644 --- a/java/com/android/incallui/contactgrid/res/values-be/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-be/strings.xml @@ -1,4 +1,20 @@ + + "Званкі праз %s" @@ -14,6 +30,8 @@ "На ўтрыманні" "Відэавыклік ад" "Відэавыклік праз Wi-Fi ад" + "Запыт на абнаўленне да відэавыкліка ад" + "Запыт на абнаўленне да відэавыкліка па Wi-Fi ад" "Выклік ад" "Рабочы выклік ад" "Уваходны выклік праз %s" diff --git a/java/com/android/incallui/contactgrid/res/values-bg/strings.xml b/java/com/android/incallui/contactgrid/res/values-bg/strings.xml index f162e4cd0..4e313d408 100644 --- a/java/com/android/incallui/contactgrid/res/values-bg/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-bg/strings.xml @@ -1,4 +1,20 @@ + + "Обаждане чрез %s" @@ -14,6 +30,8 @@ "Задържано" "Видеообаждане от" "Видеообаждане по Wi-Fi от" + "Заявка за преминаване към видеообаждане от" + "Заявка за преминаване към видеообаждане през Wi-Fi от" "Обаждане от" "Служебно обаждане от" "Входящо обаждане чрез %s" diff --git a/java/com/android/incallui/contactgrid/res/values-bn/strings.xml b/java/com/android/incallui/contactgrid/res/values-bn/strings.xml index 6d3a50c61..8fce2e460 100644 --- a/java/com/android/incallui/contactgrid/res/values-bn/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-bn/strings.xml @@ -1,4 +1,20 @@ + + "%s এর মাধ্যমে কল করা হচ্ছে" @@ -14,6 +30,8 @@ "হোল্ডে রয়েছে" "এর থেকে আগত ভিডিও কল" "এর থেকে আগত Wi-Fi ভিডিও কল" + "এর থেকে ভিডিও আপগ্রেড করার অনুরোধ" + "এর থেকে ওয়াই-ফাই ভিডিও আপগ্রেড করার অনুরোধ" "এর থেকে আগত কল" "এর থেকে আগত কর্মক্ষেত্রের কল" "%s এর মাধ্যমে আগত কল" diff --git a/java/com/android/incallui/contactgrid/res/values-bs/strings.xml b/java/com/android/incallui/contactgrid/res/values-bs/strings.xml index 258799215..0d4dfb3d8 100644 --- a/java/com/android/incallui/contactgrid/res/values-bs/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-bs/strings.xml @@ -1,4 +1,20 @@ + + "Pozivanje putem mreže %s" @@ -14,6 +30,8 @@ "Na čekanju" "Videopoziv od" "Wi-Fi videopoziv od" + "Zahtjev za nadogradnju na videozapis od pozivaoca" + "Zahtjev za nadogradnju na Wi-Fi videozapis od pozivaoca" "Poziv od" "Poslovni poziv od" "Dolazni poziv putem %s" diff --git a/java/com/android/incallui/contactgrid/res/values-ca/strings.xml b/java/com/android/incallui/contactgrid/res/values-ca/strings.xml index 07598a217..b4aa2ddc0 100644 --- a/java/com/android/incallui/contactgrid/res/values-ca/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-ca/strings.xml @@ -1,4 +1,20 @@ + + "S\'està trucant amb %s" @@ -14,6 +30,8 @@ "En espera" "Videotrucada de" "Videotrucada per Wi-Fi de" + "Sol·licitud d\'actualització a videotrucada procedent de:" + "Sol·licitud d\'actualització a videotrucada per Wi-Fi procedent de:" "Trucada de" "Trucada de feina de" "Entrant via %s" diff --git a/java/com/android/incallui/contactgrid/res/values-cs/strings.xml b/java/com/android/incallui/contactgrid/res/values-cs/strings.xml index d27a0283b..b8698f071 100644 --- a/java/com/android/incallui/contactgrid/res/values-cs/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-cs/strings.xml @@ -1,4 +1,20 @@ + + "Volání přes poskytovatele %s" @@ -14,6 +30,8 @@ "Podrženo" "Příchozí videohovor:" "Příchozí videohovor přes Wi-Fi:" + "Žádost o upgrade na videohovor od uživatele" + "Žádost o upgrade na videohovor přes Wi-Fi od uživatele" "Příchozí hovor:" "Příchozí pracovní hovor:" "Příchozí hovor přes poskytovatele %s" diff --git a/java/com/android/incallui/contactgrid/res/values-da/strings.xml b/java/com/android/incallui/contactgrid/res/values-da/strings.xml index 555a2ac5f..71a651f18 100644 --- a/java/com/android/incallui/contactgrid/res/values-da/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-da/strings.xml @@ -1,4 +1,20 @@ + + "Ringer via %s" @@ -14,6 +30,8 @@ "I venteposition" "Videoopkald fra" "Wi-Fi-videoopkald fra" + "Anmodning om opgradering til et videoopkald fra" + "Anmodning om opgradering til et Wi-Fi-videoopkald fra" "Opkald fra" "Arbejdsopkald fra" "Indgående opkald via %s" diff --git a/java/com/android/incallui/contactgrid/res/values-de/strings.xml b/java/com/android/incallui/contactgrid/res/values-de/strings.xml index 3d3838ca2..d69e0f6bb 100644 --- a/java/com/android/incallui/contactgrid/res/values-de/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-de/strings.xml @@ -1,4 +1,20 @@ + + "Anruf über %s" @@ -14,6 +30,8 @@ "Anruf wird gehalten" "Videoanruf von" "WLAN-Videoanruf von" + "Anfrage für Upgrade auf Videoanruf von" + "Anfrage für Upgrade auf Videoanruf über WLAN von" "Anruf von" "Geschäftlicher Anruf von" "Eingehender Anruf über %s" diff --git a/java/com/android/incallui/contactgrid/res/values-el/strings.xml b/java/com/android/incallui/contactgrid/res/values-el/strings.xml index 337da7b03..954e7b75d 100644 --- a/java/com/android/incallui/contactgrid/res/values-el/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-el/strings.xml @@ -1,4 +1,20 @@ + + "Κλήση μέσω %s" @@ -14,6 +30,8 @@ "Σε αναμονή" "Βιντεοκλήση από" "Βιντεοκλήση μέσω Wi-Fi από" + "Αίτημα αναβάθμισης βίντεο από" + "Αίτημα αναβάθμισης βίντεο Wi-Fi από" "Κλήση από" "Κλήση από το γραφείο από" "Εισερχόμενη κλήση μέσω %s" diff --git a/java/com/android/incallui/contactgrid/res/values-en-rAU/strings.xml b/java/com/android/incallui/contactgrid/res/values-en-rAU/strings.xml index 3748db2f4..a1402ff5c 100644 --- a/java/com/android/incallui/contactgrid/res/values-en-rAU/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-en-rAU/strings.xml @@ -1,4 +1,20 @@ + + "Calling via %s" @@ -14,6 +30,8 @@ "On hold" "Video call from" "Wi-Fi video call from" + "Video upgrade request from" + "Wi-Fi video upgrade request from" "Call from" "Work call from" "Incoming via %s" diff --git a/java/com/android/incallui/contactgrid/res/values-en-rGB/strings.xml b/java/com/android/incallui/contactgrid/res/values-en-rGB/strings.xml index 3748db2f4..a1402ff5c 100644 --- a/java/com/android/incallui/contactgrid/res/values-en-rGB/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-en-rGB/strings.xml @@ -1,4 +1,20 @@ + + "Calling via %s" @@ -14,6 +30,8 @@ "On hold" "Video call from" "Wi-Fi video call from" + "Video upgrade request from" + "Wi-Fi video upgrade request from" "Call from" "Work call from" "Incoming via %s" diff --git a/java/com/android/incallui/contactgrid/res/values-en-rIN/strings.xml b/java/com/android/incallui/contactgrid/res/values-en-rIN/strings.xml index 3748db2f4..a1402ff5c 100644 --- a/java/com/android/incallui/contactgrid/res/values-en-rIN/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-en-rIN/strings.xml @@ -1,4 +1,20 @@ + + "Calling via %s" @@ -14,6 +30,8 @@ "On hold" "Video call from" "Wi-Fi video call from" + "Video upgrade request from" + "Wi-Fi video upgrade request from" "Call from" "Work call from" "Incoming via %s" diff --git a/java/com/android/incallui/contactgrid/res/values-es-rUS/strings.xml b/java/com/android/incallui/contactgrid/res/values-es-rUS/strings.xml index fa5684927..abb2b01d9 100644 --- a/java/com/android/incallui/contactgrid/res/values-es-rUS/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-es-rUS/strings.xml @@ -1,4 +1,20 @@ + + "Llamada por medio de %s" @@ -14,6 +30,8 @@ "En espera" "Videollamada de" "Videollamada con Wi-Fi de" + "Actualización a video solicitada por" + "Actualización a video con Wi-Fi solicitada por" "Llamada de" "Llamada laboral de" "Entrante por medio de %s" diff --git a/java/com/android/incallui/contactgrid/res/values-es/strings.xml b/java/com/android/incallui/contactgrid/res/values-es/strings.xml index 1d57f9c6f..ef7c45774 100644 --- a/java/com/android/incallui/contactgrid/res/values-es/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-es/strings.xml @@ -1,4 +1,20 @@ + + "Llamada a través de %s" @@ -14,6 +30,8 @@ "En espera" "Videollamada de" "Videollamada por Wi-Fi de" + "Solicitud de actualización de videollamada de" + "Solicitud de actualización de videollamada por Wi-Fi de" "Llamada de" "Llamada de trabajo de" "Recibida a través de %s" diff --git a/java/com/android/incallui/contactgrid/res/values-et/strings.xml b/java/com/android/incallui/contactgrid/res/values-et/strings.xml index 2d81062f4..b91f073d0 100644 --- a/java/com/android/incallui/contactgrid/res/values-et/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-et/strings.xml @@ -1,4 +1,20 @@ + + "Kõne edastab %s" @@ -14,6 +30,8 @@ "Ootel" "Videokõne kontaktilt" "WiFi-videokõne kontaktilt" + "Video täiendamise taotlus:" + "WiFi kaudu video täiendamise taotlus:" "Kõne kontaktilt" "Töökõne kontaktilt" "Sissetulev kõne teenusepakkuja %s kaudu" diff --git a/java/com/android/incallui/contactgrid/res/values-eu/strings.xml b/java/com/android/incallui/contactgrid/res/values-eu/strings.xml index f08347bf0..ba7995ad9 100644 --- a/java/com/android/incallui/contactgrid/res/values-eu/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-eu/strings.xml @@ -1,4 +1,20 @@ + + "%s bidez deitzen" @@ -14,6 +30,8 @@ "Zain" "Bideo-deia:" "Wi-Fi bidezko bideo-deia:" + "Bideo-dei bat egiteko eskaera bidali dizu erabiltzaile honek:" + "Wi-Fi bidezko bideo-dei bat egiteko eskaera bidali dizu erabiltzaile honek:" "Deia:" "Laneko deia:" "%s bidez jasotzen" diff --git a/java/com/android/incallui/contactgrid/res/values-fa/strings.xml b/java/com/android/incallui/contactgrid/res/values-fa/strings.xml index 0dfc0f41f..40873ca15 100644 --- a/java/com/android/incallui/contactgrid/res/values-fa/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-fa/strings.xml @@ -1,4 +1,20 @@ + + "تماس از طریق %s" @@ -14,6 +30,8 @@ "درانتظار" "تماس ویدئویی از" "‏تماس ویدئویی Wi-Fi از" + "درخواست ارتقای تماس ویدیویی از" + "‏در خواست ارتقای تماس ویدیویی Wi-Fi از" "تماس از" "تماس کاری از" "تماس‌های ورودی ازطریق %s" diff --git a/java/com/android/incallui/contactgrid/res/values-fi/strings.xml b/java/com/android/incallui/contactgrid/res/values-fi/strings.xml index 00503bf2f..241fef5a1 100644 --- a/java/com/android/incallui/contactgrid/res/values-fi/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-fi/strings.xml @@ -1,4 +1,20 @@ + + "Käytetään operaattoria %s" @@ -14,6 +30,8 @@ "Pidossa" "Videopuhelu henkilöltä" "Wi-Fi-videopuhelu henkilöltä" + "Videoon siirtymispyyntö, jonka lähettäjä on" + "Wi-Fi-videopuheluun siirtymispyyntö, jonka lähettäjän on" "Puhelu henkilöltä" "Työpuhelu henkilöltä" "Saapuva puhelu (%s)" diff --git a/java/com/android/incallui/contactgrid/res/values-fr-rCA/strings.xml b/java/com/android/incallui/contactgrid/res/values-fr-rCA/strings.xml index ee0196d98..3ffc1e918 100644 --- a/java/com/android/incallui/contactgrid/res/values-fr-rCA/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-fr-rCA/strings.xml @@ -1,4 +1,20 @@ + + "Appel par %s en cours…" @@ -14,6 +30,8 @@ "En attente" "Appel vidéo de" "Appel vidéo Wi-Fi de" + "Demande de mise à niveau vidéo de" + "Demande de mise à niveau vidéo Wi-Fi de" "Appel de" "Appel professionnel de" "Appel entrant par %s" diff --git a/java/com/android/incallui/contactgrid/res/values-fr/strings.xml b/java/com/android/incallui/contactgrid/res/values-fr/strings.xml index 9849ad623..0db6ae089 100644 --- a/java/com/android/incallui/contactgrid/res/values-fr/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-fr/strings.xml @@ -1,4 +1,20 @@ + + "Appel via %s" @@ -14,6 +30,8 @@ "En attente" "Appel vidéo de" "Appel vidéo Wi-Fi de" + "Demande de passage en mode vidéo par" + "Demande de passage en mode vidéo Wi-Fi par" "Appel de" "Appel professionnel de" "Appel entrant via %s" diff --git a/java/com/android/incallui/contactgrid/res/values-gl/strings.xml b/java/com/android/incallui/contactgrid/res/values-gl/strings.xml index c85f336b8..297001454 100644 --- a/java/com/android/incallui/contactgrid/res/values-gl/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-gl/strings.xml @@ -1,4 +1,20 @@ + + "Chamando a través de %s" @@ -14,6 +30,8 @@ "En espera" "Videochamada de" "Videochamada por wifi de" + "Solicitude de actualización a videochamada de" + "Solicitude de actualización a videochamada por wifi de" "Chamada de" "Chamada de traballo de" "Chamada entrante a través de %s" diff --git a/java/com/android/incallui/contactgrid/res/values-gu/strings.xml b/java/com/android/incallui/contactgrid/res/values-gu/strings.xml index 5179cc0cb..220bebe39 100644 --- a/java/com/android/incallui/contactgrid/res/values-gu/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-gu/strings.xml @@ -1,4 +1,20 @@ + + "%s મારફતે કૉલ કરી રહ્યાં છે" @@ -14,6 +30,8 @@ "હોલ્ડ પર" "આમના તરફથી વિડિઓ કૉલ" "આમના તરફથી Wi-Fi વિડિઓ કૉલ" + "આમના તરફથી વિડિઓ અપગ્રેડની વિનંતી" + "આમના તરફથી Wi-Fi વિડિઓ અપગ્રેડની વિનંતી" "આમના તરફથી કૉલ" "આમના તરફથી કાર્ય કૉલ" "%s મારફતે ઇનકમિંગ" diff --git a/java/com/android/incallui/contactgrid/res/values-hi/strings.xml b/java/com/android/incallui/contactgrid/res/values-hi/strings.xml index dec7b629d..da128b644 100644 --- a/java/com/android/incallui/contactgrid/res/values-hi/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-hi/strings.xml @@ -1,4 +1,20 @@ + + "%s के माध्यम से कॉल किया जा रहा है" @@ -14,6 +30,8 @@ "होल्ड पर" "इससे वीडियो कॉल" "इससे वाई-फ़ाई वीडियो कॉल" + "इसकी ओर से वीडियो में अपग्रेड करने का अनुरोध" + "इसकी ओर से वाई-फ़ाई वीडियो में अपग्रेड करने का अनुरोध" "इससे कॉल" "इससे कार्य संबंधी कॉल" "%s की ओर से इनकमिंग" diff --git a/java/com/android/incallui/contactgrid/res/values-hr/strings.xml b/java/com/android/incallui/contactgrid/res/values-hr/strings.xml index d7023ac24..24429a248 100644 --- a/java/com/android/incallui/contactgrid/res/values-hr/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-hr/strings.xml @@ -1,4 +1,20 @@ + + "Pozivanje putem operatera %s" @@ -14,6 +30,8 @@ "Na čekanju" "Videopoziv s broja" "Videopoziv putem Wi-Fi veze s broja" + "Video upgrade request from" + "Wi-Fi video upgrade request from" "Poziv s broja" "Poslovni poziv s broja" "Dolazni pozivi putem davatelja %s" diff --git a/java/com/android/incallui/contactgrid/res/values-hu/strings.xml b/java/com/android/incallui/contactgrid/res/values-hu/strings.xml index f7da92322..600b69f6d 100644 --- a/java/com/android/incallui/contactgrid/res/values-hu/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-hu/strings.xml @@ -1,4 +1,20 @@ + + "Hívás a(z) %s szolgáltatón keresztül" @@ -14,6 +30,8 @@ "Várakoztatva" "Videohívás a következőtől:" "Wi-Fi-videohívás a következőtől:" + "Videófrissítési kérelem a következőtől" + "Wi-Fi-videófrissítési kérelem a következőtől" "Hívás a következőtől:" "Munkahelyi hívás a következőről:" "Bejövő hívás a következőn keresztül: %s" diff --git a/java/com/android/incallui/contactgrid/res/values-hy/strings.xml b/java/com/android/incallui/contactgrid/res/values-hy/strings.xml index 6384fa924..88a49eb48 100644 --- a/java/com/android/incallui/contactgrid/res/values-hy/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-hy/strings.xml @@ -1,4 +1,20 @@ + + "Զանգում է %s-ի միջոցով" @@ -14,6 +30,8 @@ "Սպասում" "Տեսազանգ հետևյալ բաժանորդից՝" "Wi-Fi տեսազանգ հետևյալ բաժանորդից՝" + "Տեսազանգին անցնելու խնդրանք հետևյալ օգտատիրոջից՝" + "Wi-Fi-ի միջոցով տեսազանգին անցնելու խնդրանք հետևյալ օգտատիրոջից՝" "Զանգ հետևյալ բաժանորդից՝" "Գործնական զանգ հետևյալ բաժանորդից՝" "Մուտքային զանգ %s ցանցից" diff --git a/java/com/android/incallui/contactgrid/res/values-in/strings.xml b/java/com/android/incallui/contactgrid/res/values-in/strings.xml index 75568387b..f6735832a 100644 --- a/java/com/android/incallui/contactgrid/res/values-in/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-in/strings.xml @@ -1,4 +1,20 @@ + + "Menelepon melalui %s" @@ -14,6 +30,8 @@ "Ditangguhkan" "Video call dari" "Video call Wi-Fi dari" + "Permintaan upgrade video dari" + "Permintaan upgrade video Wi-Fi dari" "Telepon dari" "Panggilan telepon kerja dari" "Masuk melalui %s" diff --git a/java/com/android/incallui/contactgrid/res/values-is/strings.xml b/java/com/android/incallui/contactgrid/res/values-is/strings.xml index 86d577c64..9e830312d 100644 --- a/java/com/android/incallui/contactgrid/res/values-is/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-is/strings.xml @@ -1,4 +1,20 @@ + + "Hringt í gegnum %s" @@ -14,6 +30,8 @@ "Í bið" "Myndsímtal berst frá" "Wi-Fi myndsímtal berst frá" + "Beiðni um að uppfæra í myndsímtal frá" + "Beiðni um að uppfæra í Wi-Fi myndsímtal frá" "Símtal berst frá" "Vinnusímtal berst frá" "Berst í gegnum %s" diff --git a/java/com/android/incallui/contactgrid/res/values-it/strings.xml b/java/com/android/incallui/contactgrid/res/values-it/strings.xml index 9576a6d95..76958cf72 100644 --- a/java/com/android/incallui/contactgrid/res/values-it/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-it/strings.xml @@ -1,4 +1,20 @@ + + "Chiamate tramite %s" @@ -14,6 +30,8 @@ "In attesa" "Videochiamata da" "Videochiamata Wi-Fi da" + "Upgrade della videochiamata richiesto da" + "Upgrade della videochiamata Wi-Fi richiesto da" "Chiamata da" "Chiamata di lavoro da" "In arrivo tramite %s" diff --git a/java/com/android/incallui/contactgrid/res/values-iw/strings.xml b/java/com/android/incallui/contactgrid/res/values-iw/strings.xml index 62771d18f..b06c3212c 100644 --- a/java/com/android/incallui/contactgrid/res/values-iw/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-iw/strings.xml @@ -1,4 +1,20 @@ + + "שיחה באמצעות %s" @@ -14,6 +30,8 @@ "בהמתנה" "שיחת וידאו מאת" "‏שיחת וידאו ב-Wi-Fi מאת" + "בקשה לשדרוג לשיחת וידאו מאת" + "‏בקשת לשדרוג לשיחת וידאו ברשת Wi-Fi מאת" "שיחה מאת" "שיחת עבודה מאת" "שיחה נכנסת באמצעות %s" diff --git a/java/com/android/incallui/contactgrid/res/values-ja/strings.xml b/java/com/android/incallui/contactgrid/res/values-ja/strings.xml index a5d958c60..a2fce09cf 100644 --- a/java/com/android/incallui/contactgrid/res/values-ja/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-ja/strings.xml @@ -1,4 +1,20 @@ + + "%s で発信中" @@ -14,6 +30,8 @@ "保留中" "ビデオハングアウトの着信" "Wi-Fi ビデオハングアウトの着信" + "ビデオハングアウトへの変更リクエスト" + "Wi-Fi ビデオハングアウトへの変更リクエスト" "着信" "仕事の通話の着信" "%s から着信" diff --git a/java/com/android/incallui/contactgrid/res/values-ka/strings.xml b/java/com/android/incallui/contactgrid/res/values-ka/strings.xml index 7848f595e..cb0094d37 100644 --- a/java/com/android/incallui/contactgrid/res/values-ka/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-ka/strings.xml @@ -1,4 +1,20 @@ + + "მიმდინარეობს დარეკვა %s-ის მეშვეობით" @@ -14,6 +30,8 @@ "მოცდის რეჟიმში" "ვიდეოზარი აბონენტისგან" "Wi-Fi ვიდეოზარი აბონენტისგან" + "ვიდეოზარზე გადასვლის მოთხოვნა კონტაქტისგან:" + "Wi-Fi ვიდეოზარზე გადასვლის მოთხოვნა კონტაქტისგან:" "ზარი აბონენტისგან" "სამსახურებრივი ზარი აბონენტისგან" "შემომავალი, %s-იდან" diff --git a/java/com/android/incallui/contactgrid/res/values-kk/strings.xml b/java/com/android/incallui/contactgrid/res/values-kk/strings.xml index aaf260b9a..3fc68c2db 100644 --- a/java/com/android/incallui/contactgrid/res/values-kk/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-kk/strings.xml @@ -1,4 +1,20 @@ + + "%s арқылы қоңырау шалу" @@ -14,6 +30,8 @@ "Күтуде" "Бейне қоңырау шалушы:" "Wi-Fi бейне қоңырау шалушы:" + "Бейне қоңырауға ауысу өтініші:" + "Wi-Fi арқылы бейне қоңырауға ауысу өтініші:" "Қоңырау шалушы:" "Жұмыстан қоңырау шалушы:" "%s арқылы кіріс" diff --git a/java/com/android/incallui/contactgrid/res/values-km/strings.xml b/java/com/android/incallui/contactgrid/res/values-km/strings.xml index b2bfc9628..7ee21ba70 100644 --- a/java/com/android/incallui/contactgrid/res/values-km/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-km/strings.xml @@ -1,4 +1,20 @@ + + "កំពុង​ហៅតាម %s" @@ -14,6 +30,8 @@ "កំពុង​រង់ចាំ" "ការ​ហៅ​ជា​វីដេអូ​ពី" "ការ​ហៅ​ជា​វីដេអូ​តាម Wi-Fi ពី" + "ស្នើ​ដំឡើង​កំណែ​វីដេអូ​ពី" + "ស្នើ​ដំឡើង​កំណែ​វីដេអូតាម Wi-Fi ពី" "ការ​ហៅ​ពី" "ការ​ហៅ​ការងារ​ពី" "ការ​ហៅ​ចូល​តាម %s" diff --git a/java/com/android/incallui/contactgrid/res/values-kn/strings.xml b/java/com/android/incallui/contactgrid/res/values-kn/strings.xml index 0ee73bacc..e90bd6b54 100644 --- a/java/com/android/incallui/contactgrid/res/values-kn/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-kn/strings.xml @@ -1,4 +1,20 @@ + + "%s ಮೂಲಕ ಕರೆ ಮಾಡಲಾಗುತ್ತಿದೆ" @@ -14,6 +30,8 @@ "ಹೋಲ್ಡ್‌ ಮಾಡಲಾಗಿದೆ" "ಇವರಿಂದ ವೀಡಿಯೊ ಕರೆ" "ಇವರಿಂದ ವೈ-ಫೈ ವೀಡಿಯೊ ಕರೆ" + "ಇದರಿಂದ ವೀಡಿಯೊ ಅಪ್‌ಗ್ರೇಡ್ ವಿನಂತಿ" + "ಇದರಿಂದ ವೈಫೈ ವೀಡಿಯೊ ಅಪ್‌ಗ್ರೇಡ್ ವಿನಂತಿ" "ಇವರಿಂದ ಕರೆ" "ಇವರಿಂದ ಕೆಲಸದ ಕರೆ" "%s ಮೂಲಕ ಒಳಬರುತ್ತಿರುವ ಕರೆ" diff --git a/java/com/android/incallui/contactgrid/res/values-ko/strings.xml b/java/com/android/incallui/contactgrid/res/values-ko/strings.xml index a5a34e3d7..85dd613bb 100644 --- a/java/com/android/incallui/contactgrid/res/values-ko/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-ko/strings.xml @@ -1,4 +1,20 @@ + + "%s을(를) 통해 거는 전화" @@ -14,6 +30,8 @@ "대기 중" "화상 통화 발신:" "Wi-Fi 화상 통화 발신:" + "화상 통화로의 업그레이드를 요청한 사용자:" + "Wi-Fi 화상 통화로의 업그레이드를 요청한 사용자:" "통화 발신:" "업무 통화 발신:" "%s을(를) 통해 걸려온 전화" diff --git a/java/com/android/incallui/contactgrid/res/values-ky/strings.xml b/java/com/android/incallui/contactgrid/res/values-ky/strings.xml index a020e70d1..6028022e1 100644 --- a/java/com/android/incallui/contactgrid/res/values-ky/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-ky/strings.xml @@ -1,4 +1,20 @@ + + "%s аркылуу чалуу" @@ -14,6 +30,8 @@ "Күтүү режиминде" "Видео чалуу" "Wi-Fi аркылуу видео чалуу:" + "Видеону кийинки версияга көтөрүү сурамы:" + "Wi-Fi аркылуу видеомаектешүү сурамы:" "Чалып жатат:" "Иш боюнча чалып жатат:" "%s аркылуу чалып жатат" diff --git a/java/com/android/incallui/contactgrid/res/values-lo/strings.xml b/java/com/android/incallui/contactgrid/res/values-lo/strings.xml index 96c1dcf11..6ad117818 100644 --- a/java/com/android/incallui/contactgrid/res/values-lo/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-lo/strings.xml @@ -1,4 +1,20 @@ + + "ກຳລັງໂທຜ່ານ %s" @@ -14,6 +30,8 @@ "ຖືສາຍລໍຖ້າ" "ການໂທວິດີໂອຈາກ" "Wi-Fi video call from" + "ຄຳຮ້ອງອັບເກຣດວິດີໂອຈາກ" + "ຄຳຮ້ອງອັບເກຣດວິດີໂອ Wi-Fi ຈາກ" "ການໂທຈາກ" "Work call from" "ສາຍໂທເຂົ້າ​ຈາກ %s" diff --git a/java/com/android/incallui/contactgrid/res/values-lt/strings.xml b/java/com/android/incallui/contactgrid/res/values-lt/strings.xml index e8e42fc9b..3cca55c46 100644 --- a/java/com/android/incallui/contactgrid/res/values-lt/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-lt/strings.xml @@ -1,4 +1,20 @@ + + "Skambinama naudojantis „%s“ paslaugomis" @@ -14,6 +30,8 @@ "Sulaikytas" "Vaizdo skambutis nuo" "„Wi-Fi“ vaizdo skambutis nuo" + "Vaizdo skambučio naujovinimo užklausa nuo" + "„Wi-Fi“ vaizdo skambučio naujovinimo užklausa nuo" "Skambutis nuo" "Darbo skambutis nuo" "Gaunama per „%s“" diff --git a/java/com/android/incallui/contactgrid/res/values-lv/strings.xml b/java/com/android/incallui/contactgrid/res/values-lv/strings.xml index 1b3823f1e..87e5c9049 100644 --- a/java/com/android/incallui/contactgrid/res/values-lv/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-lv/strings.xml @@ -1,4 +1,20 @@ + + "Zvanu nodrošina %s" @@ -14,6 +30,8 @@ "Aizturēts" "Videozvans no:" "Wi-Fi videozvans no:" + "Videozvana jaunināšanas pieprasījums no:" + "Wi-Fi videozvana jaunināšanas pieprasījums no:" "Zvans no:" "Darba zvans no:" "Ienākošie zvani, ko nodrošina %s" diff --git a/java/com/android/incallui/contactgrid/res/values-mk/strings.xml b/java/com/android/incallui/contactgrid/res/values-mk/strings.xml index 104468359..fcab8f452 100644 --- a/java/com/android/incallui/contactgrid/res/values-mk/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-mk/strings.xml @@ -1,4 +1,20 @@ + + "Повикување преку %s" @@ -14,6 +30,8 @@ "На чекање" "Видеоповик од" "Видеоповик преку Wi-Fi од" + "Барање за надградба на видеоповик од" + "Барање за надградба на видеоповик преку Wi-Fi од" "Повик од" "Работен повик од" "Дојдовни повици преку %s" diff --git a/java/com/android/incallui/contactgrid/res/values-ml/strings.xml b/java/com/android/incallui/contactgrid/res/values-ml/strings.xml index 519e9f478..1dfb46a93 100644 --- a/java/com/android/incallui/contactgrid/res/values-ml/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-ml/strings.xml @@ -1,4 +1,20 @@ + + "%s മുഖേന വിളിക്കുന്നു" @@ -14,6 +30,8 @@ "ഹോള്‍ഡിലാണ്" "ഈ വ്യക്തിയിൽ നിന്നുള്ള വീഡിയോ കോൾ" "ഈ വ്യക്തിയിൽ നിന്നുള്ള Wi-Fi വീഡിയോ കോൾ" + "ഇനിപ്പറയുന്നതിൽ നിന്നുള്ള വീഡിയോ അപ്‌ഗ്രേഡ് അഭ്യർത്ഥന" + "ഇനിപ്പറയുന്നതിൽ നിന്നുള്ള Wi-Fi വീഡിയോ അപ്‌ഗ്രേഡ് അഭ്യർത്ഥന" "ഈ വ്യക്തിയിൽ നിന്നുള്ള കോൾ" "ഈ വ്യക്തിയിൽ നിന്നുള്ള ഔദ്യോഗിക കോൾ" "%s മുഖേനയുള്ള ഇൻകമിംഗ്" diff --git a/java/com/android/incallui/contactgrid/res/values-mn/strings.xml b/java/com/android/incallui/contactgrid/res/values-mn/strings.xml index c87e07179..c93bd468a 100644 --- a/java/com/android/incallui/contactgrid/res/values-mn/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-mn/strings.xml @@ -1,4 +1,20 @@ + + "%s-р залгаж байна" @@ -14,6 +30,8 @@ "Хүлээлгэнд байгаа" "Видео дуудлага" "Wi-Fi видео дуудлага" + "Видеог сайжруулах хүсэлт" + "Wi-Fi видеог сайжруулах хүсэлт" "Дуудлага" "Ажлын дуудлага" "%s-р ирж байна" diff --git a/java/com/android/incallui/contactgrid/res/values-mr/strings.xml b/java/com/android/incallui/contactgrid/res/values-mr/strings.xml index 6a0181774..81d76dd70 100644 --- a/java/com/android/incallui/contactgrid/res/values-mr/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-mr/strings.xml @@ -1,4 +1,20 @@ + + "%s द्वारे कॉल करीत आहे" @@ -14,6 +30,8 @@ "होल्ड वर" "यावरून व्हिडिओ कॉल" "Wi-Fi व्हिडिओ कॉल" + "याकडून व्हिडिओ श्रेणीसुधारणेची विनंती" + "याकडून Wi-Fi व्हिडिओ श्रेणीसुधारणेची विनंती" "यावरील कॉल" "कडून कार्य कॉल" "%s द्वारे येणारे" diff --git a/java/com/android/incallui/contactgrid/res/values-ms/strings.xml b/java/com/android/incallui/contactgrid/res/values-ms/strings.xml index 17ca75369..815df7947 100644 --- a/java/com/android/incallui/contactgrid/res/values-ms/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-ms/strings.xml @@ -1,4 +1,20 @@ + + "Memanggil melalui %s" @@ -14,6 +30,8 @@ "Panggilan ditahan" "Panggilan video daripada" "Panggilan video Wi-Fi daripada" + "Permintaan peningkatan video daripada" + "Permintaan peningkatan video Wi-Fi daripada" "Panggilan daripada" "Panggilan kerja daripada" "Panggilan masuk melalui %s" diff --git a/java/com/android/incallui/contactgrid/res/values-my/strings.xml b/java/com/android/incallui/contactgrid/res/values-my/strings.xml index 14770cfaf..3c8a88e41 100644 --- a/java/com/android/incallui/contactgrid/res/values-my/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-my/strings.xml @@ -1,4 +1,20 @@ + + "%s မှတစ်ဆင့် ခေါ်ဆိုနေသည်" @@ -14,6 +30,8 @@ "ဖုန်းကိုင်ထားသည်" "အောက်ပါထံမှ ဗီဒီယိုခေါ်ဆိုမှု" "အောက်ပါထံမှ Wi-Fi ဗီဒီယိုခေါ်ဆိုမှု" + "အောက်ပါထံမှ ဗီဒီယိုအဆင့်မြှင့်ခြင်းတောင်းဆိုချက်" + "အောက်ပါထံမှ Wi-Fi ဗီဒီယိုအဆင့်မြှင့်ခြင်းတောင်းဆိုချက်" "အောက်ပါထံမှ ခေါ်ဆိုမှု" "အောက်ပါထံမှ အလုပ်ခေါ်ဆိုမှု" "%s မှတစ်ဆင့် အဝင်ခေါ်ဆိုမှု" diff --git a/java/com/android/incallui/contactgrid/res/values-nb/strings.xml b/java/com/android/incallui/contactgrid/res/values-nb/strings.xml index fbf98954c..9ad8d0d6a 100644 --- a/java/com/android/incallui/contactgrid/res/values-nb/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-nb/strings.xml @@ -1,4 +1,20 @@ + + "Ringer via %s" @@ -14,6 +30,8 @@ "På vent" "Videoanrop fra" "Wi-Fi-videoanrop fra" + "Forespørsel om videooppdatering fra" + "Forespørsel om Wi-Fi-videooppdatering fra" "Anrop fra" "Jobbrelatert anrop fra" "Innkommende via %s" diff --git a/java/com/android/incallui/contactgrid/res/values-ne/strings.xml b/java/com/android/incallui/contactgrid/res/values-ne/strings.xml index d618af43f..e6e65c5fb 100644 --- a/java/com/android/incallui/contactgrid/res/values-ne/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-ne/strings.xml @@ -1,4 +1,20 @@ + + "%s मार्फत कल गर्दै" @@ -14,6 +30,8 @@ "होल्डमा छ" "निम्नबाट भिडियो कल आएको छ" "निम्नबाट Wi-Fi मार्फत गरिएको भिडियो कल आएको छ" + "निम्नबाट आएको भिडियो अपग्रेडसम्बन्धी अनुरोध" + "निम्नबाट आएको Wi-Fi मार्फत भिडियो अपग्रेडसम्बन्धी अनुरोध" "निम्नबाट कल आएको छ" "निम्नबाट कार्य सम्बन्धी कल आएको छ" "%s मार्फत गरिएको आगमन कल" diff --git a/java/com/android/incallui/contactgrid/res/values-nl/strings.xml b/java/com/android/incallui/contactgrid/res/values-nl/strings.xml index 10dcd13f0..828a7a228 100644 --- a/java/com/android/incallui/contactgrid/res/values-nl/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-nl/strings.xml @@ -1,4 +1,20 @@ + + "Bellen via %s" @@ -14,6 +30,8 @@ "In de wacht" "Videogesprek van" "Wifi-videogesprek van" + "Upgradeverzoek voor videogesprek van" + "Upgradeverzoek voor wifi-videogesprek van" "Oproep van" "Zakelijke oproep van" "Inkomend via %s" diff --git a/java/com/android/incallui/contactgrid/res/values-no/strings.xml b/java/com/android/incallui/contactgrid/res/values-no/strings.xml index fbf98954c..9ad8d0d6a 100644 --- a/java/com/android/incallui/contactgrid/res/values-no/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-no/strings.xml @@ -1,4 +1,20 @@ + + "Ringer via %s" @@ -14,6 +30,8 @@ "På vent" "Videoanrop fra" "Wi-Fi-videoanrop fra" + "Forespørsel om videooppdatering fra" + "Forespørsel om Wi-Fi-videooppdatering fra" "Anrop fra" "Jobbrelatert anrop fra" "Innkommende via %s" diff --git a/java/com/android/incallui/contactgrid/res/values-pa/strings.xml b/java/com/android/incallui/contactgrid/res/values-pa/strings.xml index fb261d649..1d4801c43 100644 --- a/java/com/android/incallui/contactgrid/res/values-pa/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-pa/strings.xml @@ -1,4 +1,20 @@ + + "%s ਰਾਹੀਂ ਕਾਲ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ" @@ -14,6 +30,8 @@ "ਰੋਕ ਕੇ ਰੱਖੀ ਗਈ" "ਇਸ ਤੋਂ ਵੀਡੀਓ ਕਾਲ" "ਇਸ ਤੋਂ Wi-Fi ਵੀਡੀਓ ਕਾਲ" + "ਇਸ ਤੋਂ ਵੀਡੀਓ ਅੱਪਗ੍ਰੇਡ ਬੇਨਤੀ" + "ਇਸ ਤੋਂ Wi-Fi ਵੀਡੀਓ ਅੱਪਗ੍ਰੇਡ ਬੇਨਤੀ" "ਇਸ ਤੋਂ ਕਾਲ" "ਇਸ ਤੋਂ ਕੰਮ ਸਬੰਧੀ ਕਾਲ" "%s ਰਾਹੀਂ ਇਨਕਮਿੰਗ" diff --git a/java/com/android/incallui/contactgrid/res/values-pl/strings.xml b/java/com/android/incallui/contactgrid/res/values-pl/strings.xml index 998e49e3e..586f39e65 100644 --- a/java/com/android/incallui/contactgrid/res/values-pl/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-pl/strings.xml @@ -1,4 +1,20 @@ + + "Dzwonię przez %s" @@ -14,6 +30,8 @@ "Oczekujące" "Rozmowa wideo z:" "Rozmowa wideo przez Wi-Fi z:" + "Prośba o przejście na rozmowę wideo wysłana przez:" + "Prośba o przejście na rozmowę wideo przez Wi-Fi wysłana przez:" "Połączenie z:" "Połączenie służbowe z:" "Przychodzące z sieci %s" diff --git a/java/com/android/incallui/contactgrid/res/values-pt-rBR/strings.xml b/java/com/android/incallui/contactgrid/res/values-pt-rBR/strings.xml index 4365cba59..a445cdf60 100644 --- a/java/com/android/incallui/contactgrid/res/values-pt-rBR/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-pt-rBR/strings.xml @@ -1,4 +1,20 @@ + + "Ligando via %s" @@ -14,6 +30,8 @@ "Em espera" "Videochamada de" "Videochamada via Wi-Fi de" + "Solicitação de upgrade de vídeo de" + "Solicitação de upgrade de vídeo por Wi-Fi de" "Chamada de" "Chamada de trabalho de" "Chamada de %s" diff --git a/java/com/android/incallui/contactgrid/res/values-pt-rPT/strings.xml b/java/com/android/incallui/contactgrid/res/values-pt-rPT/strings.xml index 55d3c2695..ca07b3fc9 100644 --- a/java/com/android/incallui/contactgrid/res/values-pt-rPT/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-pt-rPT/strings.xml @@ -1,4 +1,20 @@ + + "A telefonar através de %s…" @@ -14,6 +30,8 @@ "Em espera" "Videochamada de" "Videochamada a partir de rede Wi-Fi de" + "Pedido de atualização para videochamada de" + "Pedido de atualização para videochamada por Wi-Fi de" "Chamada de" "Chamada de trabalho de" "Chamada recebida através de %s" diff --git a/java/com/android/incallui/contactgrid/res/values-pt/strings.xml b/java/com/android/incallui/contactgrid/res/values-pt/strings.xml index 4365cba59..a445cdf60 100644 --- a/java/com/android/incallui/contactgrid/res/values-pt/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-pt/strings.xml @@ -1,4 +1,20 @@ + + "Ligando via %s" @@ -14,6 +30,8 @@ "Em espera" "Videochamada de" "Videochamada via Wi-Fi de" + "Solicitação de upgrade de vídeo de" + "Solicitação de upgrade de vídeo por Wi-Fi de" "Chamada de" "Chamada de trabalho de" "Chamada de %s" diff --git a/java/com/android/incallui/contactgrid/res/values-ro/strings.xml b/java/com/android/incallui/contactgrid/res/values-ro/strings.xml index f8d1c9b54..180a01f4c 100644 --- a/java/com/android/incallui/contactgrid/res/values-ro/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-ro/strings.xml @@ -1,4 +1,20 @@ + + "Se apelează prin %s" @@ -14,6 +30,8 @@ "În așteptare" "Apel video de la" "Apel video prin Wi-Fi de la" + "Solicitare de upgrade la apel video de la" + "Solicitare de upgrade la apel video prin Wi-Fi de la" "Apel primit de la" "Apel de serviciu de la" "Primite prin %s" diff --git a/java/com/android/incallui/contactgrid/res/values-ru/strings.xml b/java/com/android/incallui/contactgrid/res/values-ru/strings.xml index dfbc08828..e0a63518f 100644 --- a/java/com/android/incallui/contactgrid/res/values-ru/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-ru/strings.xml @@ -1,4 +1,20 @@ + + "Вызов через %s" @@ -14,6 +30,8 @@ "На удержании" "Видеовызов от" "Видеовызов по Wi-Fi от" + "Запрос на переход к видеовстрече от:" + "Запрос на переход к видеовстрече через Wi-Fi от:" "Вызов от" "Рабочий вызов от" "Входящий вызов (оператор: %s)" diff --git a/java/com/android/incallui/contactgrid/res/values-si/strings.xml b/java/com/android/incallui/contactgrid/res/values-si/strings.xml index 00ca2aa90..451dc396c 100644 --- a/java/com/android/incallui/contactgrid/res/values-si/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-si/strings.xml @@ -1,4 +1,20 @@ + + "%s හරහා අමතමින්" @@ -14,6 +30,8 @@ "රඳවා ගත්" "වෙතින් වීඩියෝ ඇමතුම" "වෙතින් Wi-Fi වීඩියෝ ඇමතුම" + "වෙතින් වීඩියෝ උත්ශ්‍රේණි කිරීමේ ඉල්ලීම" + "වෙතින් Wi-Fi වීඩියෝ උත්ශ්‍රේණි කිරීමේ ඉල්ලීම" "වෙතින් ඇමතුම" "වෙතින් කාර්යාල ඇමතුම" "%s හරහා එන" diff --git a/java/com/android/incallui/contactgrid/res/values-sk/strings.xml b/java/com/android/incallui/contactgrid/res/values-sk/strings.xml index 40039ee9a..ae21ec855 100644 --- a/java/com/android/incallui/contactgrid/res/values-sk/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-sk/strings.xml @@ -1,4 +1,20 @@ + + "Voláte prostredníctvom poskytovateľa %s" @@ -14,6 +30,8 @@ "Podržané" "Videohovor od:" "Videohovor cez Wi-Fi od:" + "Žiadosť o inováciu na videohovor od používateľa" + "Žiadosť o inováciu na videohovor cez Wi-Fi od používateľa" "Hovor od:" "Pracovný hovor od:" "Prichádzajúci hovor prostredníctvom poskytovateľa %s" diff --git a/java/com/android/incallui/contactgrid/res/values-sl/strings.xml b/java/com/android/incallui/contactgrid/res/values-sl/strings.xml index f76b5cdac..1d93d21a4 100644 --- a/java/com/android/incallui/contactgrid/res/values-sl/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-sl/strings.xml @@ -1,4 +1,20 @@ + + "Klicanje prek ponudnika %s" @@ -14,6 +30,8 @@ "Zadržano" "Videoklic osebe" "Videoklic prek omrežja Wi-Fi osebe" + "Zahteva za nadgradnjo v video – zahteva osebe" + "Zahteva za nadgradnjo v video prek omrežja Wi-Fi – zahteva osebe" "Klic osebe" "Delovni klic osebe" "Dohodni klic prek storitve %s" diff --git a/java/com/android/incallui/contactgrid/res/values-sq/strings.xml b/java/com/android/incallui/contactgrid/res/values-sq/strings.xml index 34ec2d1f6..8c28eb7ea 100644 --- a/java/com/android/incallui/contactgrid/res/values-sq/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-sq/strings.xml @@ -1,4 +1,20 @@ + + "Telefonatë nëpërmjet %s" @@ -14,6 +30,8 @@ "Në pritje" "Telefonatë me video nga" "Telefonatë me video në Wi-Fi nga" + "Kërkesë për përmirësimin me video nga" + "Kërkesë për përmirësimin me video me Wi-Fi nga" "Telefonatë nga" "Telefonatë pune nga" "Telefonatë hyrëse nëpërmjet %s" diff --git a/java/com/android/incallui/contactgrid/res/values-sr/strings.xml b/java/com/android/incallui/contactgrid/res/values-sr/strings.xml index 9ad149905..66ea45d6e 100644 --- a/java/com/android/incallui/contactgrid/res/values-sr/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-sr/strings.xml @@ -1,4 +1,20 @@ + + "Позивамо преко %s" @@ -14,6 +30,8 @@ "На чекању" "Видео позив од" "Wi-Fi видео позив од" + "Захтев за прелазак на видео позив од" + "Захтев за прелазак на видео позив преко Wi-Fi-ја од" "Позив од" "Пословни позив од" "Долазни позив преко %s" diff --git a/java/com/android/incallui/contactgrid/res/values-sv/strings.xml b/java/com/android/incallui/contactgrid/res/values-sv/strings.xml index d5dd15953..931d9c98d 100644 --- a/java/com/android/incallui/contactgrid/res/values-sv/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-sv/strings.xml @@ -1,4 +1,20 @@ + + "Ringer med %s" @@ -14,6 +30,8 @@ "Parkerat" "Videosamtal från" "Wi-Fi-videosamtal från" + "Begäran om videouppgradering från" + "Begäran om uppgradering av Wi-Fi-video från" "Samtal från" "Jobbsamtal från" "Inkommande via %s" diff --git a/java/com/android/incallui/contactgrid/res/values-sw/strings.xml b/java/com/android/incallui/contactgrid/res/values-sw/strings.xml index 72bc26f58..581d7970a 100644 --- a/java/com/android/incallui/contactgrid/res/values-sw/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-sw/strings.xml @@ -1,4 +1,20 @@ + + "Inapiga simu kupitia %s" @@ -14,6 +30,8 @@ "Imesitishwa" "Simu ya video kutoka kwa" "Simu ya video kupitia Wi-Fi kutoka kwa" + "Umetumiwa ombi ili ubadilishe utumie simu ya video na" + "Umetumiwa ombi ili ubadilishe utumie simu ya video kwenye Wi-Fi na" "Simu kutoka kwa" "Simu ya kazi kutoka kwa" "Simu zinazoingia kupitia %s" diff --git a/java/com/android/incallui/contactgrid/res/values-ta/strings.xml b/java/com/android/incallui/contactgrid/res/values-ta/strings.xml index 2f5b1b81d..37ff87681 100644 --- a/java/com/android/incallui/contactgrid/res/values-ta/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-ta/strings.xml @@ -1,4 +1,20 @@ + + "%s வழியாக அழைக்கிறது" @@ -14,6 +30,8 @@ "ஹோல்டில் உள்ளது" "வீடியோ அழைப்பு:" "வைஃபை வீடியோ அழைப்பு:" + "வீடியோவை மேம்படுத்துவதற்கான கோரிக்கை:" + "வைஃபையில் வீடியோவை மேம்படுத்துவதற்கான கோரிக்கை:" "அழைப்பு:" "அழைப்பு (பணி) :" "%s மூலம் உள்வரும் அழைப்பு" diff --git a/java/com/android/incallui/contactgrid/res/values-te/strings.xml b/java/com/android/incallui/contactgrid/res/values-te/strings.xml index 52038dbf8..913c9448a 100644 --- a/java/com/android/incallui/contactgrid/res/values-te/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-te/strings.xml @@ -1,4 +1,20 @@ + + "%s ద్వారా కాల్ చేస్తోంది" @@ -14,6 +30,8 @@ "హోల్డ్‌లో ఉంది" "వీరి నుండి వీడియో కాల్:" "వీరి నుండి Wi-Fi వీడియో కాల్:" + "వీరి నుండి వీడియో అప్‌గ్రేడ్ అభ్యర్థన" + "వీరి నుండి Wi-Fi వీడియో అప్‌గ్రేడ్ అభ్యర్థన" "వీరి నుండి కాల్:" "వీరి నుండి కార్యాలయ కాల్:" "%s ద్వారా ఇన్‌కమింగ్ కాల్" diff --git a/java/com/android/incallui/contactgrid/res/values-th/strings.xml b/java/com/android/incallui/contactgrid/res/values-th/strings.xml index 419db19cc..6503959e4 100644 --- a/java/com/android/incallui/contactgrid/res/values-th/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-th/strings.xml @@ -1,4 +1,20 @@ + + "โทรผ่าน %s" @@ -14,6 +30,8 @@ "พักสาย" "แฮงเอาท์วิดีโอจาก" "แฮงเอาท์วิดีโอผ่าน Wi-Fi จาก" + "คำขออัปเกรดวิดีโอจาก" + "คำขออัปเกรดวิดีโอผ่าน Wi-Fi จาก" "โทรจาก" "โทรเรื่องงานจาก" "สายเรียกเข้าผ่าน %s" diff --git a/java/com/android/incallui/contactgrid/res/values-tl/strings.xml b/java/com/android/incallui/contactgrid/res/values-tl/strings.xml index 282ec106f..7fa063b61 100644 --- a/java/com/android/incallui/contactgrid/res/values-tl/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-tl/strings.xml @@ -1,4 +1,20 @@ + + "Tumatawag sa pamamagitan ng %s" @@ -14,6 +30,8 @@ "Naka-hold" "Video call mula kay" "Wi-Fi na video call mula kay" + "Kahilingan upang i-upgrade ang video mula kay" + "Kahilingan upang i-upgrade ang video gamit ang Wi-Fi mula kay" "Tawag mula kay" "Tawag sa trabaho mula kay" "Papasok sa pamamagitan ng %s" diff --git a/java/com/android/incallui/contactgrid/res/values-tr/strings.xml b/java/com/android/incallui/contactgrid/res/values-tr/strings.xml index 5ecbf3543..1ce565dca 100644 --- a/java/com/android/incallui/contactgrid/res/values-tr/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-tr/strings.xml @@ -1,4 +1,20 @@ + + "%s üzerinden çağrı yapılıyor" @@ -14,6 +30,8 @@ "Beklemede" "Gelen video görüşmesi isteği:" "Gelen kablosuz video görüşmesi isteği:" + "Görüntülü görüşmeye geçme isteği alındı:" + "Kablosuz görüntülü görüşmeye geçme isteği alındı:" "Gelen çağrı:" "Gelen iş çağrısı:" "%s adlı sağlayıcı üzerinden gelen çağrı" diff --git a/java/com/android/incallui/contactgrid/res/values-uk/strings.xml b/java/com/android/incallui/contactgrid/res/values-uk/strings.xml index 7b84fb650..0d4a595ca 100644 --- a/java/com/android/incallui/contactgrid/res/values-uk/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-uk/strings.xml @@ -1,4 +1,20 @@ + + "Виклик здійснюється через оператора %s" @@ -14,6 +30,8 @@ "Утримується" "Відеодзвінок від:" "Відеодзвінок через Wi-Fi від:" + "Запит на відеодзвінок від користувача" + "Запит на відеодзвінок через Wi-Fi від користувача" "Виклик від:" "Виклик на робочий телефон від:" "Вхідні виклики через оператора %s" diff --git a/java/com/android/incallui/contactgrid/res/values-ur/strings.xml b/java/com/android/incallui/contactgrid/res/values-ur/strings.xml index 6584181fb..793e4879d 100644 --- a/java/com/android/incallui/contactgrid/res/values-ur/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-ur/strings.xml @@ -1,4 +1,20 @@ + + "کالنگ بذریعہ %s" @@ -14,6 +30,8 @@ "ہولڈ پر ہے" "ویڈیو کال منجانب" "‏Wi-Fi ویڈیو کال منجانب" + "ویڈیو اپ گریڈ کی درخواست منجانب" + "‏Wi-Fi ویڈیو اپ گریڈ کی درخواست منجانب" "کال منجانب" "دفتری کال منجانب" "%s کے ذریعے آنے والی کال" diff --git a/java/com/android/incallui/contactgrid/res/values-uz/strings.xml b/java/com/android/incallui/contactgrid/res/values-uz/strings.xml index db11a1822..a5ce1caea 100644 --- a/java/com/android/incallui/contactgrid/res/values-uz/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-uz/strings.xml @@ -1,4 +1,20 @@ + + "%s orqali qo‘ng‘rioq qilinmoqda" @@ -14,6 +30,8 @@ "Kutish rejimida" "Kimdan video qo‘ng‘iroq:" "Wi-Fi orqali kimdan video qo‘ng‘iroq:" + "Bu foydalanuvchi video suhbatga o‘tishni so‘ramoqda:" + "Bu foydalanuvchi Wi-Fi orqali video suhbatga o‘tishni so‘ramoqda:" "Kimdan qo‘ng‘iroq:" "Ish telefoniga kimdan qo‘ng‘iroq:" "Kiruvchi qo‘ng‘iroq (operator: %s)" diff --git a/java/com/android/incallui/contactgrid/res/values-vi/strings.xml b/java/com/android/incallui/contactgrid/res/values-vi/strings.xml index 340a11577..9ce0f1838 100644 --- a/java/com/android/incallui/contactgrid/res/values-vi/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-vi/strings.xml @@ -1,4 +1,20 @@ + + "Đang gọi điện qua %s" @@ -14,6 +30,8 @@ "Đang chờ" "Cuộc gọi điện video từ" "Cuộc gọi điện video qua Wi-Fi từ" + "Yêu cầu nâng cấp video từ" + "Yêu cầu nâng cấp video Wi-Fi từ" "Cuộc gọi từ" "Cuộc gọi về công việc từ" "Cuộc gọi đến qua %s" diff --git a/java/com/android/incallui/contactgrid/res/values-zh-rCN/strings.xml b/java/com/android/incallui/contactgrid/res/values-zh-rCN/strings.xml index 16031b811..af5008af0 100644 --- a/java/com/android/incallui/contactgrid/res/values-zh-rCN/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-zh-rCN/strings.xml @@ -1,4 +1,20 @@ + + "正在通过%s进行通话" @@ -14,6 +30,8 @@ "保持" "视频通话来自:" "WLAN 视频通话来自:" + "视频通话升级请求来自:" + "WLAN 视频通话升级请求来自:" "通话来自:" "工作通话来自:" "有人通过 %s 来电" diff --git a/java/com/android/incallui/contactgrid/res/values-zh-rHK/strings.xml b/java/com/android/incallui/contactgrid/res/values-zh-rHK/strings.xml index 14a444124..9f4748175 100644 --- a/java/com/android/incallui/contactgrid/res/values-zh-rHK/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-zh-rHK/strings.xml @@ -1,4 +1,20 @@ + + "正在透過 %s 撥號" @@ -14,6 +30,8 @@ "保留" "視像通話來自" "Wi-Fi 視像通話來自" + "視像升級要求來自" + "Wi-Fi 視像升級要求來自" "通話來自" "工作通話來自" "透過 %s 的來電" diff --git a/java/com/android/incallui/contactgrid/res/values-zh-rTW/strings.xml b/java/com/android/incallui/contactgrid/res/values-zh-rTW/strings.xml index bdee41e67..563bb2832 100644 --- a/java/com/android/incallui/contactgrid/res/values-zh-rTW/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-zh-rTW/strings.xml @@ -1,4 +1,20 @@ + + "正在透過 %s 撥號" @@ -14,6 +30,8 @@ "保留中" "視訊通話來電:" "Wi-Fi 視訊通話來電:" + "視訊升級要求,來自:" + "Wi-Fi 視訊升級要求,來自:" "語音來電:" "公司來電:" "有人透過 %s 來電" diff --git a/java/com/android/incallui/contactgrid/res/values-zu/strings.xml b/java/com/android/incallui/contactgrid/res/values-zu/strings.xml index 150d5cc98..19951ccf7 100644 --- a/java/com/android/incallui/contactgrid/res/values-zu/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values-zu/strings.xml @@ -1,4 +1,20 @@ + + "Ishaya ucingo nge-%s" @@ -14,6 +30,8 @@ "Ibambile" "Ikholi yevidiyo kusukela ku-" "Ikholi yevidiyo ye-Wi-Fi kusukela ku-" + "Isicelo sokuthuthukiswa kwevidiyo kusukela" + "Isicelo sokuthuthukiswa kwevidiyo ye-Wi-Fi kusukela" "Ikholi esuka ku-" "Ikholi yomsebenzi kusukela ku-" "Ingena nge-%s" diff --git a/java/com/android/incallui/contactgrid/res/values/strings.xml b/java/com/android/incallui/contactgrid/res/values/strings.xml index 385f843b1..5a9272ca3 100644 --- a/java/com/android/incallui/contactgrid/res/values/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values/strings.xml @@ -1,4 +1,19 @@ + Wi-Fi video call from + + Video upgrade request from + + + Wi-Fi video upgrade request from + Call from diff --git a/java/com/android/incallui/incall/impl/ButtonChooserFactory.java b/java/com/android/incallui/incall/impl/ButtonChooserFactory.java index 0dcfdb5fe..99364e22c 100644 --- a/java/com/android/incallui/incall/impl/ButtonChooserFactory.java +++ b/java/com/android/incallui/incall/impl/ButtonChooserFactory.java @@ -82,12 +82,19 @@ class ButtonChooserFactory { Map mapping = createCommonMapping(); mapping.put( InCallButtonIds.BUTTON_SWITCH_TO_SECONDARY, MappingInfo.builder(4).setSlotOrder(0).build()); - mapping.put( - InCallButtonIds.BUTTON_MANAGE_VOICE_CONFERENCE, - 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()); + + /* + * Unlike the other configurations, MANAGE_VOICE_CONFERENCE shares a spot with HOLD for GSM. + * On GSM, pressing hold while there's a background call just swaps to the background call. It + * doesn't make sense to show both SWITCH_TO_SECONDARY and HOLD when they do the same thing, so + * we show MANAGE_VOICE_CONFERENCE instead. Previously MANAGE_VOICE_CONFERENCE would not show. + */ + mapping.put( + InCallButtonIds.BUTTON_MANAGE_VOICE_CONFERENCE, + MappingInfo.builder(5).setSlotOrder(0).build()); + mapping.put(InCallButtonIds.BUTTON_HOLD, MappingInfo.builder(5).setSlotOrder(5).build()); return new ButtonChooser(new MappedButtonConfig(mapping)); } diff --git a/java/com/android/incallui/incall/impl/ButtonController.java b/java/com/android/incallui/incall/impl/ButtonController.java index 8c113649d..b7a47f08e 100644 --- a/java/com/android/incallui/incall/impl/ButtonController.java +++ b/java/com/android/incallui/incall/impl/ButtonController.java @@ -29,6 +29,8 @@ import com.android.incallui.incall.impl.CheckableLabeledButton.OnCheckedChangeLi import com.android.incallui.incall.protocol.InCallButtonIds; import com.android.incallui.incall.protocol.InCallButtonUiDelegate; import com.android.incallui.incall.protocol.InCallScreenDelegate; +import com.android.incallui.speakerbuttonlogic.SpeakerButtonInfo; +import com.android.incallui.speakerbuttonlogic.SpeakerButtonInfo.IconSize; /** Manages a single button. */ interface ButtonController { @@ -376,36 +378,13 @@ interface ButtonController { } public void setAudioState(CallAudioState audioState) { - @StringRes int contentDescriptionResId; - if ((audioState.getSupportedRouteMask() & CallAudioState.ROUTE_BLUETOOTH) - == CallAudioState.ROUTE_BLUETOOTH) { - checkable = false; - isChecked = false; - label = R.string.incall_label_audio; - - if ((audioState.getRoute() & CallAudioState.ROUTE_BLUETOOTH) - == CallAudioState.ROUTE_BLUETOOTH) { - icon = R.drawable.quantum_ic_bluetooth_audio_white_36; - contentDescriptionResId = R.string.incall_content_description_bluetooth; - } else if ((audioState.getRoute() & CallAudioState.ROUTE_SPEAKER) - == CallAudioState.ROUTE_SPEAKER) { - icon = R.drawable.quantum_ic_volume_up_white_36; - contentDescriptionResId = R.string.incall_content_description_speaker; - } else if ((audioState.getRoute() & CallAudioState.ROUTE_WIRED_HEADSET) - == CallAudioState.ROUTE_WIRED_HEADSET) { - icon = R.drawable.quantum_ic_headset_white_36; - contentDescriptionResId = R.string.incall_content_description_headset; - } else { - icon = R.drawable.ic_phone_audio_white_36dp; - contentDescriptionResId = R.string.incall_content_description_earpiece; - } - } else { - checkable = true; - isChecked = audioState.getRoute() == CallAudioState.ROUTE_SPEAKER; - label = R.string.incall_label_speaker; - icon = R.drawable.quantum_ic_volume_up_white_36; - contentDescriptionResId = R.string.incall_content_description_speaker; - } + SpeakerButtonInfo info = new SpeakerButtonInfo(audioState, IconSize.SIZE_36_DP); + + checkable = info.checkable; + isChecked = info.isChecked; + label = info.label; + icon = info.icon; + @StringRes int contentDescriptionResId = info.contentDescription; contentDescription = delegate.getContext().getText(contentDescriptionResId); checkedContentDescription = diff --git a/java/com/android/incallui/incall/impl/InCallFragment.java b/java/com/android/incallui/incall/impl/InCallFragment.java index c5d75329f..e102ee009 100644 --- a/java/com/android/incallui/incall/impl/InCallFragment.java +++ b/java/com/android/incallui/incall/impl/InCallFragment.java @@ -42,6 +42,7 @@ import com.android.dialer.common.Assert; import com.android.dialer.common.FragmentUtils; import com.android.dialer.common.LogUtil; import com.android.dialer.multimedia.MultimediaData; +import com.android.dialer.widget.LockableViewPager; import com.android.incallui.audioroute.AudioRouteSelectorDialogFragment; import com.android.incallui.audioroute.AudioRouteSelectorDialogFragment.AudioRouteSelectorPresenter; import com.android.incallui.contactgrid.ContactGridManager; @@ -473,6 +474,9 @@ public class InCallFragment extends Fragment inCallButtonUiDelegate.setAudioRoute(audioRoute); } + @Override + public void onAudioRouteSelectorDismiss() {} + @NonNull @Override public ButtonController getButtonController(@InCallButtonIds int id) { diff --git a/java/com/android/incallui/incall/impl/InCallPagerAdapter.java b/java/com/android/incallui/incall/impl/InCallPagerAdapter.java index 0b1088d2d..bc0c61607 100644 --- a/java/com/android/incallui/incall/impl/InCallPagerAdapter.java +++ b/java/com/android/incallui/incall/impl/InCallPagerAdapter.java @@ -21,7 +21,6 @@ import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.PagerAdapter; -import android.text.TextUtils; import com.android.dialer.multimedia.MultimediaData; import com.android.incallui.sessiondata.MultimediaFragment; @@ -47,8 +46,7 @@ public class InCallPagerAdapter extends FragmentStatePagerAdapter { @Override public int getCount() { - if (attachments != null - && (!TextUtils.isEmpty(attachments.getText()) || attachments.hasImageData())) { + if (attachments != null && attachments.hasData()) { return 2; } return 1; diff --git a/java/com/android/incallui/incall/impl/LockableViewPager.java b/java/com/android/incallui/incall/impl/LockableViewPager.java deleted file mode 100644 index 5b8b12609..000000000 --- a/java/com/android/incallui/incall/impl/LockableViewPager.java +++ /dev/null @@ -1,46 +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.incallui.incall.impl; - -import android.content.Context; -import android.support.v4.view.ViewPager; -import android.util.AttributeSet; -import android.view.MotionEvent; - -/** {@link ViewPager} useful for disabled swiping between pages. */ -public class LockableViewPager extends ViewPager { - - private boolean swipingLocked; - - public LockableViewPager(Context context, AttributeSet attributeSet) { - super(context, attributeSet); - } - - public void setSwipingLocked(boolean swipingLocked) { - this.swipingLocked = swipingLocked; - } - - @Override - public boolean onInterceptTouchEvent(MotionEvent motionEvent) { - return !swipingLocked && super.onInterceptTouchEvent(motionEvent); - } - - @Override - public boolean onTouchEvent(MotionEvent motionEvent) { - return !swipingLocked && super.onTouchEvent(motionEvent); - } -} 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 44431413c..c06f7099c 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 @@ -1,4 +1,19 @@ + - + + "Video-oproep" "Hou aan" "Voeg oproep by" "Demp" + "Beëindig oproep" "Sleutelblok" - "Luidspreker" ", is aan" ", is af" "Voeg saam" "Bestuur" "Bestuur bellers" "Verwissel" - "Klank" "Nota is gestuur" diff --git a/java/com/android/incallui/incall/impl/res/values-am/strings.xml b/java/com/android/incallui/incall/impl/res/values-am/strings.xml index 9dfd0e61d..66a38680e 100644 --- a/java/com/android/incallui/incall/impl/res/values-am/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-am/strings.xml @@ -1,18 +1,33 @@ + + "የቪዲዮ ጥሪ" "ይዘህ ቆይ" "ጥሪ ያክሉ" "ድምፀ-ከል አድርግ" + "ጥሪ ጨርስ" "ቁልፍ ሰሌዳ" - "የድምጽ ማጉያ" "፣ በርቷል" "፣ ጠፍቷል" "አዋህድ" "አስተዳድር" "ደዋዮችን ያስተዳድሩ" "አገላብጥ" - "ድምፅ" "ማስታወሻ ተልኳል" diff --git a/java/com/android/incallui/incall/impl/res/values-ar/strings.xml b/java/com/android/incallui/incall/impl/res/values-ar/strings.xml index a5f448a31..e4dbfe4b6 100644 --- a/java/com/android/incallui/incall/impl/res/values-ar/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-ar/strings.xml @@ -1,18 +1,33 @@ + + "مكالمة فيديو" "انتظار" "إضافة مكالمة" "كتم" + "إنهاء المكالمة" "لوحة مفاتيح" - "مكبر الصوت" "، مشغل" "، غير مشغل" "دمج" "إدارة" "إدارة المتصلين" "تبديل" - "الصوت" "تم إرسال الملاحظة" diff --git a/java/com/android/incallui/incall/impl/res/values-az/strings.xml b/java/com/android/incallui/incall/impl/res/values-az/strings.xml index 5f1f8cb98..9a1f7f8fe 100644 --- a/java/com/android/incallui/incall/impl/res/values-az/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-az/strings.xml @@ -1,18 +1,33 @@ + + "Video zəng" "Xətdə axlayın" "Zəng əlavə edin" "Susdurun" + "Zəngi bitirin" "Klaviatura" - "Dinamik" ", aktivdir" ", deaktivdir" "Birləşdir" "İdarə edin" "Zəng edənləri idarə edin" "Dəyişdirin" - "Səs" "Qeyd göndərildi" 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 index bff7ed079..02d6b7c96 100644 --- 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 @@ -1,18 +1,33 @@ + + "Video poziv" "Na čekanje" "Dodaj poziv" "Isključi zvuk" + "Završi poziv" "Tastatura" - "Zvučnik" ", uključen" ", isključen" "Objedini" "Upravljaj" "Upravljajte pozivaocima" "Zameni" - "Zvuk" "Beleška je poslata" diff --git a/java/com/android/incallui/incall/impl/res/values-be/strings.xml b/java/com/android/incallui/incall/impl/res/values-be/strings.xml index 394c7c82e..45e1e1010 100644 --- a/java/com/android/incallui/incall/impl/res/values-be/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-be/strings.xml @@ -1,18 +1,33 @@ + + "Відэавыклік" "Утрымліваць" "Дадаць выклік" "Адключыць мікрафон" + "Сконч. выкл." "Клавіятура" - "Вонк.дынамік" ", уключана" ", выключана" "Аб\'яднаць" "Кіраваць" "Кіраваць выклікаючымі абанентамі" "Пераключыць" - "Гук" "Нататка адпраўлена" diff --git a/java/com/android/incallui/incall/impl/res/values-bg/strings.xml b/java/com/android/incallui/incall/impl/res/values-bg/strings.xml index 4f5933be9..c339d3bca 100644 --- a/java/com/android/incallui/incall/impl/res/values-bg/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-bg/strings.xml @@ -1,18 +1,33 @@ + + "Видеообажд." "Задържане" "Ново обажд." "Без звук" + "Затваряне" "Клавиатура" - "Високоговорител" "е включено" "е изключено" "Обединяване" "Управление" "Управление на обаждащите се" "Размяна" - "Звук" "Бележката е изпратена" diff --git a/java/com/android/incallui/incall/impl/res/values-bn/strings.xml b/java/com/android/incallui/incall/impl/res/values-bn/strings.xml index 9453e14bd..ca5837b0e 100644 --- a/java/com/android/incallui/incall/impl/res/values-bn/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-bn/strings.xml @@ -1,18 +1,33 @@ + + "ভিডিও কল" "ধরে থাকুন" "কল যোগ করুন" "নিঃশব্দ করুন" + "কল শেষ করুন" "কীপ্যাড" - "স্পিকার" ", চালু রয়েছে" ", বন্ধ রয়েছে" "মার্জ করুন" "পরিচালনা করুন" "কলারদের পরিচালনা করুন" "অদল বদল করুন" - "শব্দ" "নোট পাঠানো হয়েছে" diff --git a/java/com/android/incallui/incall/impl/res/values-bs/strings.xml b/java/com/android/incallui/incall/impl/res/values-bs/strings.xml index 4b4796457..26b44ea90 100644 --- a/java/com/android/incallui/incall/impl/res/values-bs/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-bs/strings.xml @@ -1,18 +1,33 @@ + + "Videopoziv" "Na čekanju" "Dodaj poziv" "Isključi" + "Prekini poziv" "Telefonska tastatura" - "Zvučnik" ", uključen" ", isključen" "Spoji" "Upravljaj" "Upravljanje pozivaocima" "Zamijeni" - "Zvuk" "Bilješka je poslana" diff --git a/java/com/android/incallui/incall/impl/res/values-ca/strings.xml b/java/com/android/incallui/incall/impl/res/values-ca/strings.xml index e10b7bd2d..9c76a3a5f 100644 --- a/java/com/android/incallui/incall/impl/res/values-ca/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-ca/strings.xml @@ -1,18 +1,33 @@ + + "Videotrucada" "Posa en espera" "Afeg. trucada" "Silencia" + "Penja" "Teclat" - "Altaveu" ", activat" ", desactivat" "Combina" "Gestiona" "Gestiona les persones que truquen" "Canvia" - "So" "La nota s\'ha enviat" diff --git a/java/com/android/incallui/incall/impl/res/values-cs/strings.xml b/java/com/android/incallui/incall/impl/res/values-cs/strings.xml index a00c10547..69f3e53a0 100644 --- a/java/com/android/incallui/incall/impl/res/values-cs/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-cs/strings.xml @@ -1,18 +1,33 @@ + + "Videohovor" "Podržet" "Přidat hovor" "Vyp. mikrof." + "Zavěsit" "Klávesnice" - "Reproduktor" "– zapnuto" "– vypnuto" "Sloučit" "Spravovat" "Spravovat volající" "Přepnout" - "Zvuk" "Poznámka byla odeslána" diff --git a/java/com/android/incallui/incall/impl/res/values-da/strings.xml b/java/com/android/incallui/incall/impl/res/values-da/strings.xml index 08b5cbb8e..d9328afe4 100644 --- a/java/com/android/incallui/incall/impl/res/values-da/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-da/strings.xml @@ -1,18 +1,33 @@ + + "Videoopkald" "Parkér" "Tilføj opkald" "Slå lyden fra" + "Slut opkald" "Tastatur" - "Højttaler" ", er til" ", er fra" "Flet" "Administrer" "Administrer opkaldere" "Byt" - "Lyd" "Noten blev sendt" diff --git a/java/com/android/incallui/incall/impl/res/values-de/strings.xml b/java/com/android/incallui/incall/impl/res/values-de/strings.xml index 5f3f8c1cb..30eae96b3 100644 --- a/java/com/android/incallui/incall/impl/res/values-de/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-de/strings.xml @@ -1,18 +1,33 @@ + + "Videoanruf" "Halten" "Hinzufügen" "Stumm" + "Beenden" "Wähltasten" - "Lautsprecher" ", ist an" ", ist aus" "Zusammenf." "Verwalten" "Anrufer verwalten" "Wechseln" - "Audio" "Notiz gesendet" diff --git a/java/com/android/incallui/incall/impl/res/values-el/strings.xml b/java/com/android/incallui/incall/impl/res/values-el/strings.xml index 0f5a14238..b45314fa7 100644 --- a/java/com/android/incallui/incall/impl/res/values-el/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-el/strings.xml @@ -1,18 +1,33 @@ + + "Βιντεοκλήση" "Αναμονή" "Προσθ. κλήσ." "Σίγαση" + "Τερματισμός" "Πληκτρολόγιο" - "Ηχείο" ", ενεργό" ", ανενεργό" "Συγχώνευση" "Διαχείριση" "Διαχείριση καλούντων" "Ανταλλαγή" - "Ήχος" "Η σημείωση εστάλη" diff --git a/java/com/android/incallui/incall/impl/res/values-en-rAU/strings.xml b/java/com/android/incallui/incall/impl/res/values-en-rAU/strings.xml index 89b72df54..34323f57a 100644 --- a/java/com/android/incallui/incall/impl/res/values-en-rAU/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-en-rAU/strings.xml @@ -1,18 +1,33 @@ + + "Video call" "Hold" "Add call" "Mute" + "End call" "Keypad" - "Speaker" ", is on" ", is off" "Merge" "Manage" "Manage callers" "Swap" - "Sound" "Note sent" diff --git a/java/com/android/incallui/incall/impl/res/values-en-rGB/strings.xml b/java/com/android/incallui/incall/impl/res/values-en-rGB/strings.xml index 89b72df54..34323f57a 100644 --- a/java/com/android/incallui/incall/impl/res/values-en-rGB/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-en-rGB/strings.xml @@ -1,18 +1,33 @@ + + "Video call" "Hold" "Add call" "Mute" + "End call" "Keypad" - "Speaker" ", is on" ", is off" "Merge" "Manage" "Manage callers" "Swap" - "Sound" "Note sent" diff --git a/java/com/android/incallui/incall/impl/res/values-en-rIN/strings.xml b/java/com/android/incallui/incall/impl/res/values-en-rIN/strings.xml index 89b72df54..34323f57a 100644 --- a/java/com/android/incallui/incall/impl/res/values-en-rIN/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-en-rIN/strings.xml @@ -1,18 +1,33 @@ + + "Video call" "Hold" "Add call" "Mute" + "End call" "Keypad" - "Speaker" ", is on" ", is off" "Merge" "Manage" "Manage callers" "Swap" - "Sound" "Note sent" diff --git a/java/com/android/incallui/incall/impl/res/values-es-rUS/strings.xml b/java/com/android/incallui/incall/impl/res/values-es-rUS/strings.xml index fe9374cb9..d39cf2f6f 100644 --- a/java/com/android/incallui/incall/impl/res/values-es-rUS/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-es-rUS/strings.xml @@ -1,18 +1,33 @@ + + "Videollamada" "Retener" "Agregar llamada" "Silenciar" + "Finalizar" "Teclado" - "Altavoz" ", activado" ", desactivado" "Combinar" "Administrar" "Administrar números" "Cambiar" - "Sonido" "Se envió la nota" diff --git a/java/com/android/incallui/incall/impl/res/values-es/strings.xml b/java/com/android/incallui/incall/impl/res/values-es/strings.xml index f2dd09bb9..db5a7e643 100644 --- a/java/com/android/incallui/incall/impl/res/values-es/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-es/strings.xml @@ -1,18 +1,33 @@ + + "Videollamada" "Retener" "Añadir" "Silenciar" + "Finalizar" "Teclado" - "Altavoz" ", activado" ", desactivado" "Combinar" "Gestionar" "Administrar llamadas" "Cambiar" - "Sonido" "Nota enviada" diff --git a/java/com/android/incallui/incall/impl/res/values-et/strings.xml b/java/com/android/incallui/incall/impl/res/values-et/strings.xml index 03fa7deae..f4587adaa 100644 --- a/java/com/android/incallui/incall/impl/res/values-et/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-et/strings.xml @@ -1,18 +1,33 @@ + + "Videokõne" "Ootele" "Lisa kõne" "Vaigista" + "Lõpeta kõne" "Klaviatuur" - "Kõlar" ", on sees" ", on väljas" "Ühenda" "Halda" "Helistajate haldamine" "Vaheta" - "Heli" "Märge on saadetud" diff --git a/java/com/android/incallui/incall/impl/res/values-eu/strings.xml b/java/com/android/incallui/incall/impl/res/values-eu/strings.xml index 51d300e2e..28d78a70b 100644 --- a/java/com/android/incallui/incall/impl/res/values-eu/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-eu/strings.xml @@ -1,18 +1,33 @@ + + "Bideo-deia" "Utzi zain" "Gehitu deia" "Des. audioa" + "Amaitu deia" "Teklatua" - "Bozgorailua" ", aktibatuta" ", desaktib." "Bateratu" "Kudeatu" "Kudeatu deitzaileak" "Aldatu" - "Soinua" "Bidali da oharra" diff --git a/java/com/android/incallui/incall/impl/res/values-fa/strings.xml b/java/com/android/incallui/incall/impl/res/values-fa/strings.xml index a0701163e..a26ac75a2 100644 --- a/java/com/android/incallui/incall/impl/res/values-fa/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-fa/strings.xml @@ -1,18 +1,33 @@ + + "تماس ویدئویی" "درحال انتظار" "افزودن تماس" "بی‌صدا کردن" + "پایان تماس" "صفحه کلید" - "بلندگو" "، فعال است" "، غیرفعال است" "ادغام" "مدیریت" "مدیریت تماس‌گیرندگان" "جابه‌جایی" - "صدا" "یادداشت ارسال شد" diff --git a/java/com/android/incallui/incall/impl/res/values-fi/strings.xml b/java/com/android/incallui/incall/impl/res/values-fi/strings.xml index d81bfbf39..9ae53488a 100644 --- a/java/com/android/incallui/incall/impl/res/values-fi/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-fi/strings.xml @@ -1,18 +1,33 @@ + + "Videopuhelu" "Pitoon" "Lisää puhelu" "Mykistä" + "Päätä puhelu" "Näppäimistö" - "Kaiutin" ", käytössä" ", ei käytössä" "Yhdistä" "Hallinnoi" "Hallinnoi soittajia" "Vaihda" - "Ääni" "Muistiinpano lähetettiin." diff --git a/java/com/android/incallui/incall/impl/res/values-fr-rCA/strings.xml b/java/com/android/incallui/incall/impl/res/values-fr-rCA/strings.xml index 1278bce2d..cff6745d1 100644 --- a/java/com/android/incallui/incall/impl/res/values-fr-rCA/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-fr-rCA/strings.xml @@ -1,18 +1,33 @@ + + "Appel vidéo" "En attente" "Autre appel" "Couper son" + "Raccrocher" "Clavier" - "Haut-parleur" ", activé" ", désactivé" "Fusionner" "Gérer" "Gérer les appels" "Permuter" - "Son" "Note envoyée" diff --git a/java/com/android/incallui/incall/impl/res/values-fr/strings.xml b/java/com/android/incallui/incall/impl/res/values-fr/strings.xml index 5532032b9..14e92beeb 100644 --- a/java/com/android/incallui/incall/impl/res/values-fr/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-fr/strings.xml @@ -1,18 +1,33 @@ + + "Appel vidéo" "En attente" "Autre appel" "Couper micro" + "Raccrocher" "Clavier" - "Haut-parleur" ", activé" ", désactivé" "Fusionner" "Gérer" "Gérer les appelants" "Permuter" - "Son" "Note envoyée" diff --git a/java/com/android/incallui/incall/impl/res/values-gl/strings.xml b/java/com/android/incallui/incall/impl/res/values-gl/strings.xml index ec99b7c75..4b399f4ee 100644 --- a/java/com/android/incallui/incall/impl/res/values-gl/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-gl/strings.xml @@ -1,18 +1,33 @@ + + "Videochamada" "En espera" "Eng. chamada" "Ignorar" + "Finalizar chamada" "Teclado" - "Altofalante" "activado" "desactivado" "Combinar" "Xestionar" "Xestionar emisores de chamadas" "Cambiar" - "Son" "Enviouse a nota" diff --git a/java/com/android/incallui/incall/impl/res/values-gu/strings.xml b/java/com/android/incallui/incall/impl/res/values-gu/strings.xml index fb3999c9a..438f0f351 100644 --- a/java/com/android/incallui/incall/impl/res/values-gu/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-gu/strings.xml @@ -1,18 +1,33 @@ + + "વિડિઓ કૉલ" "હોલ્ડ કરો" "કૉલ ઉમેરો" "મ્યૂટ કરો" + "કૉલ સમાપ્ત કરો" "કીપેડ" - "સ્પીકર" ", ચાલુ છે" ", બંધ છે" "મર્જ કરો" "સંચાલિત કરો" "કૉલર્સને સંચાલિત કરો" "સ્વેપ કરો" - "ધ્વનિ" "નોંધ મોકલી" diff --git a/java/com/android/incallui/incall/impl/res/values-h580dp/dimens.xml b/java/com/android/incallui/incall/impl/res/values-h580dp/dimens.xml deleted file mode 100644 index 1f37cd504..000000000 --- a/java/com/android/incallui/incall/impl/res/values-h580dp/dimens.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - 88dp - diff --git a/java/com/android/incallui/incall/impl/res/values-h580dp/styles.xml b/java/com/android/incallui/incall/impl/res/values-h580dp/styles.xml deleted file mode 100644 index b58ef4819..000000000 --- a/java/com/android/incallui/incall/impl/res/values-h580dp/styles.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - diff --git a/java/com/android/incallui/incall/impl/res/values-h600dp/dimens.xml b/java/com/android/incallui/incall/impl/res/values-h600dp/dimens.xml new file mode 100644 index 000000000..904aed235 --- /dev/null +++ b/java/com/android/incallui/incall/impl/res/values-h600dp/dimens.xml @@ -0,0 +1,20 @@ + + + + + 88dp + diff --git a/java/com/android/incallui/incall/impl/res/values-h650dp/styles.xml b/java/com/android/incallui/incall/impl/res/values-h650dp/styles.xml new file mode 100644 index 000000000..b58ef4819 --- /dev/null +++ b/java/com/android/incallui/incall/impl/res/values-h650dp/styles.xml @@ -0,0 +1,24 @@ + + + + + + + diff --git a/java/com/android/incallui/incall/impl/res/values-hi/strings.xml b/java/com/android/incallui/incall/impl/res/values-hi/strings.xml index 6a7538dea..39e6e6b6d 100644 --- a/java/com/android/incallui/incall/impl/res/values-hi/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-hi/strings.xml @@ -1,18 +1,33 @@ + + "वीडियो कॉल" "होल्ड करें" "कॉल जोड़ें" "म्यूट करें" + "कॉल समाप्त करें" "कीपैड" - "स्‍पीकर" ", चालू है" ", बंद है" "एक बनाएं" "प्रबंधित करें" "कॉलर प्रबंधित करें" "स्वैप करें" - "ध्वनि" "नोट भेज दिया गया है" diff --git a/java/com/android/incallui/incall/impl/res/values-hr/strings.xml b/java/com/android/incallui/incall/impl/res/values-hr/strings.xml index fc431b33b..e440028d8 100644 --- a/java/com/android/incallui/incall/impl/res/values-hr/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-hr/strings.xml @@ -1,18 +1,33 @@ + + "Videopoziv" "Pauziraj" "Dodaj poziv" "Isklj. zvuk" + "Prekini poziv" "Tipkovnica" - "Zvučnik" ", uključeno" ", isključeno" "Spoji" "Upravljanje" "Upravljaj pozivateljima" "Zamijeni" - "Zvuk" "Bilješka je poslana" diff --git a/java/com/android/incallui/incall/impl/res/values-hu/strings.xml b/java/com/android/incallui/incall/impl/res/values-hu/strings.xml index 194c348d9..e63ce5946 100644 --- a/java/com/android/incallui/incall/impl/res/values-hu/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-hu/strings.xml @@ -1,18 +1,33 @@ + + "Videohívás" "Várakoztatás" "Hívás felv." "Némítás" + "Hívás vége" "Billentyűzet" - "Hangszóró" ", be" ", ki" "Egyesítés" "Kezelés" "Hívók kezelése" "Csere" - "Hang" "Üzenet elküldve" diff --git a/java/com/android/incallui/incall/impl/res/values-hy/strings.xml b/java/com/android/incallui/incall/impl/res/values-hy/strings.xml index 0e8054ec9..ce395e70c 100644 --- a/java/com/android/incallui/incall/impl/res/values-hy/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-hy/strings.xml @@ -1,18 +1,33 @@ + + "Տեսազանգ" "Պահել զանգը" "Ավելացնել զանգ" "Անջատել" + "Ավարտել զանգը" "Ստեղնաշար" - "Բարձրախոս" ", միացած է" ", անջատած է" "Միավորել" "Կառավարել" "Զանգողների կառավարում" "Փոխարկել" - "Ձայն" "Գրառումն ուղարկվեց" diff --git a/java/com/android/incallui/incall/impl/res/values-in/strings.xml b/java/com/android/incallui/incall/impl/res/values-in/strings.xml index f429cb4b7..e9d738a36 100644 --- a/java/com/android/incallui/incall/impl/res/values-in/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-in/strings.xml @@ -1,18 +1,33 @@ + + "Video call" "Tahan" "Tambahkan panggilan" "Bisukan" + "Akhiri panggilan" "Keypad" - "Speaker" ", aktif" ", Nonaktif" "Gabungkan" "Kelola" "Kelola penelepon" "Tukar" - "Suara" "Catatan telah dikirim" diff --git a/java/com/android/incallui/incall/impl/res/values-is/strings.xml b/java/com/android/incallui/incall/impl/res/values-is/strings.xml index 9c3bf89bf..f262e3f9f 100644 --- a/java/com/android/incallui/incall/impl/res/values-is/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-is/strings.xml @@ -1,18 +1,33 @@ + + "Myndsímtal" "Setja í bið" "Bæta við" "Hljóð af" + "Ljúka" "Talnaborð" - "Hátalari" ", kveikt" ", slökkt" "Sameina" "Stjórna" "Hafa umsjón með hringjendum" "Skipta milli" - "Hljóð" "Glósa send" diff --git a/java/com/android/incallui/incall/impl/res/values-it/strings.xml b/java/com/android/incallui/incall/impl/res/values-it/strings.xml index 1cfb0be67..f29a70260 100644 --- a/java/com/android/incallui/incall/impl/res/values-it/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-it/strings.xml @@ -1,18 +1,33 @@ + + "Videochiamata" "In attesa" "Aggiungi chiamata" "Disattiva" + "Termina chiamata" "Tastierino" - "Altoparlante" ", attivo" ", non attivo" "Unisci" "Gestisci" "Gestisci chiamanti" "Scambia" - "Audio" "Nota inviata" diff --git a/java/com/android/incallui/incall/impl/res/values-iw/strings.xml b/java/com/android/incallui/incall/impl/res/values-iw/strings.xml index 2426fc868..bf08e3b06 100644 --- a/java/com/android/incallui/incall/impl/res/values-iw/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-iw/strings.xml @@ -1,18 +1,33 @@ + + "שיחת וידאו" "המתנה" "הוסף שיחה" "השתק" + "סיום השיחה" "לוח חיוג" - "רמקול" ", מופעל" ", מושבת" "מזג" "נהל" "ניהול המתקשרים" "החלף" - "צלילים" "ההערה נשלחה" diff --git a/java/com/android/incallui/incall/impl/res/values-ja/strings.xml b/java/com/android/incallui/incall/impl/res/values-ja/strings.xml index 9e313a072..b78ee202e 100644 --- a/java/com/android/incallui/incall/impl/res/values-ja/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-ja/strings.xml @@ -1,18 +1,33 @@ + + "ビデオ通話" "保留" "通話を追加" "ミュート" + "通話を終了" "キーパッド" - "スピーカー" "がオンです" "がオフです" "統合" "管理" "発信者を管理" "切り替え" - "音声" "メモを送信しました" diff --git a/java/com/android/incallui/incall/impl/res/values-ka/strings.xml b/java/com/android/incallui/incall/impl/res/values-ka/strings.xml index d33af5a46..f6926f39c 100644 --- a/java/com/android/incallui/incall/impl/res/values-ka/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-ka/strings.xml @@ -1,18 +1,33 @@ + + "ვიდეოზარი" "შეყოვნება" "ზარის დამატ." "დადუმება" + "ზარის დასრ." "კლავიატურა" - "სპიკერი" ", ჩართულია" ", გამორთულია" "გაერთიანება" "მართვა" "აბონენტების მართვა" "შენაცვლება" - "ხმა" "ჩანიშვნა გაიგზავნა" diff --git a/java/com/android/incallui/incall/impl/res/values-kk/strings.xml b/java/com/android/incallui/incall/impl/res/values-kk/strings.xml index db9c4f6ca..8da9982d0 100644 --- a/java/com/android/incallui/incall/impl/res/values-kk/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-kk/strings.xml @@ -1,18 +1,33 @@ + + "Бейне қоңырау" "Күттіру" "Қоңырау қосу" "Дыбысын өшіру" + "Қоңырауды аяқтау" "Пернетақта" - "Динамик" ", қосулы" ", өшірулі" "Біріктіру" "Басқару" "Қоңырау шалушыларды басқару" "Ауыстыру" - "Дыбыс" "Ескертпе жіберілді" diff --git a/java/com/android/incallui/incall/impl/res/values-km/strings.xml b/java/com/android/incallui/incall/impl/res/values-km/strings.xml index 6596bdf0c..88e356a41 100644 --- a/java/com/android/incallui/incall/impl/res/values-km/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-km/strings.xml @@ -1,18 +1,33 @@ + + "ហៅ​ជា​វីដេអូ" "រង់ចាំ" "បន្ថែម​ការ​ហៅ" "បិទ​សំឡេង" + "បញ្ចប់​ការ​ហៅ" "បន្ទះ​​ចុច​លេខ" - "ឧបករណ៍​បំពង​សំឡេង" ", បាន​បើក" ", បានបិទ" "បញ្ចូលគ្នា" "គ្រប់គ្រង" "គ្រប់គ្រងអ្នក​ហៅ" "ប្ដូរ" - "សំឡេង" "បានផ្ញើចំណាំ" diff --git a/java/com/android/incallui/incall/impl/res/values-kn/strings.xml b/java/com/android/incallui/incall/impl/res/values-kn/strings.xml index c03ec09fa..ad29b6d36 100644 --- a/java/com/android/incallui/incall/impl/res/values-kn/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-kn/strings.xml @@ -1,18 +1,33 @@ + + "ವೀಡಿಯೊ ಕರೆ" "ಹೋಲ್ಡ್‌‌ ಮಾಡು" "ಕರೆಯನ್ನು ಸೇರಿಸಿ" "ಮ್ಯೂಟ್ ಮಾಡಿ" + "ಕರೆ ಅಂತ್ಯಗೊಳಿಸಿ" "ಕೀಪ್ಯಾಡ್‌" - "ಸ್ಪೀಕರ್‌" ", ಆನ್ ಆಗಿದೆ" ", ಆಫ್ ಆಗಿದೆ" "ವಿಲೀನಗೊಳಿಸು" "ನಿರ್ವಹಿಸು" "ಕರೆದಾತರನ್ನು ನಿರ್ವಹಿಸಿ" "ಸ್ವ್ಯಾಪ್‌ ಮಾಡು" - "ಧ್ವನಿ" "ಟಿಪ್ಪಣಿ ಕಳುಹಿಸಲಾಗಿದೆ" diff --git a/java/com/android/incallui/incall/impl/res/values-ko/strings.xml b/java/com/android/incallui/incall/impl/res/values-ko/strings.xml index e701e772f..f9bb20f8b 100644 --- a/java/com/android/incallui/incall/impl/res/values-ko/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-ko/strings.xml @@ -1,18 +1,33 @@ + + "화상 통화" "대기" "통화 추가" "음소거" + "통화 종료" "키패드" - "스피커" ", 켜짐" ", 꺼짐" "병합" "관리" "발신자 관리" "전환" - "소리" "메모가 전송되었습니다." diff --git a/java/com/android/incallui/incall/impl/res/values-ky/strings.xml b/java/com/android/incallui/incall/impl/res/values-ky/strings.xml index e51d4c582..f00264dbe 100644 --- a/java/com/android/incallui/incall/impl/res/values-ky/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-ky/strings.xml @@ -1,18 +1,33 @@ + + "Видео чалуу" "Күттүрүү" "Чалууну кошуу" "Үнүн өчүрүү" + "Чалууну бүтүрүү" "Ном. тергич" - "Катуу сүйлөткүч" ", күйүк" ", өчүк" "Бириктирүү" "Башкаруу" "Чалуучуларды башкаруу" "Алмаштыруу" - "Добуш" "Билдирүү жөнөтүлдү" diff --git a/java/com/android/incallui/incall/impl/res/values-lo/strings.xml b/java/com/android/incallui/incall/impl/res/values-lo/strings.xml index 52de3ffcc..2382f3241 100644 --- a/java/com/android/incallui/incall/impl/res/values-lo/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-lo/strings.xml @@ -1,18 +1,33 @@ + + "ໂທດ້ວຍວິດີໂອ" "ພັກສາຍຊົ່ວຄາວ" "ເພີ່ມການໂທ" "ປີດສຽງ" + "ວາງສາຍ" "ແປ້ນກົດ" - "ລຳໂພງ" ", ເປີດຢູ່" ", ປິດຢູ່" "ຮວມສາຍ" "ຈັດການ" "ຈັດການຜູ້ໂທ" "ສະຫຼັບສາຍ" - "ສຽງ" "ສົ່ງບັນທຶກແລ້ວ" diff --git a/java/com/android/incallui/incall/impl/res/values-lt/strings.xml b/java/com/android/incallui/incall/impl/res/values-lt/strings.xml index 4cd0356f3..1a10884cb 100644 --- a/java/com/android/incallui/incall/impl/res/values-lt/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-lt/strings.xml @@ -1,18 +1,33 @@ + + "Vaizdo skambutis" "Sulaikyti" "Pr. skambutį" "Nutildyti" + "Baig. skamb." "Klaviatūra" - "Garsiakalbis" ", įjungtas" ", išjungtas" "Sujungti" "Tvarkyti" "Tvarkyti skambintojus" "Sukeisti" - "Garsas" "Užrašas išsiųstas" diff --git a/java/com/android/incallui/incall/impl/res/values-lv/strings.xml b/java/com/android/incallui/incall/impl/res/values-lv/strings.xml index 48f9ae032..c19e7c0ae 100644 --- a/java/com/android/incallui/incall/impl/res/values-lv/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-lv/strings.xml @@ -1,18 +1,33 @@ + + "Videozvans" "Aizturēt" "Pievienot zvanu" "Izslēgt" + "Beigt zvanu" "Cipartast." - "Skaļrunis" ", ieslēgts" ", izslēgts" "Apvienot" "Pārvaldīt" "Pārvaldīt zvanītājus" "Pārslēgt" - "Skaņa" "Piezīme nosūtīta" diff --git a/java/com/android/incallui/incall/impl/res/values-mk/strings.xml b/java/com/android/incallui/incall/impl/res/values-mk/strings.xml index 5a61de5d3..610a30803 100644 --- a/java/com/android/incallui/incall/impl/res/values-mk/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-mk/strings.xml @@ -1,18 +1,33 @@ + + "Видеоповик" "На чекање" "Додај повик" "Исклучи звук" + "Заврши повик" "Тастатура" - "Звучник" ", е вклучен" ", е исклучен" "Спои" "Управувај" "Управувајте со повикувачите" "Замени" - "Звук" "Белешката е испратена" diff --git a/java/com/android/incallui/incall/impl/res/values-ml/strings.xml b/java/com/android/incallui/incall/impl/res/values-ml/strings.xml index 00586ffa7..83c2989f0 100644 --- a/java/com/android/incallui/incall/impl/res/values-ml/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-ml/strings.xml @@ -1,18 +1,33 @@ + + "വീഡിയോ കോള്‍" "ഹോള്‍ഡുചെയ്യുക" "കോൾ ചേർക്കുക" "മ്യൂട്ടുചെയ്യുക" + "കോള്‍ അവസാനിപ്പിക്കൂ" "കീപാഡ്" - "സ്പീക്കർ" ", ഓണാണ്" ", ഓഫാണ്" "ലയിപ്പിക്കുക" "മാനേജുചെയ്യുക" "കോൾ ചെയ്യുന്നവരെ മാനേജുചെയ്യുക" "സ്വാപ്പുചെയ്യുക" - "ശബ്‌ദം" "കുറിപ്പ് അയച്ചു" diff --git a/java/com/android/incallui/incall/impl/res/values-mn/strings.xml b/java/com/android/incallui/incall/impl/res/values-mn/strings.xml index 085a405b0..9427d86d2 100644 --- a/java/com/android/incallui/incall/impl/res/values-mn/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-mn/strings.xml @@ -1,18 +1,33 @@ + + "Видео хурал" "Саатуулах" "Дуудлага нэмэх" "Дууг хаах" + "Дуудлагыг таслах" "Товчлуур" - "Чанга яригч" ", асаатай" ", унтраатай" "Нэгтгэх" "Удирдах" "Залгагчдыг удирдах" "Солих" - "Дуу" "Тэмдэглэлийг илгээсэн" diff --git a/java/com/android/incallui/incall/impl/res/values-mr/strings.xml b/java/com/android/incallui/incall/impl/res/values-mr/strings.xml index 841923352..194c192bd 100644 --- a/java/com/android/incallui/incall/impl/res/values-mr/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-mr/strings.xml @@ -1,18 +1,33 @@ + + "व्हिडिओ कॉल" "होल्ड करा" "कॉल जोडा" "नि:शब्द करा" + "कॉल समाप्त करा" "कीपॅड" - "स्पीकर" ", सुरू आहे" ", बंद आहे" "विलीन करा" "व्यवस्थापित करा" "कॉलर व्यवस्थापित करा" "अदलाबदल करा" - "ध्वनी" "टीप पाठविली" diff --git a/java/com/android/incallui/incall/impl/res/values-ms/strings.xml b/java/com/android/incallui/incall/impl/res/values-ms/strings.xml index c9db8325e..a918dedb4 100644 --- a/java/com/android/incallui/incall/impl/res/values-ms/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-ms/strings.xml @@ -1,18 +1,33 @@ + + "Pgln video" "Tunda" "Tambah pgln" "Redam" + "Tamatkn pgln" "Pad kekunci" - "Pmbsr suara" ", dihidupkan" ", Dimatikan" "Gabung" "Urus" "Urus pemanggil" "Silih" - "Bunyi" "Nota dihantar" diff --git a/java/com/android/incallui/incall/impl/res/values-my/strings.xml b/java/com/android/incallui/incall/impl/res/values-my/strings.xml index e0bfb8c71..80070297b 100644 --- a/java/com/android/incallui/incall/impl/res/values-my/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-my/strings.xml @@ -1,18 +1,33 @@ + + "ဗီဒီယိုခေါ်ဆိုမှု" "ခဏရပ်ထားရန်" "ထပ်ခေါ်ရန်" "အသံပိတ်ရန်" + "ဖုန်းချရန်" "ခလုတ်ခုံ" - "စပီကာ" "၊ ပွင့်နေသည်" "၊ ပိတ်နေသည်" "ပေါင်းရန်" "စီမံရန်" "ခေါ်ဆိုသူများကို စီမံခန့်ခွဲရန်" "ဖလှယ်ရန်" - "အသံ" "မှတ်စုပို့ပြီးပါပြီ" diff --git a/java/com/android/incallui/incall/impl/res/values-nb/strings.xml b/java/com/android/incallui/incall/impl/res/values-nb/strings.xml index 75200869c..704384ea0 100644 --- a/java/com/android/incallui/incall/impl/res/values-nb/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-nb/strings.xml @@ -1,18 +1,33 @@ + + "Videosamtale" "Sett på vent" "Nytt anrop" "Ignorer" + "Avslutt samtalen" "Tastatur" - "Høyttaler" "er på" "er av" "Slå sammen" "Administrer" "Håndter innringere" "Bytt" - "Lyd" "Notatet er sendt" diff --git a/java/com/android/incallui/incall/impl/res/values-ne/strings.xml b/java/com/android/incallui/incall/impl/res/values-ne/strings.xml index 6bcfb6dd2..beffa3e74 100644 --- a/java/com/android/incallui/incall/impl/res/values-ne/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-ne/strings.xml @@ -1,18 +1,33 @@ + + "भिडियो कल" "होल्ड गर्ने" "कल थप्नुहोस्" "म्यूट गर्ने" + "कल अन्त्य गर्ने" "किप्याड" - "स्पिकर" ", खुला छ" ", बन्द छ" "मर्ज गर्ने" "प्रबन्ध गर्ने" "कल गर्ने व्यक्तिहरूलाई व्यवस्थित गर्नुहोस्" "साट्नुहोस्" - "आवाज" "टिपोट पठाइयो" diff --git a/java/com/android/incallui/incall/impl/res/values-nl/strings.xml b/java/com/android/incallui/incall/impl/res/values-nl/strings.xml index 63f1ebd5d..e3c919e1a 100644 --- a/java/com/android/incallui/incall/impl/res/values-nl/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-nl/strings.xml @@ -1,18 +1,33 @@ + + "Videogespr." "In wacht" "Oproep toev." "Dempen" + "Oproep beëindigen" "Toetsenblok" - "Luidspreker" ", is aan" ", is uit" "Samenvoegen" "Beheren" "Bellers beheren" "Wisselen" - "Geluid" "Notitie verzonden" diff --git a/java/com/android/incallui/incall/impl/res/values-no/strings.xml b/java/com/android/incallui/incall/impl/res/values-no/strings.xml index 75200869c..704384ea0 100644 --- a/java/com/android/incallui/incall/impl/res/values-no/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-no/strings.xml @@ -1,18 +1,33 @@ + + "Videosamtale" "Sett på vent" "Nytt anrop" "Ignorer" + "Avslutt samtalen" "Tastatur" - "Høyttaler" "er på" "er av" "Slå sammen" "Administrer" "Håndter innringere" "Bytt" - "Lyd" "Notatet er sendt" diff --git a/java/com/android/incallui/incall/impl/res/values-pa/strings.xml b/java/com/android/incallui/incall/impl/res/values-pa/strings.xml index 10a2865a6..d7e74ed83 100644 --- a/java/com/android/incallui/incall/impl/res/values-pa/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-pa/strings.xml @@ -1,18 +1,33 @@ + + "ਵੀਡੀਓ ਕਾਲ" "ਰੋਕ ਕੇ ਰੱਖੋ" "ਕਾਲ ਸ਼ਾਮਲ ਕਰੋ" "ਮਿਊਟ ਕਰੋ" + "ਕਾਲ ਖਤਮ ਕਰੋ" "ਕੀਪੈਡ" - "ਸਪੀਕਰ" ", ਚਾਲੂ ਹੈ" ", ਬੰਦ ਹੈ" "ਰਲਗੱਡ ਕਰੋ" "ਪ੍ਰਬੰਧਨ ਕਰੋ" "ਕਾਲਰਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ" "ਅਦਲੋ-ਬਦਲੋ" - "ਧੁਨੀ" "ਨੋਟ-ਕਥਨ ਭੇਜਿਆ ਗਿਆ" diff --git a/java/com/android/incallui/incall/impl/res/values-pl/strings.xml b/java/com/android/incallui/incall/impl/res/values-pl/strings.xml index 4bf6a5833..9971d7553 100644 --- a/java/com/android/incallui/incall/impl/res/values-pl/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-pl/strings.xml @@ -1,18 +1,33 @@ + + "Rozmowa wid." "Wstrzymaj" "Dodaj poł." "Wycisz" + "Zakończ" "Klawiatura" - "Głośnik" "– włączony" "– wyłączony" "Scal" "Zarządzaj" "Zarządzaj rozmówcami" "Przełącz" - "Dźwięk" "Notatka wysłana" diff --git a/java/com/android/incallui/incall/impl/res/values-pt-rBR/strings.xml b/java/com/android/incallui/incall/impl/res/values-pt-rBR/strings.xml index 7ca6b6b6b..538c20c0b 100644 --- a/java/com/android/incallui/incall/impl/res/values-pt-rBR/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-pt-rBR/strings.xml @@ -1,18 +1,33 @@ + + "Videocham." "Em espera" "Adic chamada" "Desativar" + "Encerrar" "Teclado" - "Alto-falante" "ativado" "desativado" "Mesclar" "Gerenciar" "Gerenciar os autores das chamadas" "Trocar" - "Som" "Nota enviada" diff --git a/java/com/android/incallui/incall/impl/res/values-pt-rPT/strings.xml b/java/com/android/incallui/incall/impl/res/values-pt-rPT/strings.xml index 750e57e37..376ee8443 100644 --- a/java/com/android/incallui/incall/impl/res/values-pt-rPT/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-pt-rPT/strings.xml @@ -1,18 +1,33 @@ + + "Videochamada" "Em espera" "Adic. cham." "Desativ. som" + "Term. cham." "Teclado" - "Altifalante" ", ativado" ", desativado" "Unir" "Gerir" "Gerir autores das chamadas" "Alternar" - "Som" "Nota enviada" diff --git a/java/com/android/incallui/incall/impl/res/values-pt/strings.xml b/java/com/android/incallui/incall/impl/res/values-pt/strings.xml index 7ca6b6b6b..538c20c0b 100644 --- a/java/com/android/incallui/incall/impl/res/values-pt/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-pt/strings.xml @@ -1,18 +1,33 @@ + + "Videocham." "Em espera" "Adic chamada" "Desativar" + "Encerrar" "Teclado" - "Alto-falante" "ativado" "desativado" "Mesclar" "Gerenciar" "Gerenciar os autores das chamadas" "Trocar" - "Som" "Nota enviada" diff --git a/java/com/android/incallui/incall/impl/res/values-ro/strings.xml b/java/com/android/incallui/incall/impl/res/values-ro/strings.xml index 1f93da9be..81dcdf3cc 100644 --- a/java/com/android/incallui/incall/impl/res/values-ro/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-ro/strings.xml @@ -1,18 +1,33 @@ + + "Apel video" "În așteptare" "Încă un apel" "Dezactivați" + "Încheiați" "Tastatură" - "Difuzor" ", e activat" ", dezactivat" "Îmbinați" "Gestionați" "Gestionați apelanții" "Schimbați" - "Sunet" "Nota a fost trimisă" diff --git a/java/com/android/incallui/incall/impl/res/values-ru/strings.xml b/java/com/android/incallui/incall/impl/res/values-ru/strings.xml index 89192c3ae..274f8fff7 100644 --- a/java/com/android/incallui/incall/impl/res/values-ru/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-ru/strings.xml @@ -1,18 +1,33 @@ + + "Видеовызов" "Удерживать" "Добавить вызов" "Выкл. звук" + "Завершить вызов" "Клавиатура" - "Динамик" ", включен" ", отключен" "Объединить" "Управление" "Управление абонентами" "Переключить" - "Звук" "Сообщение отправлено" diff --git a/java/com/android/incallui/incall/impl/res/values-si/strings.xml b/java/com/android/incallui/incall/impl/res/values-si/strings.xml index 209bb77b1..a600c2193 100644 --- a/java/com/android/incallui/incall/impl/res/values-si/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-si/strings.xml @@ -1,18 +1,33 @@ + + "වීඩියෝ ඇමතුම" "රඳවා ගන්න" "ඇමතුම එක් ක." "නිහඬ කරන්න" + "ඇමතුම නිම ක." "යතුරු පුවරුව" - "ස්පීකරය" ", සක්‍රියයි" ", අක්‍රියයි" "ඒකාබද්ධ කර." "කළමනාකරණය ක." "අමතන්නන් කළමනාකරණය කරන්න" "මාරු කරන්න" - "හඬ" "සටහන යවන ලදී" diff --git a/java/com/android/incallui/incall/impl/res/values-sk/strings.xml b/java/com/android/incallui/incall/impl/res/values-sk/strings.xml index 4e06aee32..d74d19e22 100644 --- a/java/com/android/incallui/incall/impl/res/values-sk/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-sk/strings.xml @@ -1,18 +1,33 @@ + + "Videohovor" "Podržať" "Pridať hovor" "Vypnúť zvuk" + "Ukonč. hovor" "Klávesnica" - "Reproduktor" ", je zapnutý" ", je vypnutý" "Zlúčiť" "Spravovať" "Spravovať volajúcich" "Zameniť" - "Zvuk" "Poznámka bola odoslaná" diff --git a/java/com/android/incallui/incall/impl/res/values-sl/strings.xml b/java/com/android/incallui/incall/impl/res/values-sl/strings.xml index 7cdb6c88c..782ce444b 100644 --- a/java/com/android/incallui/incall/impl/res/values-sl/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-sl/strings.xml @@ -1,18 +1,33 @@ + + "Videoklic" "Zadrži" "Dodaj klic" "Izklopi zvok" + "Končaj klic" "Tipkovnica" - "Zvočnik" ", vklopljen" ", izklopljen" "Združi" "Upravljanje" "Upravljanje klicateljev" "Zamenjaj" - "Zvok" "Opomba je poslana" diff --git a/java/com/android/incallui/incall/impl/res/values-sq/strings.xml b/java/com/android/incallui/incall/impl/res/values-sq/strings.xml index 9ba18b5f4..a0fca3668 100644 --- a/java/com/android/incallui/incall/impl/res/values-sq/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-sq/strings.xml @@ -1,18 +1,33 @@ + + "Video tel." "Në pritje" "Shto telef." "Hiqi zërin" + "Mbyll tel." "Blloku i tasteve" - "Altoparlant" ", është aktiv" ", është joaktiv" "Shkri" "Menaxho" "Menaxho telefonuesit" "Shkëmbe" - "Tingulli" "Shënimi u dërgua" diff --git a/java/com/android/incallui/incall/impl/res/values-sr/strings.xml b/java/com/android/incallui/incall/impl/res/values-sr/strings.xml index 56a968453..ec704511b 100644 --- a/java/com/android/incallui/incall/impl/res/values-sr/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-sr/strings.xml @@ -1,18 +1,33 @@ + + "Видео позив" "На чекање" "Додај позив" "Искључи звук" + "Заврши позив" "Тастатура" - "Звучник" ", укључен" ", искључен" "Обједини" "Управљај" "Управљајте позиваоцима" "Замени" - "Звук" "Белешка је послата" diff --git a/java/com/android/incallui/incall/impl/res/values-sv/strings.xml b/java/com/android/incallui/incall/impl/res/values-sv/strings.xml index 27d83b74b..ded45221c 100644 --- a/java/com/android/incallui/incall/impl/res/values-sv/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-sv/strings.xml @@ -1,18 +1,33 @@ + + "Videosamtal" "Parkera" "Lägg t samt." "Ljud av" + "Avsl. samtal" "Knappsats" - "Högtalare" ", är på" ", är av" "Sammanfoga" "Hantera" "Hantera uppringare" "Växla" - "Ljud" "Anteckning skickad" diff --git a/java/com/android/incallui/incall/impl/res/values-sw/strings.xml b/java/com/android/incallui/incall/impl/res/values-sw/strings.xml index 136fe1713..df634f469 100644 --- a/java/com/android/incallui/incall/impl/res/values-sw/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-sw/strings.xml @@ -1,18 +1,33 @@ + + "Hangout ya video" "Shikilia" "Ongeza simu" "Zima maikrofoni" + "Kata simu" "Vitufe vya Simu" - "Spika" ", kimewashwa" ", kimezimwa" "Unganisha" "Dhibiti" "Dhibiti wanaopiga simu" "Badili" - "Sauti" "Dokezo limetumwa" diff --git a/java/com/android/incallui/incall/impl/res/values-ta/strings.xml b/java/com/android/incallui/incall/impl/res/values-ta/strings.xml index 342f8d041..5c94abff4 100644 --- a/java/com/android/incallui/incall/impl/res/values-ta/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-ta/strings.xml @@ -1,18 +1,33 @@ + + "வீடியோ கால்" "ஹோல்டில் வை" "அழைப்பை சேர்" "முடக்கு" + "அழைப்பை முடி" "விசைத்தளம்" - "ஸ்பீக்கர்" ", ஆன்" ", ஆஃப்" "இணை" "நிர்வகி" "அழைப்பாளர்களை நிர்வகிக்கும்" "மாற்று" - "ஒலி" "குறிப்பு அனுப்பப்பட்டது" diff --git a/java/com/android/incallui/incall/impl/res/values-te/strings.xml b/java/com/android/incallui/incall/impl/res/values-te/strings.xml index 004895647..0cb3fb837 100644 --- a/java/com/android/incallui/incall/impl/res/values-te/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-te/strings.xml @@ -1,18 +1,33 @@ + + "వీడియో కాల్" "హోల్డ్ చేయి" "కాల్ జోడించు" "మ్యూట్ చేయి" + "కాల్ ముగించు" "కీప్యాడ్" - "స్పీకర్" ", ఆన్‌లో ఉంది" ", ఆఫ్‌లో ఉంది" "విలీనం చేయి" "నిర్వహించు" "కాలర్‌లను నిర్వహిస్తుంది" "మార్చు" - "శబ్దం" "గమనిక పంపబడింది" diff --git a/java/com/android/incallui/incall/impl/res/values-th/strings.xml b/java/com/android/incallui/incall/impl/res/values-th/strings.xml index a74028842..0929cfc23 100644 --- a/java/com/android/incallui/incall/impl/res/values-th/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-th/strings.xml @@ -1,18 +1,33 @@ + + "แฮงเอาท์วิดีโอ" "พักสาย" "เพิ่มการโทร" "ปิดเสียง" + "วางสาย" "ปุ่มกด" - "ลำโพง" "เปิดอยู่" "ปิดอยู่" "รวม" "จัดการ" "จัดการผู้โทร" "สลับ" - "เสียง" "ส่งโน้ตแล้ว" diff --git a/java/com/android/incallui/incall/impl/res/values-tl/strings.xml b/java/com/android/incallui/incall/impl/res/values-tl/strings.xml index 46ff79731..1ac2ef88c 100644 --- a/java/com/android/incallui/incall/impl/res/values-tl/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-tl/strings.xml @@ -1,18 +1,33 @@ + + "Video call" "I-hold" "Mag-add: tawag" "I-mute" + "Tapusin ang tawag" "Keypad" - "Speaker" ",ay On" ", ay Off" "I-merge" "Pamahalaan" "Pamahalaan ang mga tumatawag" "Pagpalitin" - "Tunog" "Naipadala ang tala" diff --git a/java/com/android/incallui/incall/impl/res/values-tr/strings.xml b/java/com/android/incallui/incall/impl/res/values-tr/strings.xml index 89ca3302f..241b69429 100644 --- a/java/com/android/incallui/incall/impl/res/values-tr/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-tr/strings.xml @@ -1,18 +1,33 @@ + + "Görü. görüş." "Beklemeye al" "Çağrı ekle" "Sesi kapat" + "Çğryı sonldr" "Tuş takımı" - "Hoparlör" ", Açık" ", Kapalı" "Birleştir" "Yönet" "Arayanları yönetin" "Değiştir" - "Ses" "Not gönderildi" diff --git a/java/com/android/incallui/incall/impl/res/values-uk/strings.xml b/java/com/android/incallui/incall/impl/res/values-uk/strings.xml index 516bcb757..1821556fa 100644 --- a/java/com/android/incallui/incall/impl/res/values-uk/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-uk/strings.xml @@ -1,18 +1,33 @@ + + "Відеодзвінок" "Утримувати" "Дод. виклик" "Без звуку" + "Завер. викл." "Клавіатура" - "Динамік" ", увімкнено" ", вимкнено" "Об’єднати" "Керувати" "Керувати абонентами" "Поміняти" - "Звук" "Нотатку надіслано" diff --git a/java/com/android/incallui/incall/impl/res/values-ur/strings.xml b/java/com/android/incallui/incall/impl/res/values-ur/strings.xml index 53ba19031..fed0af6c2 100644 --- a/java/com/android/incallui/incall/impl/res/values-ur/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-ur/strings.xml @@ -1,18 +1,33 @@ + + "ویڈیو کال" "ہولڈ کریں" "کال شامل کریں" "خاموش کریں" + "کال ختم کریں" "کی پیڈ" - "اسپیکر" "، آن ہے" "، آف ہے" "ضم کریں" "نظم کریں" "کالرز کا نظم کریں" "تبادلہ کریں" - "آواز" "نوٹ بھیج دیا گیا" diff --git a/java/com/android/incallui/incall/impl/res/values-uz/strings.xml b/java/com/android/incallui/incall/impl/res/values-uz/strings.xml index 881848965..7d6af27b2 100644 --- a/java/com/android/incallui/incall/impl/res/values-uz/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-uz/strings.xml @@ -1,18 +1,33 @@ + + "Video qo‘n." "Pauza" "Chaqiruv" "Ovozsiz" + "Tugatish" "Klaviatura" - "Karnay" ", yoniq" ", o‘chiq" - "Birlashtir." + "Birlashtirish" "Boshqarish" "Qo‘ng‘iroq qiluvchilarni boshqarish" "Almashish" - "Ovoz" "Qayd yuborildi" diff --git a/java/com/android/incallui/incall/impl/res/values-vi/strings.xml b/java/com/android/incallui/incall/impl/res/values-vi/strings.xml index 29f85efab..42e320a7a 100644 --- a/java/com/android/incallui/incall/impl/res/values-vi/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-vi/strings.xml @@ -1,18 +1,33 @@ + + "Gọi điện video" "Giữ" "Thêm cuộc gọi" "Tắt tiếng" + "Kết thúc cuộc gọi" "Bàn phím" - "Loa" ", đang bật" ", đang tắt" "Hợp nhất" "Quản lý" "Quản lý người gọi" "Hoán đổi" - "Âm thanh" "Đã gửi ghi chú" diff --git a/java/com/android/incallui/incall/impl/res/values-w260dp-h520dp/dimens.xml b/java/com/android/incallui/incall/impl/res/values-w260dp-h520dp/dimens.xml deleted file mode 100644 index e73eb934c..000000000 --- a/java/com/android/incallui/incall/impl/res/values-w260dp-h520dp/dimens.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - 16dp - 16dp - 64dp - 92dp - diff --git a/java/com/android/incallui/incall/impl/res/values-w260dp-h580dp/dimens.xml b/java/com/android/incallui/incall/impl/res/values-w260dp-h580dp/dimens.xml new file mode 100644 index 000000000..834ea2f30 --- /dev/null +++ b/java/com/android/incallui/incall/impl/res/values-w260dp-h580dp/dimens.xml @@ -0,0 +1,23 @@ + + + + + 16dp + 16dp + 64dp + 92dp + diff --git a/java/com/android/incallui/incall/impl/res/values-w300dp-h540dp/dimens.xml b/java/com/android/incallui/incall/impl/res/values-w300dp-h540dp/dimens.xml deleted file mode 100644 index 502ae72dc..000000000 --- a/java/com/android/incallui/incall/impl/res/values-w300dp-h540dp/dimens.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - 32dp - 32dp - diff --git a/java/com/android/incallui/incall/impl/res/values-w300dp-h620dp/dimens.xml b/java/com/android/incallui/incall/impl/res/values-w300dp-h620dp/dimens.xml new file mode 100644 index 000000000..c7ac35efc --- /dev/null +++ b/java/com/android/incallui/incall/impl/res/values-w300dp-h620dp/dimens.xml @@ -0,0 +1,21 @@ + + + + + 32dp + 32dp + diff --git a/java/com/android/incallui/incall/impl/res/values-zh-rCN/strings.xml b/java/com/android/incallui/incall/impl/res/values-zh-rCN/strings.xml index ec6404569..f0cca9060 100644 --- a/java/com/android/incallui/incall/impl/res/values-zh-rCN/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-zh-rCN/strings.xml @@ -1,18 +1,33 @@ + + "视频通话" "保持" "添加通话" "静音" + "结束通话" "拨号键盘" - "免提" ",已开启" ",已关闭" "合并" "管理" "管理来电者" "切换" - "声音" "已发送备注" diff --git a/java/com/android/incallui/incall/impl/res/values-zh-rHK/strings.xml b/java/com/android/incallui/incall/impl/res/values-zh-rHK/strings.xml index 63cd6d8c8..c38ef35a0 100644 --- a/java/com/android/incallui/incall/impl/res/values-zh-rHK/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-zh-rHK/strings.xml @@ -1,18 +1,33 @@ + + "視像通話" "保留" "新增通話" "靜音" + "結束通話" "小鍵盤" - "揚聲器" ",已開啟" ",已關閉" "合併" "管理" "管理來電者" "切換" - "音效" "已傳送筆記" diff --git a/java/com/android/incallui/incall/impl/res/values-zh-rTW/strings.xml b/java/com/android/incallui/incall/impl/res/values-zh-rTW/strings.xml index be3103ba6..c04b8309e 100644 --- a/java/com/android/incallui/incall/impl/res/values-zh-rTW/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-zh-rTW/strings.xml @@ -1,18 +1,33 @@ + + "視訊通話" "保留" "新增通話" "靜音" + "結束通話" "撥號鍵盤" - "擴音模式" ",已開啟" ",已關閉" "合併" "管理" "管理來電者" "切換" - "音訊" "備註已送出" diff --git a/java/com/android/incallui/incall/impl/res/values-zu/strings.xml b/java/com/android/incallui/incall/impl/res/values-zu/strings.xml index df3f79484..a23a1d5e3 100644 --- a/java/com/android/incallui/incall/impl/res/values-zu/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values-zu/strings.xml @@ -1,18 +1,33 @@ + + "Ikholi yevidiyo ye-Hangout" "Bamba" "Engeza ikholi" "Thulisa" + "Qeda ikholi" "Ikhiphedi" - "Isipikha" ", ivuliwe" ", ivaliwe" "Hlanganisa" "Phatha" "Phatha abashayi" "Shintsha" - "Umsindo" "Inothi lithunyelwe" diff --git a/java/com/android/incallui/incall/impl/res/values/strings.xml b/java/com/android/incallui/incall/impl/res/values/strings.xml index 054ca9687..2b30dfa53 100644 --- a/java/com/android/incallui/incall/impl/res/values/strings.xml +++ b/java/com/android/incallui/incall/impl/res/values/strings.xml @@ -1,4 +1,19 @@ + Mute - - Keypad + End call - - Speaker + Keypad , is on @@ -45,12 +60,9 @@ [CHAR LIMIT=12] --> Swap - - Sound Note sent - \ No newline at end of file + diff --git a/java/com/android/incallui/incall/protocol/PrimaryCallState.java b/java/com/android/incallui/incall/protocol/PrimaryCallState.java index 2ae6a18e5..26dd3887a 100644 --- a/java/com/android/incallui/incall/protocol/PrimaryCallState.java +++ b/java/com/android/incallui/incall/protocol/PrimaryCallState.java @@ -44,6 +44,7 @@ public class PrimaryCallState { public final boolean isVoiceMailNumber; public final boolean isRemotelyHeld; public final boolean isBusinessNumber; + public final boolean supportsCallOnHold; // TODO: Convert to autovalue. b/34502119 public static PrimaryCallState createEmptyPrimaryCallState() { @@ -67,7 +68,8 @@ public class PrimaryCallState { 0, false /* isVoiceMailNumber */, false /* isRemotelyHeld */, - false /* isBusinessNumber */); + false /* isBusinessNumber */, + true /* supportsCallOnHold */); } public PrimaryCallState( @@ -90,7 +92,8 @@ public class PrimaryCallState { long connectTimeMillis, boolean isVoiceMailNumber, boolean isRemotelyHeld, - boolean isBusinessNumber) { + boolean isBusinessNumber, + boolean supportsCallOnHold) { this.state = state; this.isVideoCall = isVideoCall; this.sessionModificationState = sessionModificationState; @@ -111,6 +114,7 @@ public class PrimaryCallState { this.isVoiceMailNumber = isVoiceMailNumber; this.isRemotelyHeld = isRemotelyHeld; this.isBusinessNumber = isBusinessNumber; + this.supportsCallOnHold = supportsCallOnHold; } @Override diff --git a/java/com/android/incallui/incall/protocol/PrimaryInfo.java b/java/com/android/incallui/incall/protocol/PrimaryInfo.java index c1709501d..761dd9a81 100644 --- a/java/com/android/incallui/incall/protocol/PrimaryInfo.java +++ b/java/com/android/incallui/incall/protocol/PrimaryInfo.java @@ -104,13 +104,14 @@ public class PrimaryInfo { return String.format( Locale.US, "PrimaryInfo, number: %s, name: %s, location: %s, label: %s, " - + "photo: %s, photoType: %d, isPhotoVisible: %b", + + "photo: %s, photoType: %d, isPhotoVisible: %b, MultimediaData: %s", LogUtil.sanitizePhoneNumber(number), LogUtil.sanitizePii(name), LogUtil.sanitizePii(location), label, photo, photoType, - isContactPhotoShown); + isContactPhotoShown, + multimediaData); } } diff --git a/java/com/android/incallui/res/anim/on_going_call.xml b/java/com/android/incallui/res/anim/on_going_call.xml deleted file mode 100644 index 3a2e2ba1a..000000000 --- a/java/com/android/incallui/res/anim/on_going_call.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/java/com/android/incallui/res/drawable-hdpi/img_conference.png b/java/com/android/incallui/res/drawable-hdpi/img_conference.png deleted file mode 100644 index 3d9f683a5..000000000 Binary files a/java/com/android/incallui/res/drawable-hdpi/img_conference.png and /dev/null differ diff --git a/java/com/android/incallui/res/drawable-mdpi/img_conference.png b/java/com/android/incallui/res/drawable-mdpi/img_conference.png deleted file mode 100644 index 0694dbd55..000000000 Binary files a/java/com/android/incallui/res/drawable-mdpi/img_conference.png and /dev/null differ diff --git a/java/com/android/incallui/res/drawable-xhdpi/img_conference.png b/java/com/android/incallui/res/drawable-xhdpi/img_conference.png deleted file mode 100644 index b0dbcc2dc..000000000 Binary files a/java/com/android/incallui/res/drawable-xhdpi/img_conference.png and /dev/null differ diff --git a/java/com/android/incallui/res/drawable-xxhdpi/img_conference.png b/java/com/android/incallui/res/drawable-xxhdpi/img_conference.png deleted file mode 100644 index a8dba5ed0..000000000 Binary files a/java/com/android/incallui/res/drawable-xxhdpi/img_conference.png and /dev/null differ diff --git a/java/com/android/incallui/res/drawable-xxxhdpi/img_conference.png b/java/com/android/incallui/res/drawable-xxxhdpi/img_conference.png deleted file mode 100644 index eb42b5552..000000000 Binary files a/java/com/android/incallui/res/drawable-xxxhdpi/img_conference.png and /dev/null differ diff --git a/java/com/android/incallui/res/drawable/img_conference_automirrored.xml b/java/com/android/incallui/res/drawable/img_conference_automirrored.xml deleted file mode 100644 index 78b2876bc..000000000 --- a/java/com/android/incallui/res/drawable/img_conference_automirrored.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - \ No newline at end of file diff --git a/java/com/android/incallui/res/drawable/on_going_call.xml b/java/com/android/incallui/res/drawable/on_going_call.xml new file mode 100644 index 000000000..438ba8273 --- /dev/null +++ b/java/com/android/incallui/res/drawable/on_going_call.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + diff --git a/java/com/android/incallui/res/values-af/strings.xml b/java/com/android/incallui/res/values-af/strings.xml index 5dacaaa8d..7d260c337 100644 --- a/java/com/android/incallui/res/values-af/strings.xml +++ b/java/com/android/incallui/res/values-af/strings.xml @@ -33,8 +33,8 @@ "Gemiste oproep vanaf %s" "Oproep aan die gang" "Voortdurende werkoproep" - "Voortdurende Wi-Fi-oproep" - "Voortdurende Wi-Fi-werkoproep" + "Voortdurende Wi-Fi-oproep" + "Voortdurende Wi-Fi-werkoproep" "Hou aan" "Inkomende oproep" "Inkomende oproep met foto" @@ -55,8 +55,8 @@ "Belangrike inkomende oproep met foto, boodskap en ligging" "Belangrike inkomende oproep met aanhegsels" "Inkomende werkoproep" - "Inkomende Wi-Fi-oproep" - "Inkomende Wi-Fi-werkoproep" + "Inkomende Wi-Fi-oproep" + "Inkomende Wi-Fi-werkoproep" "Inkomende verdagte strooipos-oproep" "Inkomende videoversoek" "Geen diens nie" @@ -73,7 +73,7 @@ "Neem video-oproep" "Om \'n oproep te maak, skakel eers vliegtuigmodus af." "Nie geregistreer op netwerk nie." - "Sellulêre netwerk nie beskikbaar nie." + "Mobiele netwerk nie beskikbaar nie." "Voer \'n geldige nommer in om \'n oproep te maak." "Kan nie bel nie." "Begin MMI-volgorde…" @@ -134,8 +134,8 @@ "Beëindig oproep" "Konferensie-oproep" "Besig met oproep" - "Gaan voort met oproep deur sellulêre data te gebruik …" - "Kon nie na Wi-Fi-netwerk oorskakel nie" - "Video-oproep sal op sellulêre netwerk bly. Standaard datakoste kan dalk geld." + "Gaan voort met oproep deur mobiele data te gebruik ..." + "Kon nie na Wi-Fi-netwerk oorskakel nie" + "Video-oproep sal op mobiele netwerk bly. Standaard datakoste kan dalk geld." "Moenie dit weer wys nie" diff --git a/java/com/android/incallui/res/values-am/strings.xml b/java/com/android/incallui/res/values-am/strings.xml index 249447fee..f09fd63e4 100644 --- a/java/com/android/incallui/res/values-am/strings.xml +++ b/java/com/android/incallui/res/values-am/strings.xml @@ -33,8 +33,8 @@ "ያልተመለሰ ጥሪ ከ%s" "እየተካሄደ ያለ ጥሪ" "በሂደት ላይ ያለ የሥራ ጥሪ" - "በሂደት ላይ ያለ የWi-Fi ጥሪ" - "በሂደት ላይ ያለ የWi-Fi የሥራ ጥሪ" + "በሂደት ላይ ያለ የWi-Fi ጥሪ" + "በሂደት ላይ ያለ የWi-Fi የሥራ ጥሪ" "ያዝናቆይ" "ገቢ ጥሪ" "ገቢ ጥሪ ከፎቶ ጋር" @@ -55,8 +55,8 @@ "አስፈላጊ ገቢ ጥሪ ከፎቶ፣ መልዕክት እና አካባቢ ጋር" "አስፈላጊ ገቢ ጥሪ ከአባሪ ጋር" "ገቢ የሥራ ጥሪ" - "ገቢ የWi-Fi ጥሪ" - "ገቢ የWi-Fi የሥራ ጥሪ" + "ገቢ የWi-Fi ጥሪ" + "ገቢ የWi-Fi የሥራ ጥሪ" "መጪ የተጠረጠረ የአይፈለጌ መልዕክት ጥሪ" "ገቢ የቪዲዮ ጥያቄ" "ምንም አገልግሎት የለም" @@ -73,7 +73,7 @@ "የቪዲዮ ጥሪ ውሰድ" "ለመደወል፣ መጀመሪያየአውሮፕላኑን ሁነታ አጥፋ።" "በአውታረ መረቡ ላይ አልተመዘገበም።" - "የተንቀሳቃሽ ስልክ አውታረ መረብ አይገኝም።" + "የተንቀሳቃሽ ስልክ አውታረ መረብ አይገኝም።" "አንድ ጥሪ ለማድረግ የሚሰራ ቁጥር ያስገቡ።" "መደወል አልተቻለም።" "የMMI sequence…" @@ -134,8 +134,8 @@ "ጥሪ ጨርስ" "የስብሰባ ጥሪ" "በጥሪ ላይ" - "ሴሉላር ውሂብ በመጠቀም ጥሪውን በመቀጠል ላይ…" - "ወደ Wi-Fi አውታረ መረብ መቀየር አልተቻለም።" - "የቪዲዮ ጥሪ በሴሉላር አውታረመረቡ ላይ ይቆያል። መደበኛ የውሂብ ክፍያዎች ተፈጻሚ ሊሆኑ ይችላሉ።" + "የተንቀሳቃሽ ስልክ ውሂብን በመጠቀም ጥሪውን በመቀጠል ላይ…" + "ወደ Wi-Fi አውታረ መረብ መቀየር አልተቻለም" + "የቪዲዮ ጥሪ በተንቀሳቃሽ ስልክ አውታረ መረብ ላይ ይቆያል። መደበኛ የውሂብ ክፍያዎች ተፈጻሚ ሊሆኑ ይችላሉ።" "ይህን በድጋሚ አታሳይ" diff --git a/java/com/android/incallui/res/values-ar/strings.xml b/java/com/android/incallui/res/values-ar/strings.xml index 7c3585c7a..392829114 100644 --- a/java/com/android/incallui/res/values-ar/strings.xml +++ b/java/com/android/incallui/res/values-ar/strings.xml @@ -33,8 +33,8 @@ "مكالمة فائتة من %s" "مكالمة حالية" "مكالمة عمل جارية" - "‏اتصال جارٍ عبر Wi-Fi" - "‏مكالمة عمل جارية عبر اتصال Wi-Fi" + "‏اتصال جارٍ عبر Wi-Fi" + "‏مكالمة عمل جارية عبر اتصال Wi-Fi" "معلقة" "مكالمة واردة" "مكالمة واردة مع صورة" @@ -55,8 +55,8 @@ "مكالمة واردة مهمة مع صورة ورسالة وموقع" "مكالمة واردة مهمة مع مرفقات" "مكالمة عمل واردة" - "‏اتصال وارد عبر Wi-Fi" - "‏مكالمة عمل واردة عبر اتصال Wi-Fi" + "‏اتصال وارد عبر Wi-Fi" + "‏مكالمة عمل واردة عبر اتصال Wi-Fi" "مكالمة واردة يشتبه في كونها غير مرغوب فيها" "طلب فيديو وارد" "لا خدمة" @@ -73,7 +73,7 @@ "الرد على مكالمة فيديو" "لإجراء مكالمة، أوقف تشغيل وضع الطائرة أولاً." "غير مسجل على الشبكة." - "شبكة الجوّال غير متاحة." + "شبكة الجوال غير متاحة." "لإجراء مكالمة، أدخل رقمًا صالحًا." "يتعذر الاتصال." "‏جارٍ بدء تسلسل MMI..." @@ -134,8 +134,8 @@ "إنهاء الاتصال" "مكالمة جماعية" "قيد الاتصال" - "جارٍ استكمال المكالمة باستخدام بيانات الجوّال…" - "‏تعذر التبديل إلى شبكة Wi-Fi" - "ستظل مكالمة الفيديو على شبكة الجوّال. قد يتم فرض رسوم على البيانات القياسية للشبكة." + "جارٍ استكمال المكالمة باستخدام بيانات الجوّال…" + "‏تعذر التبديل إلى شبكة Wi-Fi" + "ستظل مكالمة الفيديو جارية على شبكة الجوال. قد يتم تطبيق رسوم قياسية على استخدام البيانات." "عدم إظهار هذا مرة أخرى" diff --git a/java/com/android/incallui/res/values-az/strings.xml b/java/com/android/incallui/res/values-az/strings.xml index dc43014fb..168dd0733 100644 --- a/java/com/android/incallui/res/values-az/strings.xml +++ b/java/com/android/incallui/res/values-az/strings.xml @@ -33,8 +33,8 @@ "%s tərəfindən zəng buraxılıb" "Davam edən zəng" "Davam edən iş çağrısı" - "Davam edən Wi-Fi zəngi" - "Davam edən Wi-Fi iş çağrısı" + "Davam edən Wi-Fi zəngi" + "Davam edən Wi-Fi iş zəngi" "Gözləmə mövqeyində" "Gələn zəng" "Foto ilə gələn zəng" @@ -55,8 +55,8 @@ "Foto, mesaj və məkan ilə gələn vacib zəng" "Qoşma ilə gələn vacib zəng" "Daxil olan iş çağrısı" - "Gələn Wi-Fi zəngi" - "Daxil olan Wi-Fi iş çağrısı" + "Gələn Wi-Fi zəngi" + "Gələn Wi-Fi iş zəngi" "Şübhəli spam zəngi" "Gələn video çağrı" "Xidmət yoxdur" @@ -73,7 +73,7 @@ "Video Zəngə cavab verin" "Zəng etmək üçün ilk olaraq Uçuş Rejimini söndürün." "Şəbəkədə qeydə alınmayıb." - "Mobil şəbəkə əlçatan deyil" + "Mobil şəbəkə əlçatımlı deyil." "Zəngi yerləşdirmək üçün düzgün nömrə daxil edin." "Zəng etmək mümkün deyil." "MMI başlanma ardıcıllığı…" @@ -134,8 +134,8 @@ "Zəngi sonlandırın" "Konfrans zəngi" "Çağrıda" - "Mobil data istifadə edərək zəng davam edir…" - "Wi-Fi şəbəkəsinə qoşulmaq olmadı" - "Video zəng mobil şəbəkə üzərində qalacaq. Standart data rüsumları tətbiq oluna bilər." + "Mobil data istifadə edərək zəngə davam edin…" + "Wi-Fi şəbəkəsinə qoşulmaq olmadı" + "Video zəng mobil şəbəkədə qalacaq. Standard data xərcləri tətbiq edilə bilər." "Bunu bi rdaha göstərməyin" 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 index 3dddf653f..de2ad8642 100644 --- a/java/com/android/incallui/res/values-b+sr+Latn/strings.xml +++ b/java/com/android/incallui/res/values-b+sr+Latn/strings.xml @@ -33,8 +33,8 @@ "Propušten poziv od: %s" "Aktuelni poziv" "Tekući poziv za Work" - "Tekući Wi-Fi poziv" - "Tekući poziv za Work preko Wi-Fi-ja" + "Wi‑Fi poziv u toku" + "Wi‑Fi poslovni poziv u toku" "Na čekanju" "Dolazni poziv" "Dolazni poziv sa slikom" @@ -55,8 +55,8 @@ "Važan dolazni poziv sa slikom, porukom i lokacijom" "Važan dolazni poziv sa prilozima" "Dolazni poziv za Work" - "Dolazni Wi-Fi poziv" - "Dolazni poziv za Work preko Wi-Fi-ja" + "Dolazni Wi‑Fi poziv" + "Dolazni Wi‑Fi poslovni poziv" "Sumnja na nepoželjan dolazni poziv" "Zahtev za dolazni video poziv" "Nema usluge" @@ -73,7 +73,7 @@ "Preuzmi video poziv" "Da biste uputili poziv, prvo isključite režim rada u avionu." "Nije registrovano na mreži." - "Mobilna mreža nije dostupna." + "Mobilna mreža nije dostupna." "Da biste uputili poziv, unesite važeći broj." "Poziv nije uspeo." "Pokretanje MMI sekvence" @@ -134,8 +134,8 @@ "Završite poziv" "Konferencijski poziv" "U pozivu" - "Poziv se nastavlja pomoću mobilnih podataka…" - "Prebacivanje na Wi-Fi mrežu nije uspelo" - "Video poziv će ostati na mobilnoj mreži. Mogu da važe standardne naknade za prenos podataka." + "Poziv se nastavlja pomoću mobilnih podataka…" + "Prebacivanje na Wi‑Fi mrežu nije uspelo" + "Video poziv će ostati na mobilnoj mreži. Važe standardne naknade za prenos podataka." "Ne prikazuj ovo ponovo" diff --git a/java/com/android/incallui/res/values-be/strings.xml b/java/com/android/incallui/res/values-be/strings.xml index 46b5d3941..274cac17f 100644 --- a/java/com/android/incallui/res/values-be/strings.xml +++ b/java/com/android/incallui/res/values-be/strings.xml @@ -33,8 +33,8 @@ "Прапушчаны выклiк ад %s" "Бягучы выклік" "Бягучы выклік па працы" - "Бягучы выклік праз Wi-Fi" - "Бягучы выклік па працы праз Wi-Fi" + "Бягучы выклік праз Wi-Fi" + "Бягучы выклік па працы праз Wi-Fi" "У чаканні" "Уваходны выклік" "Уваходны выклік з фота" @@ -55,8 +55,8 @@ "Важны выклік з фота, паведамленнем і месцам" "Важны ўваходны выклік з далучэннямі" "Уваходны выклік па працы" - "Уваходны выклік праз Wi-Fi" - "Уваходны выклік па працы праз Wi-Fi" + "Уваходны выклік праз Wi-Fi" + "Уваходны выклік па працы праз Wi-Fi" "Уваходны выклiк ад абанента, якога падазраваюць у спаме" "Запыт уваходнага відэавыкліку" "Не абслугоўваецца" @@ -73,7 +73,7 @@ "Прыняць відэавыклік" "Каб зрабіць выклік, спачатку выключыце рэжым \"У самалёце\"." "Не зарэгістраваны ў сетцы." - "Мабільная сетка недаступная." + "Мабільная сетка недаступная." "Каб зрабіць выклік, увядзіце сапраўдны нумар." "Выклік немагчымы." "Пачатак паслядоўнасці MMI..." @@ -134,8 +134,8 @@ "Завяршыць выклік" "Канферэнц-выклік" "У выкліку" - "Працягваецца выклік з выкарыстаннем сотавай перадачы даных…" - "Немагчыма пераключыцца на сетку Wi-Fi" - "Відэавыклік застанецца ў мабільнай сетцы. Можа спаганяцца стандартная аплата за перадачу даных." + "Працягваецца выклік з выкарыстаннем мабільнай перадачы даных…" + "Немагчыма пераключыцца на сетку Wi-Fi" + "Відэавыклік застанецца ў мабільнай сетцы. Можа спаганяцца стандартная аплата за перадачу даных." "Больш не паказваць" diff --git a/java/com/android/incallui/res/values-bg/strings.xml b/java/com/android/incallui/res/values-bg/strings.xml index 84bffa02c..b3c1f3fd7 100644 --- a/java/com/android/incallui/res/values-bg/strings.xml +++ b/java/com/android/incallui/res/values-bg/strings.xml @@ -33,8 +33,8 @@ "Пропуснато обаждане от %s" "Текущо обаждане" "Текущо служебно обаждане" - "Текущо обаждане през Wi-Fi" - "Текущо служебно обаждане през Wi-Fi" + "Текущо обаждане през Wi-Fi" + "Текущо служебно обаждане през Wi-Fi" "Задържане на обаждането" "Вх. обаждане" "Входящо обаждане със снимка" @@ -55,8 +55,8 @@ "Важно обаждане с местоположение, снимка, съобщение" "Важно входящо обаждане с прикачени файлове" "Входящо служебно обаждане" - "Входящо обаждане през Wi-Fi" - "Входящо служебно обаждане през Wi-Fi" + "Входящо обаждане през Wi-Fi" + "Входящо служебно обаждане през Wi-Fi" "Входящо обаждане – възможен спам" "Входяща заявка за видеовръзка" "Няма покритие" @@ -73,7 +73,7 @@ "Приемане на видеообаждането" "Първо изключете самолетния режим, за да може да осъществите обаждане." "Няма регистрация в мрежата." - "Няма достъп до клетъчната мрежа." + "Няма мобилна мрежа." "За да извършите обаждане, въведете валиден номер." "Не може да се извърши обаждане." "Стартира се последователността MMI…" @@ -134,8 +134,8 @@ "Край на обаждането" "Конферентно обаждане" "В разговор" - "Обаждането продължава през мобилната връзка за данни…" - "Превключването към Wi-Fi мрежа не бе възможно" - "Видеообаждането ще остане в мобилната мрежа. Важат стандартните тарифи за данни." + "Обаждането продължава през мобилната връзка за данни…" + "Превключването към Wi-Fi мрежа не бе възможно" + "Видеообаждането ще остане в мобилната мрежа. Важат стандартните тарифи за данни." "Това да не се показва отново" diff --git a/java/com/android/incallui/res/values-bn/strings.xml b/java/com/android/incallui/res/values-bn/strings.xml index fc9383002..a964f81b1 100644 --- a/java/com/android/incallui/res/values-bn/strings.xml +++ b/java/com/android/incallui/res/values-bn/strings.xml @@ -33,8 +33,8 @@ "%s এর থেকে মিসড কল" "চালু থাকা কল" "চলমান কাজের কল" - "চলমান ওয়াই-ফাই কল" - "চলমান ওয়াই-ফাই কাজের কল" + "চালু থাকা ওয়াই-ফাই কল" + "চালু থাকা ওয়াই-ফাই কাজের কল" "সাময়িকভাবে স্থগিত রাখা হয়েছে" "ইনকামিং কল" "ফটো সহ ইনকামিং কল" @@ -55,8 +55,8 @@ "ফটো, বার্তা এবং অবস্থান সহ গুরুত্বপূর্ণ ইনকামিং কল" "সংযুক্তিগুলি সহ গুরুত্বপূর্ণ ইনকামিং কল" "আগত কাজের কল" - "আগত ওয়াই-ফাই কল" - "আগত ওয়াই-ফাই কাজের কল" + "আগত ওয়াই-ফাই কল" + "আগত ওয়াই-ফাই কাজের কল" "আগত সন্দেহভাজন স্প্যাম কল" "আগত ভিডিও অনুরোধ" "কোনো পরিষেবা নেই" @@ -73,7 +73,7 @@ "ভিডিও কলটি নিন" "একটি কল করতে, প্রথমে বিমান মোড বন্ধ করুন৷" "নেটওয়ার্কে নিবন্ধিত নয়৷" - "সেলুলার নেটওয়ার্ক উপলব্ধ নয়।" + "মোবাইল নেটওয়ার্ক উপলব্ধ নয়৷" "কোনো কল স্থাপন করতে, একটি বৈধ নম্বর লিখুন৷" "কল করা যাবে না৷" "MMI ক্রম চালু হচ্ছে…" @@ -134,8 +134,8 @@ "কল কেটে দিন" "কনফারেন্স কল" "কলে থাকাকালীন" - "সেলুলার ডেটা ব্যবহার করে কল করা চালিয়ে যান…" - "Wi-Fi নেটওয়ার্কে পাল্টানো গেল না" - "ভিডিও কল সেলুলার নেটওয়ার্কেই থাকবে৷ স্ট্যান্ডার্ড চার্জ প্রযোজ্য হতে পারে৷" + "মোবাইল ডেটা ব্যবহার করে কল করা চালিয়ে যান…" + "ওয়াই-ফাই নেটওয়ার্কে পাল্টানো গেল না" + "ভিডিও কল মোবাইল নেটওয়ার্কেই থাকবে৷ স্ট্যান্ডার্ড ডেটা চার্জ প্রযোজ্য হতে পারে৷" "এটি আমাকে আর দেখাবেন না" diff --git a/java/com/android/incallui/res/values-bs/strings.xml b/java/com/android/incallui/res/values-bs/strings.xml index c6950802f..996eb980c 100644 --- a/java/com/android/incallui/res/values-bs/strings.xml +++ b/java/com/android/incallui/res/values-bs/strings.xml @@ -33,8 +33,8 @@ "Propušteni poziv od kontakta %s" "Poziv u toku" "Poslovni poziv u toku" - "Wi-Fi poziv u toku" - "Wi-Fi poslovni poziv u toku" + "Wi-Fi poziv je u toku" + "Wi-Fi poslovni poziv je u toku" "Na čekanju" "Dolazni poziv" "Dolazni poziv s fotografijom" @@ -55,8 +55,8 @@ "Važan poziv s fotografijom, porukom i lokacijom" "Važan dolazni poziv s prilozima" "Dolazni poslovni poziv" - "Dolazni Wi-Fi poziv" - "Dolazni Wi-Fi poslovni poziv" + "Dolazni Wi-Fi poziv" + "Dolazni Wi-Fi poslovni poziv" "Mogući neželjeni dolazni poziv" "Zahtjev za dolazni videopoziv" "Nema mreže" @@ -73,7 +73,7 @@ "Primi videopoziv" "Da uputite poziv, isključite Način rada u avionu." "Nije registrirano na mreži." - "Mobilna mreža nije dostupna." + "Mobilna mreža nije dostupna." "Da uputite poziv, upišite važeći broj." "Nije moguće pozvati." "Pokretanje MMI sekvence u toku…" @@ -134,8 +134,8 @@ "Prekini poziv" "Konferencijski poziv" "Poziv u toku" - "Poziv se nastavlja pomoću mobilnih podataka…" - "Prebacivanje na Wi-Fi mrežu nije moguće" - "Videopoziv će ostati na mobilnoj mreži. Mogu nastati standardni troškovi prijenosa podataka." + "Nastavak poziva prijenosom mobilnih podataka…" + "Prebacivanje na Wi-Fi mrežu nije moguće" + "Videopoziv će ostati na mobilnoj mreži. Mogu nastati standardni troškovi prijenosa podataka." "Ne prikazuj ponovo" diff --git a/java/com/android/incallui/res/values-ca/strings.xml b/java/com/android/incallui/res/values-ca/strings.xml index 5148db540..f4d56a2a1 100644 --- a/java/com/android/incallui/res/values-ca/strings.xml +++ b/java/com/android/incallui/res/values-ca/strings.xml @@ -33,8 +33,8 @@ "Trucada perduda de %s" "Trucada en procés" "Trucada de feina en curs" - "Trucada Wi-Fi en curs" - "Trucada de feina per Wi-Fi en curs" + "Trucada per Wi-Fi en curs" + "Trucada de feina per Wi-Fi en curs" "En espera" "Trucada entrant" "Trucada entrant amb foto" @@ -55,8 +55,8 @@ "Trucada entrant important amb foto, missatge i ubicació" "Trucada entrant important amb fitxers adjunts" "Trucada de feina entrant" - "Trucada Wi-Fi entrant" - "Trucada de feina per Wi-Fi entrant" + "Trucada per Wi-Fi entrant" + "Trucada de feina per Wi-Fi entrant" "Presumpta trucada brossa entrant" "Sol·licitud de vídeo entrant" "Sense servei" @@ -73,7 +73,7 @@ "Accepta la videotrucada" "Per fer una trucada, primer apagueu el mode d\'avió." "No registrat a la xarxa." - "La xarxa mòbil no està disponible." + "La xarxa mòbil no està disponible." "Per realitzar una trucada, introdueix un número vàlid." "No es pot trucar." "S\'està iniciant la seqüència MMI..." @@ -125,7 +125,7 @@ "Segons les nostres sospites, l\'autor de la trucada és un emissor de contingut brossa. Si ens equivoquem, toca NO ÉS BROSSA per informar-nos-en." "Bloqueja i marca" "Afegeix un contacte" - "No és contingut brossa" + "No és una trucada brossa" "Bloqueja el número" "Afegeix als contactes" "Bloqueja i marca com a brossa" @@ -134,8 +134,8 @@ "Finalitza la trucada" "Conferència" "En una trucada" - "S\'està continuant la trucada mitjançant dades mòbils…" - "No s\'ha pogut canviar a la xarxa Wi-Fi" - "La videotrucada es mantindrà a la xarxa mòbil. És possible que s\'apliquin càrrecs de dades estàndard." + "S\'està continuant la trucada mitjançant dades mòbils…" + "No s\'ha pogut canviar a la xarxa Wi-Fi" + "La videotrucada continuarà a la xarxa mòbil. És possible que s\'hi apliquin càrrecs de dades estàndard." "No ho tornis a mostrar" diff --git a/java/com/android/incallui/res/values-cs/strings.xml b/java/com/android/incallui/res/values-cs/strings.xml index 9d69cfac7..e604a5249 100644 --- a/java/com/android/incallui/res/values-cs/strings.xml +++ b/java/com/android/incallui/res/values-cs/strings.xml @@ -33,8 +33,8 @@ "Zmeškaný hovor od volajícího %s" "Probíhající hovor" "Probíhající pracovní hovor" - "Probíhající volání přes Wi-Fi" - "Probíhající pracovní hovor (Wi-Fi)" + "Probíhající hovor přes Wi-Fi" + "Probíhající pracovní hovor přes Wi-Fi" "Přidržený hovor" "Příchozí hovor" "Příchozí hovor s fotkou" @@ -55,8 +55,8 @@ "Důležitý přích. hovor s fotkou, zprávou a polohou" "Důležitý příchozí hovor s přílohami" "Příchozí pracovní hovor" - "Příchozí volání přes Wi-Fi" - "Příchozí pracovní hovor (Wi-Fi)" + "Příchozí hovor přes Wi-Fi" + "Příchozí pracovní hovor přes Wi-Fi" "U příchozího hovoru máme podezření, že se jedná o spam" "Příchozí žádost o videohovor" "Žádný signál" @@ -73,7 +73,7 @@ "Převést videohovor sem" "Chcete-li telefonovat, vypněte nejprve režim Letadlo." "Přihlášení k síti nebylo úspěšné." - "Mobilní síť je nedostupná." + "Mobilní síť je nedostupná." "Chcete-li uskutečnit hovor, zadejte platné telefonní číslo." "Hovor nelze uskutečnit." "Spouštění sekvence MMI..." @@ -134,8 +134,8 @@ "Ukončit hovor" "Konferenční hovor" "Probíhá hovor" - "Hovor pokračuje přes mobilní data…" - "Přepnutí na síť Wi-Fi se nezdařilo" - "Videohovor zůstane na mobilní síti. Za datový přenos mohou být účtovány standardní poplatky." + "Hovor pokračuje přes mobilní data…" + "Přepnutí na síť Wi-Fi se nezdařilo" + "Videohovor zůstane na mobilní síti. Za datový přenos mohou být účtovány standardní poplatky." "Tuto zprávu příště nezobrazovat" diff --git a/java/com/android/incallui/res/values-da/strings.xml b/java/com/android/incallui/res/values-da/strings.xml index 19de78382..fbf7927a3 100644 --- a/java/com/android/incallui/res/values-da/strings.xml +++ b/java/com/android/incallui/res/values-da/strings.xml @@ -33,8 +33,8 @@ "Ubesvaret opkald fra %s" "Igangværende opkald" "Igangværende opkald i forbindelse med arbejde" - "Igangværende opkald via Wi-Fi" - "Igangværende Wi-Fi-opkald i forbindelse med arbejde" + "Igangværende Wi-Fi-opkald" + "Igangværende Wi-Fi-opkald i forbindelse med arbejde" "Ventende" "Indgående opkald" "Indgående opkald med billede" @@ -55,8 +55,8 @@ "Vigtigt opkald med billede, besked og placering" "Vigtigt indgående opkald med vedhæftede filer" "Indgående opkald i forbindelse med arbejde" - "Indgående opkald via Wi-Fi" - "Indgående Wi-Fi-opkald i forbindelse med arbejde" + "Indgående Wi-Fi-opkald" + "Indgående Wi-Fi-opkald i forbindelse med arbejde" "Indgående formodet spamopkald" "Indgående videoanmodning" "Ingen dækning" @@ -73,7 +73,7 @@ "Besvar videoopkald" "Slå Flytilstand fra først for at foretage et opkald." "Ikke registreret på netværk." - "Mobilnetværket er ikke tilgængeligt." + "Mobilnetværket er ikke tilgængeligt." "Indtast et gyldigt nummer for at foretage et opkald." "Kan ikke ringe op." "Starter MMI-sekvens ..." @@ -134,8 +134,8 @@ "Afslut opkald" "Telefonmøde" "Opkald i gang" - "Fortsætter opkaldet med mobildata…" - "Der kan ikke skiftes til Wi-Fi-netværk" - "Videoopkaldet bliver ved med at bruge mobilnetværket. Du skal muligvis betale et standardgebyr for data." + "Opkaldet fortsættes med mobildata…" + "Du kunne ikke skifte til Wi-Fi-netværk" + "Videoopkaldet bliver ved med at bruge mobilnetværket. Du skal muligvis betale et standardgebyr for data." "Vis ikke dette igen" diff --git a/java/com/android/incallui/res/values-de/strings.xml b/java/com/android/incallui/res/values-de/strings.xml index a5f96027b..0dce3452a 100644 --- a/java/com/android/incallui/res/values-de/strings.xml +++ b/java/com/android/incallui/res/values-de/strings.xml @@ -33,8 +33,8 @@ "Verpasster Anruf von %s" "Aktueller Anruf" "Aktueller geschäftlicher Anruf" - "Aktiver WLAN-Anruf" - "Aktueller geschäftlicher WLAN-Anruf" + "Aktiver WLAN-Anruf" + "Aktiver geschäftlicher WLAN-Anruf" "Gehaltener Anruf" "Eingehender Anruf" "Eingehender Anruf mit Foto" @@ -55,8 +55,8 @@ "Wichtiger eingehender Anruf mit Foto, Nachricht und Standort" "Wichtiger eingehender Anruf mit Anhängen" "Eingehender geschäftlicher Anruf" - "Eingehender WLAN-Anruf" - "Eingehender geschäftlicher WLAN-Anruf" + "Eingehender WLAN-Anruf" + "Eingehender geschäftlicher WLAN-Anruf" "Verdacht auf eingehenden Spam-Anruf" "Eingehende Videoanfrage" "kein Dienst" @@ -73,7 +73,7 @@ "Videoanruf übernehmen" "Deaktiviere zunächst den Flugmodus, um einen Anruf zu tätigen." "Nicht in Netzwerk registriert." - "Mobilfunknetz nicht verfügbar" + "Mobilfunknetz ist nicht verfügbar." "Gib eine gültige Nummer ein." "Anruf nicht möglich." "MMI-Sequenz wird gestartet..." @@ -134,8 +134,8 @@ "Anruf beenden" "Telefonkonferenz" "Anruf" - "Anruf wird über Mobildaten fortgesetzt…" - "Wechseln zu WLAN nicht möglich" - "Der Videoanruf erfolgt weiter über das Mobilfunknetz. Es können Standardgebühren für die Datenübertragung anfallen." + "Anruf wird über mobile Daten fortgesetzt…" + "Wechseln zu WLAN nicht möglich" + "Der Videoanruf erfolgt weiter über das Mobilfunknetz. Es können Standardgebühren für die Datenübertragung anfallen." "Meldung nicht mehr anzeigen" diff --git a/java/com/android/incallui/res/values-el/strings.xml b/java/com/android/incallui/res/values-el/strings.xml index 8ff6d2f5f..bc39e2ac9 100644 --- a/java/com/android/incallui/res/values-el/strings.xml +++ b/java/com/android/incallui/res/values-el/strings.xml @@ -33,8 +33,8 @@ "Αναπάντητη κλήση από %s" "Κλήση σε εξέλιξη" "Κλήση εργασίας σε εξέλιξη" - "Κλήση Wi-Fi σε εξέλιξη" - "Κλήση εργασίας μέσω Wi-Fi σε εξέλιξη" + "Κλήση Wi-Fi σε εξέλιξη" + "Κλήση εργασίας μέσω Wi-Fi σε εξέλιξη" "Σε αναμονή" "Εισερχόμενη κλήση" "Εισερχόμενη κλήση με φωτογραφία" @@ -55,8 +55,8 @@ "Σημαντική εισερχ. κλήση με φωτο, μήνυμα, τοποθεσία" "Σημαντική εισερχόμενη κλήση με συνημμένα" "Εισερχόμενη κλήση εργασίας" - "Εισερχόμενη κλήση μέσω Wi-Fi" - "Εισερχόμενη κλήση εργασίας μέσω Wi-Fi" + "Εισερχόμενη κλήση μέσω Wi-Fi" + "Εισερχόμενη κλήση εργασίας μέσω Wi-Fi" "Πιθανώς ανεπιθύμητη εισερχόμενη κλήση" "Αίτημα εισερχόμενου βίντεο" "Δίκτυο μη διαθέσιμο" @@ -73,7 +73,7 @@ "Λήψη βιντεοκλήσης" "Για να πραγματοποιήσετε μια κλήση, απενεργοποιήστε πρώτα τη λειτουργία πτήσης." "Δεν έχετε εγγραφεί στο δίκτυο." - "Το δίκτυο κινητής τηλεφωνίας δεν είναι διαθέσιμο." + "Το δίκτυο κινητής τηλεφωνίας δεν είναι διαθέσιμο." "Για να πραγματοποιήσετε μια κλήση, εισαγάγετε έναν έγκυρο αριθμό." "Δεν είναι δυνατή η κλήση." "Έναρξη ακολουθίας MMI..." @@ -134,8 +134,8 @@ "Τερματισμός κλήσης" "Κλήση συνδιάσκεψης" "Σε κλήση" - "Συνέχεια κλήσης με χρήση δεδομένων κινητής τηλεφωνίας…" - "Δεν ήταν δυνατή η εναλλαγή σε δίκτυο Wi-Fi" - "Η βιντεοκλήση θα παραμείνει σε δίκτυο δεδομένων κινητής τηλεφωνίας; Ενδέχεται να ισχύουν βασικές χρεώσεις δεδομένων." + "Συνέχιση κλήσης με χρήση δεδομένων κινητής τηλεφωνίας…" + "Δεν ήταν δυνατή η εναλλαγή σε δίκτυο Wi-Fi" + "Η βιντεοκλήση θα παραμείνει σε δίκτυο δεδομένων κινητής τηλεφωνίας; Ενδέχεται να ισχύουν βασικές χρεώσεις δεδομένων." "Να μην εμφανιστεί ξανά αυτό" 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 5e0d20737..68509f080 100644 --- a/java/com/android/incallui/res/values-en-rAU/strings.xml +++ b/java/com/android/incallui/res/values-en-rAU/strings.xml @@ -33,8 +33,8 @@ "Missed call from %s" "On-going call" "Ongoing work call" - "Ongoing Wi-Fi call" - "Ongoing Wi-Fi work call" + "Ongoing Wi‑Fi call" + "Ongoing Wi‑Fi work call" "On hold" "Incoming call" "Incoming call with photo" @@ -55,15 +55,15 @@ "Important call with photo, message and location" "Important incoming call with attachments" "Incoming work call" - "Incoming Wi-Fi call" - "Incoming Wi-Fi work call" + "Incoming Wi‑Fi call" + "Incoming Wi‑Fi work call" "Incoming suspected spam call" "Incoming video request" "No service" "Selected network (%s) unavailable" "Answer" "Hang up" - "In-stream video" + "Video" "Voice" "Accept" "Decline" @@ -73,7 +73,7 @@ "Take video call" "To place a call, first turn off Aeroplane mode." "Not registered on network." - "Mobile network not available." + "Mobile network not available." "To place a call, enter a valid number." "Can\'t call." "Starting MMI sequence…" @@ -134,8 +134,8 @@ "End call" "Conference call" "On a call" - "Continuing call using mobile data…" - "Couldn\'t switch to Wi-Fi network" - "Video call will remain on mobile network. Standard data charges may apply." + "Continuing call using mobile data…" + "Couldn\'t switch to Wi‑Fi network" + "Video call will remain on the mobile network. Standard data charges may apply." "Do not show this again" 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 5e0d20737..68509f080 100644 --- a/java/com/android/incallui/res/values-en-rGB/strings.xml +++ b/java/com/android/incallui/res/values-en-rGB/strings.xml @@ -33,8 +33,8 @@ "Missed call from %s" "On-going call" "Ongoing work call" - "Ongoing Wi-Fi call" - "Ongoing Wi-Fi work call" + "Ongoing Wi‑Fi call" + "Ongoing Wi‑Fi work call" "On hold" "Incoming call" "Incoming call with photo" @@ -55,15 +55,15 @@ "Important call with photo, message and location" "Important incoming call with attachments" "Incoming work call" - "Incoming Wi-Fi call" - "Incoming Wi-Fi work call" + "Incoming Wi‑Fi call" + "Incoming Wi‑Fi work call" "Incoming suspected spam call" "Incoming video request" "No service" "Selected network (%s) unavailable" "Answer" "Hang up" - "In-stream video" + "Video" "Voice" "Accept" "Decline" @@ -73,7 +73,7 @@ "Take video call" "To place a call, first turn off Aeroplane mode." "Not registered on network." - "Mobile network not available." + "Mobile network not available." "To place a call, enter a valid number." "Can\'t call." "Starting MMI sequence…" @@ -134,8 +134,8 @@ "End call" "Conference call" "On a call" - "Continuing call using mobile data…" - "Couldn\'t switch to Wi-Fi network" - "Video call will remain on mobile network. Standard data charges may apply." + "Continuing call using mobile data…" + "Couldn\'t switch to Wi‑Fi network" + "Video call will remain on the mobile network. Standard data charges may apply." "Do not show this again" 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 5e0d20737..68509f080 100644 --- a/java/com/android/incallui/res/values-en-rIN/strings.xml +++ b/java/com/android/incallui/res/values-en-rIN/strings.xml @@ -33,8 +33,8 @@ "Missed call from %s" "On-going call" "Ongoing work call" - "Ongoing Wi-Fi call" - "Ongoing Wi-Fi work call" + "Ongoing Wi‑Fi call" + "Ongoing Wi‑Fi work call" "On hold" "Incoming call" "Incoming call with photo" @@ -55,15 +55,15 @@ "Important call with photo, message and location" "Important incoming call with attachments" "Incoming work call" - "Incoming Wi-Fi call" - "Incoming Wi-Fi work call" + "Incoming Wi‑Fi call" + "Incoming Wi‑Fi work call" "Incoming suspected spam call" "Incoming video request" "No service" "Selected network (%s) unavailable" "Answer" "Hang up" - "In-stream video" + "Video" "Voice" "Accept" "Decline" @@ -73,7 +73,7 @@ "Take video call" "To place a call, first turn off Aeroplane mode." "Not registered on network." - "Mobile network not available." + "Mobile network not available." "To place a call, enter a valid number." "Can\'t call." "Starting MMI sequence…" @@ -134,8 +134,8 @@ "End call" "Conference call" "On a call" - "Continuing call using mobile data…" - "Couldn\'t switch to Wi-Fi network" - "Video call will remain on mobile network. Standard data charges may apply." + "Continuing call using mobile data…" + "Couldn\'t switch to Wi‑Fi network" + "Video call will remain on the mobile network. Standard data charges may apply." "Do not show this again" 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 d0167118f..b8584c765 100644 --- a/java/com/android/incallui/res/values-es-rUS/strings.xml +++ b/java/com/android/incallui/res/values-es-rUS/strings.xml @@ -33,8 +33,8 @@ "Llamada perdida de %s" "Llamada en curso" "Llamada de trabajo en curso" - "Llamada por Wi-Fi en curso" - "Llamada de trabajo con Wi-Fi en curso" + "Llamada Wi-Fi en curso" + "Llamada de trabajo Wi-Fi en curso" "En espera" "Llamada entrante" "Llamada entrante con foto" @@ -55,8 +55,8 @@ "Llamada importante con foto, mensaje y ubicación" "Llamada entrante importante con archivos adjuntos" "Llamada de trabajo entrante" - "Llamada por Wi-Fi entrante" - "Llamada de trabajo con Wi-Fi entrante" + "Llamada Wi-Fi entrante" + "Llamada de trabajo Wi-Fi entrante" "Posible llamada entrante de spam" "Solicitud de videollamada entrante" "Sin servicio" @@ -73,7 +73,7 @@ "Atender videollamada" "Para realizar una llamada, primero debes desactivar el modo avión." "No registrado en la red." - "Red móvil no disponible" + "La red móvil no está disponible." "Para realizar una llamada, ingresa un número válido." "No se puede realizar la llamada." "Iniciar la secuencia de MMI" @@ -134,8 +134,8 @@ "Finalizar llamada" "Conferencia" "En llamada" - "Continuando la llamada con datos móviles…" - "No se pudo cambiar a la red Wi-Fi" - "La videollamada permanecerá en la red móvil. Es posible que se te cobren cargos estándar por el uso de datos." + "Continuando la llamada con datos móviles…" + "No se pudo cambiar a la red Wi-Fi" + "La videollamada permanecerá en la red móvil. Es posible que se te cobren cargos estándar por el uso de datos." "No volver a mostrar esto" diff --git a/java/com/android/incallui/res/values-es/strings.xml b/java/com/android/incallui/res/values-es/strings.xml index 472ea99cb..4dc2d725c 100644 --- a/java/com/android/incallui/res/values-es/strings.xml +++ b/java/com/android/incallui/res/values-es/strings.xml @@ -33,8 +33,8 @@ "Llamada perdida de %s" "Llamada en curso" "Llamada de trabajo en curso" - "Llamada Wi-Fi en curso" - "Llamada Wi-Fi de trabajo en curso" + "Llamada por Wi-Fi en curso" + "Llamada de trabajo por Wi-Fi en curso" "En espera" "Llamada entrante" "Llamada entrante con foto" @@ -55,8 +55,8 @@ "Llamada importante con foto, mensaje y ubicación" "Llamada entrante importante con archivos adjuntos" "Llamada de trabajo entrante" - "Llamada Wi-Fi entrante" - "Llamada Wi-Fi de trabajo entrante" + "Llamada por Wi-Fi entrante" + "Llamada de trabajo por Wi-Fi entrante" "Llamada entrante sospechosa de spam" "Solicitud de videollamada entrante" "Sin servicio" @@ -73,7 +73,7 @@ "Atender videollamada" "Para realizar una llamada, primero debes desactivar el modo avión." "No se ha podido conectar a la red" - "La red móvil no está disponible." + "La red móvil no está disponible." "Para realizar una llamada, introduce un número válido." "No se puede establecer la llamada." "Iniciando secuencia MMI..." @@ -134,8 +134,8 @@ "Finalizar llamada" "Conferencia telefónica" "En una llamada" - "Continuando la llamada con datos móviles…" - "No se ha podido cambiar a la red Wi-Fi" - "La videollamada seguirá mediante la red móvil. Es posible que se apliquen cargos por uso de datos." + "Continuando la llamada con los datos móviles…" + "No se ha podido cambiar a la red Wi-Fi" + "La videollamada seguirá a través de la red móvil. Es posible que se apliquen cargos por el uso de datos." "No volver a mostrar" diff --git a/java/com/android/incallui/res/values-et/strings.xml b/java/com/android/incallui/res/values-et/strings.xml index 9eaa65f42..ec1b230c5 100644 --- a/java/com/android/incallui/res/values-et/strings.xml +++ b/java/com/android/incallui/res/values-et/strings.xml @@ -33,8 +33,8 @@ "Vastamata kõne helistajalt %s" "Käimasolev kõne" "Käimasolev töökõne" - "Pooleliolev WiFi-kõne" - "Käimasolev töökõne WiFi kaudu" + "Käimasolev WiFi-kõne" + "Käimasolev WiFi-töökõne" "Ootel" "Sissetulev kõne" "Sissetulev kõne koos fotoga" @@ -55,8 +55,8 @@ "Tähtis sisset. kõne koos foto, sõnumi ja asukohaga" "Tähtis sissetulev kõne koos manustega" "Sissetulev töökõne" - "Sissetulev WiFi-kõne" - "Sissetulev töökõne WiFi kaudu" + "Sissetulev WiFi-kõne" + "Sissetulev WiFi-töökõne" "Arvatav sissetulev rämpskõne" "Sissetulev videotaotlus" "Teenus puudub" @@ -73,7 +73,7 @@ "Alusta videokõnet" "Helistamiseks lülitage lennurežiim välja." "Ei ole võrku registreeritud." - "Mobiilsidevõrk pole saadaval." + "Mobiilsidevõrk pole saadaval." "Helistamiseks sisestage kehtiv number." "Ei saa helistada." "MMI-jada alustamine ..." @@ -134,8 +134,8 @@ "Kõne lõpetamine" "Konverentskõne" "Pooleliolev kõne" - "Kõne jätkatakse mobiilse andmeside kaudu …" - "Ei saanud WiFi-võrgule lülitada" - "Videokõne jääb mobiilsidevõrku. Rakenduda võivad tavapärased andmetasud." + "Kõnet jätkatakse mobiilse andmeside kaudu …" + "WiFi-võrgule ei saanud lülituda" + "Videokõne jääb mobiilsidevõrku. Rakenduda võivad tavapärased andmesidetasud." "Ära seda enam näita" diff --git a/java/com/android/incallui/res/values-eu/strings.xml b/java/com/android/incallui/res/values-eu/strings.xml index 4db9e10fe..c8fe005af 100644 --- a/java/com/android/incallui/res/values-eu/strings.xml +++ b/java/com/android/incallui/res/values-eu/strings.xml @@ -33,8 +33,8 @@ "Deitzaile honen dei bat galdu duzu: %s" "Abian den deia" "Laneko dei bat abian da" - "Wi-Fi deia abian" - "Wi-Fi bidezko laneko dei bat abian da" + "Wi-Fi bidezko deia" + "Wi-Fi bidezko laneko deia" "Zain" "Sarrerako deia" "Jasotako deia, argazkia duena" @@ -55,8 +55,8 @@ "Jasotako dei garrant., arg., mez. eta kok. dituena" "Jasotako dei garrantzitsua, eranskinak dituena" "Laneko dei bat jaso da" - "Sarrerako Wi-Fi deia" - "Wi-Fi bidezko laneko dei bat jaso da" + "Jasotako Wi-Fi bidezko deia" + "Jasotako Wi-Fi bidezko laneko deia" "Ustezko spam-deia jaso duzu" "Sarrerako bideo-eskaera" "Ez dago zerbitzurik" @@ -73,7 +73,7 @@ "Erantzun bideo-deiari" "Dei bat egiteko, Hegaldi modua desaktibatu behar duzu." "Ez dago sarean erregistratuta." - "Sare mugikorra ez dago erabilgarri." + "Sare mugikorra ez dago erabilgarri." "Deitzeko, idatzi balio duen zenbaki bat." "Ezin da deitu." "MMI sekuentzia hasten…" @@ -134,8 +134,8 @@ "Amaitu deia" "Konferentzia-deia" "Deia abian da" - "Datu-konexioren bidez jarraitzen ari da deia egiten…" - "Ezin izan da aldatu Wi-Fi sarera" - "Datu mugikorren bidez egiten jarraituko da bideo-deia. Baliteke datuak erabiltzearen ondorioz ohiko kostuak kobratzea." + "Datu-konexioaren bidez egiten jarraituko da deia…" + "Ezin izan da aldatu Wi-Fi sarera" + "Datu-konexioaren bidez egiten jarraituko da bideo-deia. Baliteke datuak erabiltzearen ondorioz ohiko kostuak kobratzea." "Ez erakutsi berriro" diff --git a/java/com/android/incallui/res/values-fa/strings.xml b/java/com/android/incallui/res/values-fa/strings.xml index f816bd063..a36d164bb 100644 --- a/java/com/android/incallui/res/values-fa/strings.xml +++ b/java/com/android/incallui/res/values-fa/strings.xml @@ -33,8 +33,8 @@ "تماس بی‌پاسخ از %s" "تماس جاری" "تماس کاری خروجی" - "‏تماس از طریق Wi-Fi در حال انجام است" - "‏تماس کاری Wi-Fi خروجی" + "‏تماس Wi-Fi درحال انجام" + "‏تماس کاری Wi-Fi درحال انجام" "در انتظار" "تماس ورودی" "تماس ورودی به همراه عکس" @@ -55,8 +55,8 @@ "تماس ورودی مهم به همراه عکس، پیام و مکان" "تماس ورودی مهم به همراه پیوست" "تماس کاری ورودی" - "‏تماس Wi-Fi ورودی" - "‏تماس کاری Wi-Fi ورودی" + "‏تماس Wi-Fi ورودی" + "‏تماس کاری Wi-Fi ورودی" "تماس هرزنامه احتمالی ورودی" "درخواست تماس ویدئویی ورودی" "بدون سرویس" @@ -73,7 +73,7 @@ "انتقال تماس ویدئویی" "برای برقراری یک تماس، ابتدا حالت هواپیما را خاموش کنید." "در شبکه ثبت نشده است." - "شبکه تلفن همراه در دسترس نیست." + "شبکه تلفن همراه دردسترس نیست." "برای برقراری تماس، یک شماره معتبر وارد کنید." "نمی‌توانید تماس بگیرید." "‏شروع ترتیب MMI..." @@ -134,8 +134,8 @@ "پایان تماس" "تماس کنفرانسی" "در تماس" - "ادامه تماس با استفاده از داده شبکه تلفن همراه..." - "‏به شبکه Wi-Fi جابه‌جا نشد" - "تماس ویدئویی همچنان از شبکه تلفن همراه استفاده می‌کند. هزینه‌های داده استاندارد اعمال می‌شود." + "ادامه تماس با استفاده از داده شبکه همراه…" + "‏جابجایی به شبکه Wi-Fi انجام نشد" + "تماس ویدیویی همچنان ازطریق شبکه تلفن همراه انجام می‌شود. ممکن است هزینه‌های استاندارد داده اعمال شود." "دوباره نشان داده نشود" diff --git a/java/com/android/incallui/res/values-fi/strings.xml b/java/com/android/incallui/res/values-fi/strings.xml index 995e7a328..f13ff26a5 100644 --- a/java/com/android/incallui/res/values-fi/strings.xml +++ b/java/com/android/incallui/res/values-fi/strings.xml @@ -33,8 +33,8 @@ "Vastaamaton puhelu: %s" "Käynnissä oleva puhelu" "Käynnissä oleva työpuhelu" - "Käynnissä oleva Wi-Fi-puhelu" - "Käynnissä oleva Wi-Fi-työpuhelu" + "Käynnissä oleva Wi-Fi-puhelu" + "Käynnissä oleva Wi-Fi-työpuhelu" "Pidossa" "Saapuva puhelu" "Kuvan sisältävä saapuva puhelu" @@ -55,8 +55,8 @@ "Tärkeä liitteitä sisältävä saapuva puhelu" "Tärkeä liitteitä sisältävä saapuva puhelu" "Saapuva työpuhelu" - "Saapuva Wi-Fi-puhelu" - "Saapuva Wi-Fi-työpuhelu" + "Saapuva Wi-Fi-puhelu" + "Saapuva Wi-Fi-työpuhelu" "Tämä puhelu saattaa olla häirikköpuhelu." "Saapuva videopyyntö" "Katvealueella" @@ -73,7 +73,7 @@ "Vastaa videopuheluun" "Poista lentokonetila käytöstä ennen puhelun soittamista." "Ei rekisteröity verkkoon." - "Matkapuhelinverkko ei ole käytettävissä." + "Mobiilidataverkko ei ole käytettävissä." "Soita antamalla kelvollinen numero." "Puhelua ei voi soittaa." "Aloitetaan MMI-koodisekvenssiä..." @@ -134,8 +134,8 @@ "Päätä puhelu" "Puhelinneuvottelu" "Puhelu käynnissä" - "Jatketaan puhelua mobiilitiedonsiirron avulla…" - "Siirtyminen Wi-Fi-verkkoon epäonnistui." - "Videopuhelu soitetaan matkapuhelinverkon kautta. Operaattori voi veloittaa tiedonsiirrosta hinnastonsa mukaan." + "Jatketaan puhelua mobiilidatayhteydellä…" + "Vaihto Wi-Fi-verkkoon epäonnistui." + "Videopuhelu soitetaan mobiilidatayhteyden kautta. Operaattori voi veloittaa tiedonsiirrosta." "Älä näytä tätä uudelleen" 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 6f4d8daa4..e83658d14 100644 --- a/java/com/android/incallui/res/values-fr-rCA/strings.xml +++ b/java/com/android/incallui/res/values-fr-rCA/strings.xml @@ -33,8 +33,8 @@ "Appel manqué de %s" "Appel en cours" "Appel en cours - travail" - "Appel Wi-Fi en cours" - "Appel Wi-Fi en cours - travail" + "Appel Wi-Fi en cours" + "Appel professionnel Wi-Fi en cours" "En attente" "Appel entrant" "Appel entrant avec photo" @@ -55,8 +55,8 @@ "Appel important avec photo, message et position" "Appel entrant important avec pièces jointes" "Appel entrant - travail" - "Appel Wi-Fi entrant" - "Appel Wi-Fi entrant - travail" + "Appel Wi-Fi entrant" + "Appel professionnel Wi-Fi entrant" "L\'appel entrant est suspect" "Demande de vidéo reçue" "Aucun service" @@ -73,7 +73,7 @@ "Répondre à l\'appel vidéo" "Veuillez désactiver le mode Avion avant de passer un appel." "Non enregistré sur le réseau" - "Réseau cellulaire non disponible." + "Réseau cellulaire non disponible." "Pour faire un appel, entrez un numéro valide." "Impossible d\'appeler." "Lancement de la séquence IHM..." @@ -134,8 +134,8 @@ "Mettre fin à l\'appel" "Conférence téléphonique" "Appel en cours" - "Poursuite de l\'appel à l\'aide de données cellulaires en cours…" - "Impossible de passer à un réseau Wi-Fi" - "L\'appel vidéo restera sur le réseau cellulaire. Des frais de données standards peuvent s\'appliquer." + "Poursuite de l\'appel utilisant des données mobiles en cours…" + "Impossible de passer à un réseau Wi-Fi" + "L\'appel vidéo restera sur le réseau cellulaire. Des frais de données standards peuvent s\'appliquer." "Ne plus afficher" diff --git a/java/com/android/incallui/res/values-fr/strings.xml b/java/com/android/incallui/res/values-fr/strings.xml index c77fc190e..162c242bd 100644 --- a/java/com/android/incallui/res/values-fr/strings.xml +++ b/java/com/android/incallui/res/values-fr/strings.xml @@ -33,8 +33,8 @@ "Appel manqué de %s" "Appel en cours" "Appel professionnel en cours" - "Appel Wi-Fi en cours" - "Appel Wi-Fi professionnel en cours" + "Appel Wi-Fi en cours" + "Appel Wi-Fi professionnel en cours" "En attente" "Appel entrant" "Appel entrant avec photo" @@ -55,8 +55,8 @@ "Appel important avec photo, message et position" "Appel entrant important avec pièces jointes" "Appel professionnel entrant" - "Appel Wi-Fi entrant" - "Appel Wi-Fi professionnel entrant" + "Appel Wi-Fi entrant" + "Appel Wi-Fi professionnel entrant" "Appel entrant indésirable suspecté" "Demande de vidéo reçue" "Aucun service" @@ -73,7 +73,7 @@ "Répondre à l\'appel vidéo" "Veuillez d\'abord désactiver le mode Avion, afin d\'effectuer un appel." "Non enregistré sur le réseau." - "Réseau mobile non disponible." + "Réseau mobile non disponible" "Pour émettre un appel, veuillez saisir un numéro valide." "Impossible d\'émettre l\'appel." "Lancement de la séquence IHM..." @@ -134,8 +134,8 @@ "Mettre fin à l\'appel" "Conférence téléphonique" "Appel en cours" - "Continuer l\'appel en utilisant les données mobiles…" - "Impossible de passer au réseau Wi-Fi" - "L\'appel vidéo va continuer sur le réseau mobile. Des frais standard liés à la consommation de données peuvent être facturés." + "Poursuite de l\'appel via les données mobiles…" + "Impossible de passer au réseau Wi-Fi" + "L\'appel vidéo va continuer sur le réseau mobile. Des frais standards liés à la consommation de données peuvent être facturés." "Ne plus afficher" diff --git a/java/com/android/incallui/res/values-gl/strings.xml b/java/com/android/incallui/res/values-gl/strings.xml index 53278e58e..d926b1b1e 100644 --- a/java/com/android/incallui/res/values-gl/strings.xml +++ b/java/com/android/incallui/res/values-gl/strings.xml @@ -33,8 +33,8 @@ "Chamada perdida de %s" "Chamada en curso" "Chamada de traballo saínte" - "Chamada wifi saínte" - "Chamada wifi de traballo saínte" + "Chamada saínte por wifi" + "Chamada de traballo saínte por wifi" "En espera" "Chamada entrante" "Chamada entrante con foto" @@ -55,8 +55,8 @@ "Chamada entrante importante con foto, mensaxe e localización" "Chamada entrante importante con anexos" "Chamada de traballo entrante" - "Chamada wifi entrante" - "Chamada wifi de traballo entrante" + "Chamada entrante por wifi" + "Chamada de traballo entrante por wifi" "Chamada entrante sospeitosa de spam" "Solicitude de vídeo entrante" "Sen servizo" @@ -73,7 +73,7 @@ "Responder á videochamada" "Para facer unha chamada, primeiro desactiva o modo avión." "Sen rexistro na rede" - "Rece móbil non dispoñible." + "A rede móbil non está dispoñible." "Para realizar unha chamada, introduce un número válido." "Non se pode chamar." "Iniciando secuencia MMI..." @@ -134,8 +134,8 @@ "Finalizar chamada" "Conferencia telefónica" "Chamada en curso" - "Continuando a chamada con datos móbiles…" - "Non se puido cambiar á rede wifi" - "A videochamada permanecerá na rede móbil. É posible que o operador aplique tarifas de datos estándar." + "Continuando a chamada con datos móbiles…" + "Non se puido cambiar á rede wifi" + "A videochamada permanecerá na rede móbil. É posible que se apliquen tarifas de datos estándar." "Non mostrar de novo" diff --git a/java/com/android/incallui/res/values-gu/strings.xml b/java/com/android/incallui/res/values-gu/strings.xml index 8b1ebe8e0..4a90fc568 100644 --- a/java/com/android/incallui/res/values-gu/strings.xml +++ b/java/com/android/incallui/res/values-gu/strings.xml @@ -33,8 +33,8 @@ "%s નો કૉલ ચૂકી ગયાં" "ચાલી રહેલ કૉલ" "ચાલી રહેલ કાર્ય કૉલ" - "ચાલુ Wi-Fi કૉલ" - "ચાલી રહેલ Wi-Fi કાર્ય કૉલ" + "ચાલી રહેલ Wi-Fi કૉલ" + "ચાલી રહેલ Wi-Fi કાર્ય કૉલ" "હોલ્ડ પર" "ઇનકમિંગ કૉલ" "ફોટો સાથે ઇનકમિંગ કૉલ" @@ -55,8 +55,8 @@ "ફોટો, સંદેશ અને સ્થાન સાથે મહત્વનો ઇનકમિંગ કૉલ" "જોડાણો સાથે મહત્વનો ઇનકમિંગ કૉલ" "ઇનકમિંગ કાર્ય કૉલ" - "ઇનકમિંગ Wi-Fi કૉલ" - "ઇનકમિંગ Wi-Fi કાર્ય કૉલ" + "ઇનકમિંગ Wi-Fi કૉલ" + "ઇનકમિંગ Wi-Fi કાર્ય કૉલ" "ઇનકમિંગ શંકાસ્પદ સ્પામ કૉલ" "આવનાર વિડિઓ વિનંતી" "કોઈ સેવા નથી" @@ -73,7 +73,7 @@ "વિડિઓ કૉલ લો" "કૉલ કરવા માટે, પહેલાં એરપ્લેન મોડને બંધ કરો." "નેટવર્ક પર નોંધણી કરાયેલ નથી." - "સેલ્યુલર નેટવર્ક ઉપલબ્ધ નથી." + "મોબાઇલ નેટવર્ક ઉપલબ્ધ નથી." "કૉલ કરવા માટે, માન્ય નંબર દાખલ કરો." "કૉલ કરી શકાતો નથી." "MMI અનુક્રમ પ્રારંભ કરી રહ્યાં છે…" @@ -134,8 +134,8 @@ "કૉલ સમાપ્ત કરો" "કૉન્ફરન્સ કૉલ" "કૉલમાં" - "સેલ્યુલર ડેટાની મદદથી કૉલ ચાલુ રાખી રહ્યાં છે…" - "Wi-Fi નેટવર્ક પર સ્વિચ કરી શક્યાં નથી" - "વિડિઓ કૉલ સેલ્યુલર નેટવર્ક પર રહેશે. માનક ડેટા શુલ્ક લાગુ થઈ શકે છે." + "મોબાઇલ ડેટાની મદદથી કૉલ ચાલુ રાખી રહ્યાં છે…" + "Wi-Fi નેટવર્ક પર સ્વિચ કરી શક્યાં નથી" + "વિડિઓ કૉલ, મોબાઇલ નેટવર્ક પર રહેશે. માનક ડેટા શુલ્ક લાગુ થઈ શકે છે." "આ ફરીથી બતાવશો નહીં" diff --git a/java/com/android/incallui/res/values-hi/strings.xml b/java/com/android/incallui/res/values-hi/strings.xml index 09563dfc4..d3a4dcfa8 100644 --- a/java/com/android/incallui/res/values-hi/strings.xml +++ b/java/com/android/incallui/res/values-hi/strings.xml @@ -33,8 +33,8 @@ "%s के छूटे कॉल" "चल रही कॉल" "कार्यस्थल की जारी कॉल" - "चल रहा वाई-फ़ाई कॉल" - "कार्यस्थल की जारी वाई-फ़ाई कॉल" + "जारी Wi‑Fi कॉल" + "जारी Wi‑Fi कार्य कॉल" "होल्ड पर" "इनकमिंग कॉल" "फ़ोटो के साथ इनकमिंग कॉल" @@ -55,8 +55,8 @@ "फोटो, संदेश और स्थान के साथ महत्वपूर्ण इनकमिंग कॉल" "अटैचमेंट के साथ महत्वपूर्ण इनकमिंग कॉल" "कार्यस्थल की आवक कॉल" - "इनकमिंग वाई-फ़ाई कॉल" - "कार्यस्थल की वाई-फ़ाई आवक कॉल" + "इनकमिंग Wi‑Fi कॉल" + "इनकमिंग Wi‑Fi कार्य कॉल" "संदिग्ध आवक स्पैम कॉल" "इनकमिंग वीडियो अनुरोध" "कोई सेवा नहीं" @@ -73,7 +73,7 @@ "वीडियो कॉल लें" "कॉल करने के लिए, पहले विमान मोड बंद करें." "नेटवर्क पर पंजीकृत नहीं." - "सेल्युलर नेटवर्क उपलब्ध नहीं." + "मोबाइल नेटवर्क उपलब्ध नहीं है." "कॉल करने के लिए, मान्‍य नंबर डालें." "कॉल नहीं किया जा सकता." "MMI अनुक्रम प्रारंभ हो रहा है…" @@ -134,8 +134,8 @@ "कॉल समाप्त करें" "कॉन्फ़्रेंस कॉल" "कॉल में" - "सेल्युलर डेटा का उपयोग करके कॉल जारी रखा जा रहा है…" - "वाई-फ़ाई नेटवर्क में नहीं बदला जा सका" - "वीडियो कॉल सेल्यूलर नेटवर्क पर बना रहेगा. मानक डेटा शुल्क लागू हो सकते हैं." + "मोबाइल डेटा का उपयोग करके कॉल जारी रखा जा रहा है…" + "Wi‑Fi नेटवर्क पर स्विच नहीं कर सका" + "वीडियो कॉल मोबाइल नेटवर्क पर बना रहेगा. मानक डेटा शुल्क लागू हो सकते हैं." "इसे दोबारा न दिखाएं" diff --git a/java/com/android/incallui/res/values-hr/strings.xml b/java/com/android/incallui/res/values-hr/strings.xml index 7af16133a..2d389e666 100644 --- a/java/com/android/incallui/res/values-hr/strings.xml +++ b/java/com/android/incallui/res/values-hr/strings.xml @@ -33,8 +33,8 @@ "Propušten poziv kontakta %s" "Poziv u tijeku" "Poslovni poziv u tijeku" - "Wi-Fi poziv u tijeku" - "Poslovni Wi-Fi poziv u tijeku" + "Wi-Fi poziv u tijeku" + "Poslovni Wi-Fi poziv u tijeku" "Na čekanju" "Dolazni poziv" "Dolazni poziv s fotografijom" @@ -55,8 +55,8 @@ "Važan poziv s fotografijom, porukom i lokacijom" "Važan dolazni poziv s privicima" "Dolazni poslovni poziv" - "Dolazni Wi-Fi poziv" - "Dolazni poslovni Wi-Fi poziv" + "Dolazni Wi-Fi poziv" + "Dolazni poslovni Wi-Fi poziv" "Mogući neželjeni dolazni poziv" "Dolazni zahtjev za videopoziv" "Nema usluge" @@ -73,7 +73,7 @@ "Preuzimanje videopoziva" "Da biste uspostavili poziv, prvo isključite način rada u zrakoplovu." "Nije registrirano na mreži." - "Mobilna mreža nije dostupna." + "Mobilna mreža nije dostupna." "Unesite važeći broj da biste uspostavili poziv." "Pozivanje nije moguće." "Pokretanje MMI sekvence…" @@ -134,8 +134,8 @@ "Prekid poziva" "Konferencijski poziv" "Poziv u tijeku" - "Poziv se nastavlja pomoću mobilnih podataka..." - "Prebacivanje na Wi-Fi mrežu nije moguće" - "Videopoziv će ostati na mobilnoj mreži. Možda ćete morati platiti podatkovni promet." + "Poziv se nastavlja pomoću mobilnih podataka..." + "Prebacivanje na Wi-Fi mrežu nije moguće" + "Videopoziv će ostati na mobilnoj mreži. Možda ćete morati platiti podatkovni promet." "Ne prikazuj ponovno" diff --git a/java/com/android/incallui/res/values-hu/strings.xml b/java/com/android/incallui/res/values-hu/strings.xml index 08d374b41..fe524216c 100644 --- a/java/com/android/incallui/res/values-hu/strings.xml +++ b/java/com/android/incallui/res/values-hu/strings.xml @@ -33,8 +33,8 @@ "Nem fogadott hívás: %s" "Hívás folyamatban" "Folyamatban lévő munkahelyi hívás" - "Folyamatban lévő Wi-Fi-hívás" - "Folyamatban lévő munkahelyi hívás Wi-Fin keresztül" + "Folyamatban lévő Wi-Fi-hívás" + "Folyamatban lévő munkahelyi hívás Wi-Fin keresztül" "Tartásban" "Bejövő hívás" "Bejövő hívás fotóval" @@ -55,8 +55,8 @@ "Fontos bejövő hívás fotóval, üzenettel és hellyel" "Fontos bejövő hívás mellékletekkel" "Bejövő munkahelyi hívás" - "Beérkező Wi-Fi-hívás" - "Bejövő munkahelyi hívás Wi-Fin keresztül" + "Beérkező Wi-Fi-hívás" + "Bejövő munkahelyi hívás Wi-Fin keresztül" "Bejövő gyanús spamhívás" "Bejövő videokérés" "Nincs szolgáltatás" @@ -73,7 +73,7 @@ "Videohívás fogadása" "Híváskezdeményezéshez kapcsolja ki a Repülőgép üzemmódot." "Nincs regisztrálva a hálózaton." - "A mobilhálózat nem érhető el." + "A mobilhálózat nem érhető el." "Hívásindításhoz adjon meg egy érvényes számot." "A hívás sikertelen." "MMI-sorozat indítása..." @@ -134,8 +134,8 @@ "Hívás befejezése" "Konferenciahívás" "Hívásban" - "Hívás folytatása mobil-adatkapcsolaton keresztül…" - "Nem sikerült Wi-Fi-hálózatra váltani" - "A videohívást továbbra is a mobilhálózaton folytatja. A mobilszolgáltató a normál adatforgalmi díjat számítja fel." + "Hívás folytatása mobil-adatkapcsolaton keresztül…" + "Nem sikerült Wi-Fi-hálózatra váltani" + "A videohívást továbbra is a mobilhálózaton folytatja. A mobilszolgáltató a normál adatforgalmi díjat számítja fel." "Ne jelenjen meg többé" diff --git a/java/com/android/incallui/res/values-hy/strings.xml b/java/com/android/incallui/res/values-hy/strings.xml index f6496d14d..4287820c2 100644 --- a/java/com/android/incallui/res/values-hy/strings.xml +++ b/java/com/android/incallui/res/values-hy/strings.xml @@ -33,8 +33,8 @@ "Բաց թողնված զանգ %s-ից" "Ընթացիկ զանգը" "Ընթացիկ աշխատանքային զանգ" - "Ընթացիկ զանգ Wi-Fi-ի միջոցով" - "Ընթացիկ աշխատանքային Wi-Fi զանգ" + "Ընթացիկ զանգ Wi-Fi-ի միջոցով" + "Ընթացիկ աշխատանքային զանգ Wi-Fi-ի միջոցով" "Սպասում" "Մուտքային զանգ" "Մուտքային զանգ՝ լուսանկարով" @@ -55,8 +55,8 @@ "Կարևոր մուտքային զանգ՝ կցորդներով" "Կարևոր մուտքային զանգ՝ կցորդներով" "Մուտքային աշխատանքային զանգ" - "Մուտքային զանգ Wi-Fi-ի միջոցով" - "Մուտքային աշխատանքային Wi-Fi զանգ" + "Մուտքային զանգ Wi-Fi-ի միջոցով" + "Մուտքային աշխատանքային զանգ Wi-Fi-ի միջոցով" "Մուտքային զանգը հավանաբար լցոն է" "Մուտքային տեսազանգի հայցում" "Ծառայություններ չկան" @@ -73,7 +73,7 @@ "Ընդունել տեսազանգը" "Զանգի կատարման համար նախ անջատեք թռիչքային ռեժիմը:" "Ցանցում գրանցված չէ:" - "Բջջային ցանցն անհասանելի է:" + "Բջջային ցանցն անհասանելի է:" "Զանգ կատարելու համար մուտքագրեք ճիշտ համար:" "Հնարավոր չէ զանգել:" "Մեկնարկում է MMI հաջորդականությունը..." @@ -134,8 +134,8 @@ "Ավարտել զանգը" "Կոնֆերանս զանգ" "Զանգ" - "Զանգն այժմ բջջային ինտերնետով է ընթանում…" - "Չհաջողվեց միանալ Wi-Fi ցանցին" - "Տեսազանգը կշարունակվի բջջային ցանցով: Գանձումը կկատարվի ըստ ձեր սակագնային պլանի:" + "Զանգն այժմ բջջային ինտերնետով է ընթանում…" + "Չհաջողվեց միանալ Wi-Fi ցանցին" + "Տեսազանգը կշարունակվի բջջային ցանցով: Գանձումը կկատարվի ըստ ձեր սակագնային պլանի:" "Այլևս ցույց չտալ" diff --git a/java/com/android/incallui/res/values-in/strings.xml b/java/com/android/incallui/res/values-in/strings.xml index 279e72d21..6de6136fb 100644 --- a/java/com/android/incallui/res/values-in/strings.xml +++ b/java/com/android/incallui/res/values-in/strings.xml @@ -33,8 +33,8 @@ "Panggilan tak terjawab dari %s" "Panggilan yang sedang berlangsung" "Panggilan telepon kerja yang sedang berlangsung" - "Panggilan Wi-Fi keluar" - "Panggilan Wi-Fi kerja yang sedang berlangsung" + "Panggilan Wi-Fi keluar" + "Panggilan kerja Wi-Fi yang berlangsung" "Ditangguhkan" "Panggilan masuk" "Panggilan masuk dengan foto" @@ -55,8 +55,8 @@ "Panggilan penting dengan foto, pesan, dan lokasi" "Panggilan masuk penting dengan lampiran" "Panggilan telepon kerja yang masuk" - "Panggilan Wi-Fi masuk" - "Panggilan telepon Wi-Fi kerja yang masuk" + "Panggilan Wi-Fi masuk" + "Panggilan kerja Wi-Fi masuk" "Panggilan masuk yang diduga spam" "Permintaan video masuk" "Tidak ada layanan" @@ -73,7 +73,7 @@ "Lakukan Video Call" "Untuk melakukan panggilan, pertama-tama matikan mode Pesawat." "Tidak terdaftar pada jaringan." - "Jaringan seluler tidak tersedia." + "Jaringan seluler tidak tersedia." "Untuk melakukan panggilan telepon, masukkan nomor yang valid." "Tidak dapat menelepon." "Memulai urutan MMI..." @@ -134,8 +134,8 @@ "Akhiri panggilan" "Telewicara" "Sedang menelepon" - "Melanjutkan panggilan menggunakan data seluler..." - "Tidak dapat beralih ke jaringan Wi-Fi" - "Video call akan tetap di jaringan seluler. Biaya data standar mungkin berlaku." + "Melanjutkan panggilan menggunakan data seluler..." + "Tidak dapat beralih ke jaringan Wi-Fi" + "Video call akan tetap di jaringan seluler. Tarif data standar mungkin berlaku." "Jangan tampilkan ini lagi" diff --git a/java/com/android/incallui/res/values-is/strings.xml b/java/com/android/incallui/res/values-is/strings.xml index 795e952c6..8393510c6 100644 --- a/java/com/android/incallui/res/values-is/strings.xml +++ b/java/com/android/incallui/res/values-is/strings.xml @@ -33,8 +33,8 @@ "Ósvarað símtal frá %s" "Samtal í gangi" "Vinnusímtal í gangi" - "Wi-Fi símtal stendur yfir" - "Vinnusímtal í gangi um Wi-Fi" + "Wi-Fi símtal stendur yfir" + "Vinnusímtal í gangi um Wi-Fi" "Í bið" "Móttekið símtal" "Móttekið símtal með mynd" @@ -55,8 +55,8 @@ "Mikilvægt móttekið símtal með mynd, skilaboðum og staðsetningu" "Mikilvægt móttekið símtal með viðhengjum" "Vinnusímtal berst" - "Wi-Fi símtal berst" - "Vinnusímtal berst um Wi-Fi" + "Wi-Fi símtal berst" + "Vinnusímtal berst um Wi-Fi" "Símtal sem berst er hugsanlega úr ruslnúmeri" "Myndbeiðni berst" "Ekkert símasamband" @@ -73,7 +73,7 @@ "Þiggja myndsímtal" "Til að hringja símtal þarftu fyrst að slökkva á flugstillingu." "Ekki skráð á símkerfi." - "Farsímakerfi ekki til staðar." + "Farsímakerfi ekki tiltækt." "Sláðu inn gilt númer til að hringja símtal." "Ekki hægt að hringja." "Ræsir MMI-runu…" @@ -134,8 +134,8 @@ "Ljúka símtali" "Símafundur" "Í símtali" - "Símtal heldur áfram og notar farsímagögn…" - "Ekki var hægt að skipta yfir á Wi-Fi-net" - "Myndsímtal verður áfram á farsímaneti. Stöðluð gjöld fyrir gagnaflutning kunna að eiga við." + "Símtal heldur áfram og notar farsímagögn…" + "Ekki var hægt að skipta yfir á Wi-Fi-net" + "Myndsímtal verður áfram á farsímaneti. Stöðluð gjöld fyrir gagnaflutning kunna að eiga við." "Ekki birta þetta aftur" diff --git a/java/com/android/incallui/res/values-it/strings.xml b/java/com/android/incallui/res/values-it/strings.xml index 836b93452..ca2b4b14a 100644 --- a/java/com/android/incallui/res/values-it/strings.xml +++ b/java/com/android/incallui/res/values-it/strings.xml @@ -33,8 +33,8 @@ "Chiamata senza risposta da %s" "Chiamata in corso" "Chiamata di lavoro in corso" - "Chiamata Wi-Fi in corso" - "Chiamata di lavoro tramite Wi-Fi in corso" + "Chiamata Wi-Fi in corso" + "Chiamata di lavoro tramite Wi-Fi in corso" "In attesa" "Chiamata in arrivo" "Chiamata in arrivo con foto" @@ -55,8 +55,8 @@ "Chiamata importante in arrivo con foto, messaggio e posizione" "Chiamata importante in arrivo con allegati" "Chiamata di lavoro in arrivo" - "Chiamata Wi-Fi in arrivo" - "Chiamata di lavoro in arrivo tramite Wi-Fi" + "Chiamata Wi-Fi in arrivo" + "Chiamata di lavoro tramite Wi-Fi in arrivo" "Chiamata di presunto spam in arrivo" "Richiesta video in arrivo" "Nessun servizio" @@ -73,7 +73,7 @@ "Ricevi videochiamata" "Per fare una telefonata, disattiva la modalità aereo." "Non registrato sulla rete." - "Rete cellulare non disponibile." + "Rete mobile non disponibile." "Per effettuare una chiamata, inserisci un numero valido." "Impossibile chiamare." "Inizio sequenza MMI..." @@ -134,8 +134,8 @@ "Termina chiamata" "Audioconferenza" "Chiamata in corso" - "Proseguimento della chiamata utilizzando la rete dati…" - "Impossibile passare alla rete Wi-Fi" - "La videochiamata rimarrà sulla rete cellulare. Potrebbero essere applicati costi standard per il traffico dati." + "Proseguimento della chiamata utilizzando i dati mobili…" + "Impossibile passare alla rete Wi-Fi" + "La videochiamata rimarrà sulla rete mobile. Potrebbero essere applicati costi standard per il traffico dati." "Non mostrare più questo messaggio" diff --git a/java/com/android/incallui/res/values-iw/strings.xml b/java/com/android/incallui/res/values-iw/strings.xml index 195cb0f25..326078ae8 100644 --- a/java/com/android/incallui/res/values-iw/strings.xml +++ b/java/com/android/incallui/res/values-iw/strings.xml @@ -33,8 +33,8 @@ "שיחה שלא נענתה מאת %s" "שיחה פעילה" "שיחת עבודה פעילה" - "‏שיחת Wi-Fi מתבצעת" - "‏שיחת עבודה פעילה ברשת WiFi" + "‏שיחת Wi-Fi פעילה" + "‏שיחת עבודה פעילה ברשת Wi‑Fi" "בהמתנה" "שיחה נכנסת" "שיחה נכנסת עם תמונה" @@ -55,8 +55,8 @@ "שיחה נכנסת חשובה עם תמונה, הודעה ומיקום" "שיחה נכנסת חשובה עם קבצים מצורפים" "שיחת עבודה נכנסת" - "‏שיחת Wi-Fi נכנסת" - "‏שיחת עבודה נכנסת ברשת WiFi" + "‏שיחת Wi-Fi נכנסת" + "‏שיחת עבודה נכנסת ברשת Wi‑Fi" "השיחה הנכנסת חשודה כספאם" "בקשת וידאו נכנסת" "אין שירות" @@ -73,7 +73,7 @@ "קבל את שיחת הווידאו" "כדי להתקשר, כבה תחילה את מצב טיסה." "לא רשום ברשת." - "רשת סלולרית אינה זמינה." + "הרשת הסלולרית אינה זמינה." "כדי להתקשר, הזן מספר טלפון חוקי." "לא ניתן להתקשר." "‏מתחיל רצף MMI…" @@ -134,8 +134,8 @@ "סיים שיחה" "שיחת ועידה" "בשיחה" - "ממשיך את השיחה באמצעות הרשת הסלולרית..." - "‏לא ניתן לעבור לרשת Wi-Fi" - "שיחת הווידאו תמשיך להיות ברשת הסלולרית. ייתכן שתחויב על ידי הספק הסלולרי בגין צריכת נתונים." + "ממשיך את השיחה באמצעות הרשת הסלולרית…" + "‏לא ניתן לעבור לרשת Wi-Fi" + "שיחת הווידאו תמשיך להיות ברשת הסלולרית. ייתכן שתחויב על שימוש בנתונים." "אל תציג זאת שוב" diff --git a/java/com/android/incallui/res/values-ja/strings.xml b/java/com/android/incallui/res/values-ja/strings.xml index 0e186fa3d..a54c4e12a 100644 --- a/java/com/android/incallui/res/values-ja/strings.xml +++ b/java/com/android/incallui/res/values-ja/strings.xml @@ -33,8 +33,8 @@ "%s さんからの不在着信" "通話中" "仕事の通話中" - "Wi-Fi通話を発信中" - "仕事の Wi-Fi 通話中" + "Wi-Fi 通話を発信中" + "仕事の Wi-Fi 通話を発信中" "保留中" "通話着信" "着信(写真あり)" @@ -55,8 +55,8 @@ "重要な着信(写真、メッセージ、位置情報あり)" "重要な着信(添付ファイルあり)" "仕事の通話が着信中" - "Wi-Fi通話が着信中" - "仕事の Wi-Fi 通話が着信中" + "Wi-Fi 通話が着信中" + "仕事の Wi-Fi 通話が着信中" "迷惑電話の疑いがある通話を着信しています" "ビデオハングアウトリクエスト着信" "通信サービスなし" @@ -73,7 +73,7 @@ "ビデオハングアウトを引き継ぐ" "機内モードをOFFにしてから発信してください。" "ご加入の通信サービスがありません" - "モバイルネットワークが利用できません。" + "モバイル ネットワークを利用できません。" "発信するには、有効な番号を入力してください。" "発信できません。" "MMIシーケンスを開始中..." @@ -134,8 +134,8 @@ "通話を終了" "グループ通話" "通話中" - "モバイルデータを使用して通話を継続しています…" - "Wi-Fi ネットワークに切り替えることができませんでした" - "引き続きモバイル ネットワークを使用してビデオ通話を続行します。通常のデータ通信料が適用される場合があります。" + "モバイルデータを使用して通話を継続しています…" + "Wi-Fi ネットワークに切り替えることができませんでした" + "引き続きモバイル ネットワークを使用してビデオハングアウトを続行します。通常のデータ通信料が適用される場合があります。" "今後このメッセージを表示しない" diff --git a/java/com/android/incallui/res/values-ka/strings.xml b/java/com/android/incallui/res/values-ka/strings.xml index 6c46bd0c7..fed398b49 100644 --- a/java/com/android/incallui/res/values-ka/strings.xml +++ b/java/com/android/incallui/res/values-ka/strings.xml @@ -33,8 +33,8 @@ "გამოტოვებული ზარი %s-ისგან" "მიმდინარე ზარი" "მიმდინარე ზარი (სამსახური)" - "მიმდინარე Wi-Fi ზარი" - "მიმდინარე Wi-Fi ზარი (სამსახური)" + "მიმდინარე Wi-Fi ზარი" + "მიმდინარე Wi-Fi ზარი (სამსახური)" "შეყოვნების რეჟიმში" "შემომავალი ზარი" "შემომავალი ზარი ფოტოთი" @@ -55,8 +55,8 @@ "ზარი ფოტოთი, შეტყობინებით და მდებარეობით" "მნიშვნელოვანი შემომავალი ზარი დანართებით" "შემომავალი ზარი (სამსახური)" - "შემომავალი Wi-Fi ზარი" - "შემომავალი Wi-Fi ზარი (სამსახური)" + "შემომავალი Wi-Fi ზარი" + "შემომავალი Wi-Fi ზარი (სამსახური)" "შემომავალი ზარი - სავარაუდოდ სპამი" "შემომავალი ვიდეოს მოთხოვნა" "სერვისი არ არის" @@ -73,7 +73,7 @@ "Take ვიდეო ზარი" "ზარის განსახორციელებლად, ჯერ თვითმფრინავის რეჟიმი უნდა გამორთოთ." "ქსელში რეგისტრირებული არ არის." - "ფიჭური ქსელი მიუწვდომელია" + "მობილური ქსელი მიუწვდომელია." "ზარის განხორციელებისათვის, შეიყვანეთ მოქმედი ნომერი." "არ ირეკება." "MMI თანმიმდევრობის დაწყება…" @@ -134,8 +134,8 @@ "ზარის დასრულება" "საკონფერენციო ზარი" "მონაწილეობს ზარში" - "ზარი გრძელდება მობილური ინტერნეტის გამოყენებით…" - "Wi-Fi ქსელზე გადართვა ვერ მოხერხდა" - "ვიდეოზარი ფიჭურ ქსელში დარჩება. შესაძლოა მოგიწიოთ მობილური ინტერნეტის სტანდარტული ფასის გადახდა." + "ზარი გრძელდება მობილური ინტერნეტის გამოყენებით…" + "Wi-Fi ქსელზე გადართვა ვერ მოხერხდა" + "ვიდეოზარი მობილური ინტერნეტის ქსელში დარჩება. შესაძლოა მოგიწიოთ მობილური ინტერნეტის სტანდარტული საფასურის გადახდა." "აღარ მაჩვენო" diff --git a/java/com/android/incallui/res/values-kk/strings.xml b/java/com/android/incallui/res/values-kk/strings.xml index 310ba4d28..42ac9b078 100644 --- a/java/com/android/incallui/res/values-kk/strings.xml +++ b/java/com/android/incallui/res/values-kk/strings.xml @@ -33,8 +33,8 @@ "%s қоңырауы өткізіп алынған" "Ағымдағы қоңырау" "Ағымдағы жұмыс қоңырауы" - "Ағымдық Wi-Fi қоңырауы" - "Ағымдағы Wi-Fi жұмыс қоңырауы" + "Қазіргі Wi-Fi қоңырауы" + "Қазіргі Wi-Fi жұмыс қоңырауы" "Күтуде" "Келген қоңырау" "Сурет тіркелген кіріс қоңырау" @@ -55,8 +55,8 @@ "Сурет, хабар және орын дерегі тіркелген маңызды кіріс қоңырау" "Тіркемелері бар маңызды кіріс қоңырау" "Кіріс жұмыс қоңырауы" - "Кіріс Wi-Fi қоңырауы" - "Кіріс Wi-Fi жұмыс қоңырауы" + "Кіріс Wi-Fi қоңырауы" + "Кіріс Wi-Fi жұмыс қоңырауы" "Кіріс қоңырауы спам болуы мүмкін" "Кіріс бейне сұрау" "Қызмет көрсетілмейді" @@ -73,7 +73,7 @@ "Бейне қоңырауды бері бұру" "Қоңырау шалу үшін алдымен Ұшақ режимін өшіріңіз." "Желіде тіркелмеген." - "Ұялы желі қол жетімді емес." + "Мобильдік желі қолжетімсіз." "Қоңырау шалу үшін жарамды нөмірді енгізіңіз." "Қоңырау шалу мүмкін емес." "MMI қатарын бастау…" @@ -134,8 +134,8 @@ "Қоңырауды аяқтау" "Мәжіліс қоңырауы" "Бос емес" - "Қоңырау ұялы дерек арқылы жалғасады..." - "Wi-Fi желісіне қосылу мүмкін болмады" - "Бейне қоңырау ұялы байланыс желісінде қалады. Стандартты деректер ақысы алынуы мүмкін." + "Қоңырау мобильдік желі арқылы жалғасуда…" + "Wi-Fi желісіне қосылу мүмкін болмады" + "Бейне қоңырау мобильдік желіде қалады. Стандартты мобильдік байланыс ақысы алынуы мүмкін." "Мұны қайтадан көрсетпеу" diff --git a/java/com/android/incallui/res/values-km/strings.xml b/java/com/android/incallui/res/values-km/strings.xml index 4fbafef71..c6238de2b 100644 --- a/java/com/android/incallui/res/values-km/strings.xml +++ b/java/com/android/incallui/res/values-km/strings.xml @@ -33,8 +33,8 @@ "ខកខាន​ទទួល​ពី %s" "កំពុង​បន្ត​ការ​ហៅ" "ការហៅពីកន្លែងការងារកំពុងដំណើរការ" - "ការហៅតាម Wi-Fi កំពុងបន្ត" - "ការហៅតាម Wi-Fi ពីកន្លែងការងារកំពុងដំណើរការ" + "ការហៅតាម Wi-Fi កំពុង​ដំណើរការ" + "ការហៅតាម Wi-Fi ពីកន្លែងការងារ​កំពុង​ដំណើរការ" "រង់ចាំ" "ការ​ហៅ​ចូល" "ការហៅ​ចូល​​ដែល​មាន​រូបថត" @@ -55,8 +55,8 @@ "ការ​ហៅ​ចូល​ដែល​សំខាន់​មាន​រូបថត សារ និង​ទីតាំង" "ការហៅ​​ចូល​ដែល​សំខាន់​មាន​ឯកសារ​ភ្ជាប់" "កំពុងហៅចូលពីកន្លែងការងារ" - "មានការហៅចូលមកតាម Wi-Fi" - "កំពុងហៅចូលពីកន្លែងការងារតាម Wi-Fi" + "មានការហៅចូលមកតាម Wi-Fi" + "មាន​ការ​ហៅ​ចូល​ពី​កន្លែង​ការងារ​តាម Wi-Fi" "ការ​ហៅ​បន្លំ​​ចូល​​​ដែល​សង្ស័យ" "សំណើ​ការ​ហៅ​ជា​វីដេអូ​ចូល" "គ្មាន​សេវា" @@ -73,7 +73,7 @@ "ទទួល​យក​ការ​ហៅ​វីដេអូ" "ដើម្បី​កំណត់​ការ​ហៅ ដំបូង​ត្រូវ​បិទ​របៀប​នៅ​ពេល​ជិះ​យន្តហោះ។" "មិន​បាន​ចុះ​ឈ្មោះ​នៅ​លើ​បណ្ដាញ។" - "បណ្ដាញ​ចល័ត​មិន​អាច​ប្រើ​បាន។" + "សេវា​ទូរសព្ទ​ចល័ត​មិន​អាច​ប្រើប្រាស់​បាន។" "ដើម្បីធ្វើការហៅ បញ្ចូលលេខដែលមានសុពលភាព។" "មិនអាចហៅបានទេ។" "កំពុង​ចាប់ផ្ដើម​លំដាប់ MMI ..." @@ -134,8 +134,8 @@ "បញ្ចប់ការហៅ" "ហៅជា​សន្និសីទ" "ស្ថិត​​ក្នុង​ការ​ហៅ" - "កំពុង​បន្ត​ហៅ​ទូរស័ព្ទ​ដោយ​ប្រើ​ទិន្នន័យ​ទូរស័ព្ទ​ចល័ត..." - "មិន​អាច​ប្ដូរ​ទៅ​បណ្ដាញ Wi-Fi" - "ការហៅ​ជា​វីដេអូ​នឹង​នៅ​តែ​​ស្ថិត​លើ​បណ្ដាញ​ទូរសព្ទ​ចល័ត។ អាច​​នឹង​​គិតថ្លៃ​ទិន្នន័យ​តាម​តម្លៃ​​ស្តង់ដារ។" + "កំពុង​បន្ត​ការហៅ​ទូរសព្ទ​ ដោយ​ប្រើប្រាស់​ទិន្នន័យ​ចល័ត…" + "មិន​អាច​ប្ដូរ​ទៅ​បណ្ដាញ Wi-Fi បាន​ទេ" + "ការហៅ​តាម​វីដេអូ​នឹង​នៅតែ​មាន​នៅ​លើ​បណ្ដាញ​ទូរសព្ទ។ អាច​នឹង​គិតថ្លៃ​ទិន្នន័យ​តាម​តម្លៃ​ស្តង់ដារ។" "កុំ​បង្ហាញ​វា​ម្ដង​ទៀត" diff --git a/java/com/android/incallui/res/values-kn/strings.xml b/java/com/android/incallui/res/values-kn/strings.xml index 5d47c7e0e..cb47e35d9 100644 --- a/java/com/android/incallui/res/values-kn/strings.xml +++ b/java/com/android/incallui/res/values-kn/strings.xml @@ -33,8 +33,8 @@ "%s ಅವರಿಂದ ಮಿಸ್ಡ್ ಕಾಲ್" "ಚಾಲ್ತಿಯಲ್ಲಿರುವ ಕರೆ" "ಚಾಲ್ತಿಯಲ್ಲಿರುವ ಕೆಲಸದ ಕರೆ" - "ಚಾಲ್ತಿಯಲ್ಲಿರುವ ವೈ-ಫೈ ಕರೆ" - "ಚಾಲ್ತಿಯಲ್ಲಿರುವ ವೈ-ಫೈ ಕೆಲಸದ ಕರೆ" + "ಚಾಲ್ತಿಯಲ್ಲಿರುವ ವೈ-ಫೈ ಕರೆ" + "ಚಾಲ್ತಿಯಲ್ಲಿರುವ ವೈ-ಫೈ ಕೆಲಸದ ಕರೆ" "ತಡೆಹಿಡಿಯಲಾಗಿದೆ" "ಒಳಬರುವ ಕರೆ" "ಫೋಟೋದೊಂದಿಗೆ ಒಳಬರುತ್ತಿರುವ ಕರೆ" @@ -55,8 +55,8 @@ "ಪೋಟೋ, ಸಂದೇಶ ಮತ್ತು ಸ್ಥಳದೊಂದಿಗೆ ಒಳಬರುತ್ತಿರುವ ಪ್ರಮುಖ ಕರೆ" "ಲಗತ್ತುಗಳೊಂದಿಗೆ ಒಳಬರುತ್ತಿರುವ ಪ್ರಮುಖ ಕರೆ" "ಒಳಬರುವ ಕೆಲಸದ ಕರೆ" - "ಒಳಬರುವ ವೈ-ಫೈ ಕರೆ" - "ಒಳಬರುವ ವೈ-ಫೈ ಕೆಲಸದ ಕರೆ" + "ಒಳಬರುವ ವೈ-ಫೈ ಕರೆ" + "ಒಳಬರುವ ವೈ-ಫೈ ಕೆಲಸದ ಕರೆ" "ಒಳಬರುವ ಶಂಕಿತ ಸ್ಪ್ಯಾಮ್ ಕರೆ" "ಒಳಬರುವ ವೀಡಿಯೊ ವಿನಂತಿ" "ಯಾವುದೇ ಸೇವೆಯಿಲ್ಲ" @@ -73,7 +73,7 @@ "ವೀಡಿಯೊ ಕರೆ ತೆಗೆದುಕೊಳ್ಳಿ" "ಕರೆ ಮಾಡಲು, ಮೊದಲು ಏರ್‌ಪ್ಲೇನ್‌‌ ಮೋಡ್‌‌ ಆಫ್‌ ಮಾಡಿ." "ನೆಟ್‌ವರ್ಕ್‌ನಲ್ಲಿ ಇನ್ನೂ ನೋಂದಣಿಯಾಗಿಲ್ಲ." - "ಸೆಲ್ಯುಲಾರ್ ನೆಟ್‌ವರ್ಕ್‌ ಲಭ್ಯವಿಲ್ಲ." + "ಮೊಬೈಲ್‌ ನೆಟ್‌ವರ್ಕ್‌ ಲಭ್ಯವಿಲ್ಲ." "ಕರೆಯನ್ನು ಮಾಡಲು, ಮಾನ್ಯವಾದ ಸಂಖ್ಯೆಯನ್ನು ನಮೂದಿಸಿ." "ಕರೆ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ." "MMI ಅನುಕ್ರಮ ಪ್ರಾರಂಭವಾಗುತ್ತಿದೆ…" @@ -134,8 +134,8 @@ "ಕರೆ ಅಂತ್ಯಗೊಳಿಸಿ" "ಕಾನ್ಫರೆನ್ಸ್ ಕರೆ" "ಕರೆಯಲ್ಲಿ" - "ಸೆಲ್ಯುಲಾರ್ ಡೇಟಾ ಬಳಸಿಕೊಂಡು ಕರೆ ಮುಂದುವರಿಸಲಾಗುತ್ತಿದೆ…" - "ವೈ-ಫೈ ನೆಟ್‍ವರ್ಕ್‌ಗೆ ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ" - "ಸೆಲ್ಯುಲಾರ್ ನೆಟ್‌ವರ್ಕ್‌ಗೆ ವೀಡಿಯೊ ಕರೆ ಹಾಗೆಯೇ ಉಳಿಯುತ್ತದೆ. ಪ್ರಮಾಣಿತ ಡೇಟಾ ಶುಲ್ಕಗಳು ಅನ್ವಯಿಸಬಹುದು." + "ಮೊಬೈಲ್ ಡೇಟಾ ಬಳಸಿಕೊಂಡು ಕರೆ ಮುಂದುವರಿಸಲಾಗುತ್ತಿದೆ…" + "ವೈ-ಫೈ ನೆಟ್‍ವರ್ಕ್‌ಗೆ ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ" + "ವೀಡಿಯೊ ಕರೆ ಮೊಬೈಲ್ ನೆಟ್‌ವರ್ಕ್‌ನಲ್ಲಿ ಹಾಗೆಯೇ ಉಳಿಯುತ್ತದೆ. ಪ್ರಮಾಣಿತ ಡೇಟಾ ಶುಲ್ಕಗಳು ಅನ್ವಯಿಸಬಹುದು." "ಮತ್ತೆ ಇದನ್ನು ತೋರಿಸಬೇಡ" diff --git a/java/com/android/incallui/res/values-ko/strings.xml b/java/com/android/incallui/res/values-ko/strings.xml index 44c53389a..676ba08f0 100644 --- a/java/com/android/incallui/res/values-ko/strings.xml +++ b/java/com/android/incallui/res/values-ko/strings.xml @@ -33,8 +33,8 @@ "%s의 부재중 전화" "현재 통화" "발신 업무 전화" - "Wi-Fi 발신 전화" - "발신 Wi-Fi 업무 전화" + "진행 중인 Wi-Fi 통화" + "진행 중인 Wi-Fi 업무 통화" "대기 중" "수신전화" "사진이 있는 수신 전화" @@ -55,8 +55,8 @@ "사진, 메시지, 위치가 있는 중요한 수신 전화" "첨부파일이 있는 중요한 수신 전화" "수신 업무 전화" - "Wi-Fi 수신 전화" - "수신 Wi-Fi 업무 전화" + "수신 Wi-Fi 통화" + "수신 Wi-Fi 업무 통화" "의심스러운 스팸 발신자로부터 온 전화" "수신 동영상 요청" "서비스 불가" @@ -73,7 +73,7 @@ "화상 통화 받기" "전화를 걸려면 먼저 비행기 모드를 해제하세요." "네트워크에서 등록되지 않았습니다." - "사용 가능한 이동통신망이 없습니다." + "모바일 네트워크를 사용할 수 없습니다." "전화를 걸려면 올바른 번호를 입력하세요." "전화를 걸 수 없습니다." "MMI 시퀀스 시작 중..." @@ -134,8 +134,8 @@ "통화 종료" "다자간 통화" "통화 중" - "모바일 데이터를 사용하여 계속 통화 중…" - "Wi-Fi 네트워크로 전환할 수 없습니다." - "화상 통화가 모바일 네트워크에서 유지됩니다. 표준 데이터 요금이 부과될 수 있습니다." + "모바일 데이터를 사용하여 통화를 계속합니다…" + "Wi-Fi 네트워크로 전환할 수 없습니다." + "화상 통화가 모바일 네트워크에서 계속됩니다. 표준 데이터 요금이 부과될 수 있습니다." "다시 표시하지 않음" diff --git a/java/com/android/incallui/res/values-ky/strings.xml b/java/com/android/incallui/res/values-ky/strings.xml index 0f8ee3cd8..1f6060412 100644 --- a/java/com/android/incallui/res/values-ky/strings.xml +++ b/java/com/android/incallui/res/values-ky/strings.xml @@ -33,8 +33,8 @@ "%s дегенден кабыл алынбаган чалуу" "Учурдагы чалуу" "Учурда болуп жаткан чалуу (жумуш боюнча)" - "Аткаруудагы Wi-Fi чалуу" - "Учурда болуп жаткан Wi-Fi чалуу (жумуш боюнча)" + "Учурдагы Wi-Fi чалуу" + "Учурдагы Wi-Fi чалуу (жумуш боюнча)" "Күтүлүүдө" "Кирүүчү чалуу" "Сүрөтү бар кирүүчү чалуу" @@ -55,8 +55,8 @@ "Сүрөт, билдирүү жана жайгашкан жер бар маанилүү чалуу" "Тиркемелери бар маанилүү кирүүчү чалуу" "Жумуш боюнча келип жаткан чалуу" - "Кирүүчү Wi-Fi чалуу" - "Жумуш боюнча келип жаткан Wi-Fi чалуу" + "Келип жаткан Wi-Fi чалуу" + "Жумуш боюнча келип жаткан Wi-Fi чалуу" "Келип жаткан чалуу спам окшойт" "Келип жаткан видео сурамы" "Байланыш жок" @@ -73,7 +73,7 @@ "Видео чалууну кабыл алуу" "Чалуу үчүн, адегенде учак режимин өчүрүңүз." "Тармакта катталган эмес." - "Мобилдик тармак жеткиликтүү эмес." + "Мобилдик тармак жок." "Чалуу үчүн, жарактуу номер киргизиңиз." "Чалынбай жатат." "MMI кезеги башталууда…" @@ -134,8 +134,8 @@ "Чалууну бүтүрүү" "Конференц-чалуу" "Чалууда" - "Уюлдук дайындарды пайдалануу менен чалууну улантууда..." - "Wi-Fi тармагына туташа албай койдук" - "Видео чалуу уюлдук тармак аркылуу аткарылат. Стандарттык тариф боюнча акы алынышы мүмкүн." + "Мобилдик дайындарды пайдалануу менен чалууну улантууда…" + "Wi-Fi тармагына туташа албай койдук" + "Видео чалуу мобилдик тармак аркылуу аткарылат. Стандарттык тариф боюнча акы алынышы мүмкүн." "Экинчи көрсөтүлбөсүн" diff --git a/java/com/android/incallui/res/values-lo/strings.xml b/java/com/android/incallui/res/values-lo/strings.xml index 56335d416..45a2a4089 100644 --- a/java/com/android/incallui/res/values-lo/strings.xml +++ b/java/com/android/incallui/res/values-lo/strings.xml @@ -33,8 +33,8 @@ "ສາຍບໍ່ໄດ້ຮັບຈາກ %s" "ສາຍທີ່ກຳລັງໂທອອກ" "ສາຍໂທອອກຈາກບ່ອນເຮັດວຽກ" - "ການ​ໂທ Wi​-Fi ທີ່ດໍາເນີນຢູ່" - "ສາຍໂທອອກ Wi-Fi ຈາກບ່ອນເຮັດວຽກ" + "ການໂທ Wi-Fi ທີ່ດໍາເນີນຢູ່" + "ການໂທ Wi-Fi ບ່ອນເຮັດວຽກທີ່ດໍາເນີນຢູ່" "ພັກສາຍຊົ່ວຄາວ" "ສາຍໂທເຂົ້າ" "ສາຍໂທເຂົ້າພ້ອມຮູບພາບ" @@ -55,8 +55,8 @@ "ສາຍໂທເຂົ້າສຳຄັນພ້ອມຮູບພາບ, ຂໍ້ຄວາມ ແລະ ສະຖານທີ່" "ສາຍໂທເຂົ້າສຳຄັນພ້ອມໄຟລ໌ແນບ" "ສາຍໂທເຂົ້າຈາກບ່ອນເຮັດວຽກ" - "ສາຍໂທເຂົ້າ Wi-Fi" - "ສາຍໂທເຂົ້າ Wi-Fi ຈາກບ່ອນເຮັດວຽກ" + "ສາຍໂທເຂົ້າ Wi-Fi" + "ສາຍໂທເຂົ້າ Wi-Fi ບ່ອນເຮັດວຽກ" "ມີການໂທທີ່ຄາດວ່າເປັນສະແປມໂທເຂົ້າມາ" "​ຄຳ​ຮ້ອງ​ຂໍ​ວິ​ດີ​ໂອ​ເຂົ້າ​ມາ" "ບໍ່ມີບໍລິການ" @@ -73,7 +73,7 @@ "ຮັບສາຍວິດີໂອ" "ເພື່ອໂທລະສັບ, ໃຫ້ປິດໂໝດຢູ່ເທິງຍົນກ່ອນ." "ບໍ່ໄດ້ລົງທະບຽນໃນເຄືອຂ່າຍ." - "ບໍ່​ມີ​ເຄືອ​ຂ່າຍ​ມື​ຖື​ທີ່​ສາ​ມາດ​ໃຊ້​ໄດ້." + "ເຄືອຂ່າຍມືຖືບໍ່ສາມາດໃຊ້ໄດ້." "ເພື່ອ​ທີ່​ຈະ​ໂທ, ປ້ອນ​ເບີ​ໂທ​ທີ່​ໃຊ້​ໄດ້​ເຂົ້າ​ໄປ." "ບໍ່​ສາ​ມາດ​ໂທ​ໄດ້." "ກຳລັງເລີ່ມຕົ້ນລຳດັບ MMI..." @@ -134,8 +134,8 @@ "ວາງສາຍ" "ການປະຊຸມທາງໂທລະສັບ" "ຢູ່ໃນສາຍ" - "ສືບຕໍ່ການໂທໂດຍໃຊ້ອິນເຕີເນັດມືຖື…" - "ບໍ່ສາມາດສະຫຼັບໄປໃຊ້ເຄືອຂ່າຍ Wi-Fi ໄດ້" - "ການໂທດ້ວຍວິດີໂອຈະຍັງໃຊ້ຜ່ານເຄືອຂ່າຍມືຖືຢູ່ ໂດຍອາດມີການຮຽກເກັບຄ່າບໍລິການຕາມປົກກະຕິ." + "ກຳລັງສືບຕໍ່ສາຍໂດຍໃຊ້ອິນເຕີເນັດມືຖື…" + "ບໍ່ສາມາດສະຫຼັບໄປໃຊ້ເຄືອຂ່າຍ Wi-Fi ໄດ້" + "ການໂທວິດີໂອຈະຍັງຄົງຢູ່ໃນເຄືອຂ່າຍມືຖືຕໍ່ໄປ. ອາດມີການຮຽກເກັບຄ່າບໍລິການມາດຕະຖານ." "ບໍ່ຕ້ອງສະແດງຂໍ້ຄວາມນີ້ອີກ" diff --git a/java/com/android/incallui/res/values-lt/strings.xml b/java/com/android/incallui/res/values-lt/strings.xml index 4d4a0c098..e63ca7018 100644 --- a/java/com/android/incallui/res/values-lt/strings.xml +++ b/java/com/android/incallui/res/values-lt/strings.xml @@ -33,8 +33,8 @@ "Praleistas skambutis nuo %s" "Vykstantis pokalbis" "Vykstantis darbo skambutis" - "Vykstantis „Wi-Fi“ skambutis" - "Vykstantis „Wi-Fi“ darbo skambutis" + "Vykstantis „Wi-Fi“ skambutis" + "Vykstantis „Wi-Fi“ darbo skambutis" "Sulaikyta" "Gaunamasis skambutis" "Gaunamasis skambutis su nuotrauka" @@ -55,15 +55,15 @@ "Svarbus gaunam. skamb. su nuotr., praneš. ir viet." "Svarbus gaunamasis skambutis su priedais" "Gaunamasis darbo skambutis" - "Gaunamasis „Wi-Fi“ skambutis" - "Gaunamasis „Wi-Fi“ darbo skambutis" + "Gaunamasis „Wi-Fi“ skambutis" + "Gaunamasis „Wi-Fi“ darbo skambutis" "Gaunamasis įtartinas šlamšto skambutis" "Gaunama vaizdo skambučio užklausa" "Nėra paslaugos" "Pasirinktas tinklas (%s) negalimas" "Atsakyti" "Padėti ragelį" - "Vaizdo skambutis" + "Vaizdo skam." "Balsas" "Atsiliepti" "Atmesti" @@ -73,7 +73,7 @@ "Atlikti vaizdo skambutį" "Jei norite skambinti, išjunkite lėktuvo režimą." "Neregistruota tinkle." - "Korinis tinklas nepasiekiamas" + "Mobiliojo ryšio tinklas nepasiekiamas." "Kad galėtumėte paskambinti, įveskite tinkamą numerį." "Nepavyko paskambinti." "Paleidžiama MMI seka..." @@ -134,8 +134,8 @@ "Baigti skambutį" "Konferencinis skambutis" "Skambinant" - "Skambutis tęsiamas naudojant mobiliojo ryšio duomenis…" - "Nepavyko prisijungti prie „Wi-Fi“ tinklo" - "Vaizdo skambutis ir toliau bus vykdomas naudojant mobiliojo ryšio tinklą. Gali būti taikomi įprasti duomenų mokesčiai." + "Skambutis tęsiamas naudojant mobiliojo ryšio duomenis…" + "Nepavyko prisijungti prie „Wi-Fi“ tinklo" + "Vaizdo skambutis ir toliau bus vykdomas naudojant mobiliojo ryšio tinklą. Gali būti taikomi įprasti duomenų mokesčiai." "Daugiau to nerodyti" diff --git a/java/com/android/incallui/res/values-lv/strings.xml b/java/com/android/incallui/res/values-lv/strings.xml index 9be46c4fd..441733a9b 100644 --- a/java/com/android/incallui/res/values-lv/strings.xml +++ b/java/com/android/incallui/res/values-lv/strings.xml @@ -33,8 +33,8 @@ "Neatbildēts zvans no: %s" "Pašreizējā saruna" "Notiekošs darba zvans" - "Notiekošs Wi-Fi zvans" - "Notiekošs darba Wi-Fi zvans" + "Notiekošs Wi-Fi zvans" + "Notiekošs darba Wi-Fi zvans" "Aizturēts" "Ienākošais zvans" "Ienākošais zvans ar fotoattēlu" @@ -55,8 +55,8 @@ "Zvans ar fotoattēlu, ziņojumu un atrašanās vietu" "Svarīgs ienākošais zvans ar pielikumiem" "Ienākošs darba zvans" - "Ienākošs Wi-Fi zvans" - "Ienākošs darba Wi-Fi zvans" + "Ienākošs Wi-Fi zvans" + "Ienākošs darba Wi-Fi zvans" "Ienākošs, iespējams, nevēlams zvans" "Ienākošs video pieprasījums" "Nav pakalpojuma" @@ -73,7 +73,7 @@ "Pārsūtīt videozvanu" "Lai veiktu zvanu, vispirms izslēdziet lidojuma režīmu." "Tīklā nav reģistrēts." - "Mobilais tīkls nav pieejams." + "Mobilais tīkls nav pieejams." "Lai veiktu zvanu, ievadiet derīgu numuru." "Nevar veikt zvanu." "Notiek MMI secības startēšana…" @@ -134,8 +134,8 @@ "Beigt zvanu" "Konferences zvans" "Notiek zvans" - "Zvans tiek turpināts, izmantojot mobilos datus…" - "Nevarēja pārslēgt uz Wi-Fi tīklu" - "Videozvans tiks turpināts mobilo sakaru tīklā. Var tikt piemērota standarta maksa par datu pārraidi." + "Zvans tiek turpināts, izmantojot mobilos datus…" + "Nevarēja pārslēgt uz Wi-Fi tīklu" + "Videozvans tiks turpināts mobilo sakaru tīklā. Var tikt piemērota standarta maksa par datu pārraidi." "Vairs nerādīt šo ziņojumu" diff --git a/java/com/android/incallui/res/values-mk/strings.xml b/java/com/android/incallui/res/values-mk/strings.xml index 03be1d951..b712fe032 100644 --- a/java/com/android/incallui/res/values-mk/strings.xml +++ b/java/com/android/incallui/res/values-mk/strings.xml @@ -33,8 +33,8 @@ "Пропуштен повик од %s" "Тековен повик" "Тековен работен повик" - "Појдовен повик преку Wi-Fi" - "Тековен работен повик преку Wi-Fi" + "Тековен повик преку Wi-Fi" + "Тековен работен повик преку Wi-Fi" "На чекање" "Дојдовен повик" "Дојдовен повик со фотографија" @@ -55,8 +55,8 @@ "Важен дојдовен повик со фото., порака и локација" "Важен дојдовен повик со прилози" "Дојдовен работен повик" - "Дојдовен повик преку Wi-Fi" - "Дојдовен работен повик преку Wi-Fi" + "Дојдовен повик преку Wi-Fi" + "Дојдовен работен повик преку Wi-Fi" "Дојдовниот повик може да е спам" "Дојдовно побарување за видео" "Нема услуга" @@ -73,7 +73,7 @@ "Прифатете видеоповик" "За да воспоставите повик, прво исклучете режим на работа во авион." "Не е регистриран на мрежа." - "Не е достапна мобилна мрежа." + "Нема достапна мобилна мрежа." "За да повикате, внесете важечки број." "Не може да повика." "Започнува MMI низа..." @@ -134,8 +134,8 @@ "Завршете го повикот" "Конференциски повик" "Повик во тек" - "Повикот ќе продолжи преку мобилен интернет…" - "Не можеше да се префрли на Wi-Fi-мрежа" - "Видеоповикот ќе остане на мобилната мрежа. Може да се наплати за интернет-сообраќај." + "Повикот ќе продолжи преку мобилен интернет…" + "Не можеше да се префрли на Wi-Fi-мрежа" + "Видеоповикот ќе остане на мобилната мрежа. Може да се наплати за мобилен интернет." "Не го прикажувај ова повторно" diff --git a/java/com/android/incallui/res/values-ml/strings.xml b/java/com/android/incallui/res/values-ml/strings.xml index e207ccd45..db9f56018 100644 --- a/java/com/android/incallui/res/values-ml/strings.xml +++ b/java/com/android/incallui/res/values-ml/strings.xml @@ -33,8 +33,8 @@ "%s എന്നതിൽ നിന്നുള്ള മിസ്‌ഡ് കോൾ" "കോൾ സജീവമാണ്" "ഓൺഗോയിംഗ് ഔദ്യോഗിക കോൾ" - "ഓൺഗോയിംഗ് വൈഫൈ കോൾ" - "ഓൺഗോയിംഗ് വൈഫൈ ഔദ്യോഗിക കോൾ" + "നിലവിലുള്ള വൈഫൈ കോൾ" + "നിലവിലുള്ള വൈഫൈ ഔദ്യോഗിക കോൾ" "ഹോള്‍ഡിലാണ്" "ഇന്‍കമിംഗ് കോള്‍" "ഫോട്ടോ ഉൾപ്പെട്ട ഇൻകമിംഗ് കോൾ" @@ -55,8 +55,8 @@ "ഫോട്ടോയും സന്ദേശവും ലൊക്കേഷനും ഉൾപ്പെട്ട പ്രധാനപ്പെട്ട ഇൻകമിംഗ് കോൾ" "അറ്റാച്ച്‌മെന്റുകൾ ഉൾപ്പെട്ട പ്രധാനപ്പെട്ട ഇൻകമിംഗ് കോൾ" "ഇൻകമിംഗ് ഔദ്യോഗിക കോൾ" - "ഇൻകമിംഗ് വൈഫൈ കോൾ" - "ഇൻകമിംഗ് വൈഫൈ ഔദ്യോഗിക കോൾ" + "ഇൻകമിംഗ് വൈഫൈ കോൾ" + "ഇൻകമിംഗ് വൈഫൈ ഔദ്യോഗിക കോൾ" "സംശയാസ്‌പദമായ ഇൻകമിംഗ് സ്‌പാം കോൾ" "ഇൻകമിംഗ് വീഡിയോ അഭ്യർത്ഥന" "സേവനമില്ല" @@ -73,7 +73,7 @@ "വീഡിയോ കോൾ അറ്റൻഡ് ചെയ്യുക" "ഒരു കോൾ വിളിക്കാൻ, ആദ്യം ഫ്ലൈറ്റ് മോഡ് ഓഫുചെയ്യുക." "നെറ്റ്‌വർക്കിൽ രജിസ്റ്റർ ചെയ്‌തിട്ടില്ല." - "സെല്ലുലാർ നെറ്റ്‌വർക്ക് ലഭ്യമല്ല." + "മൊബൈൽ നെറ്റ്‌വർക്ക് ലഭ്യമല്ല." "ഒരു കോൾ ചെയ്യുന്നതിന്, സാധുതയുള്ള നമ്പർ നൽകുക." "കോൾ ചെയ്യാനായില്ല." "MMI സീക്വൻസ് ആരംഭിക്കുന്നു…" @@ -134,8 +134,8 @@ "കോള്‍ അവസാനിപ്പിക്കൂ" "കോൺഫറൻസ് കോൾ" "കോളിലാണ്" - "സെല്ലുലാർ ഡാറ്റ ഉപയോഗിച്ച് കോൾ തുടരുന്നു…" - "Wi-Fi നെറ്റ്‌വർക്കിലേക്ക് മാറാനായില്ല" - "സെല്ലുലാർ നെറ്റ്‌വർക്കിൽത്തന്നെ വീഡിയോ കോൾ തുടരും. സാധാരണ ഡാറ്റ നിരക്കുകൾ ബാധകമാകാം." + "മൊബൈൽ ഡാറ്റ ഉപയോഗിച്ച് കോൾ തുടരുന്നു…" + "വൈഫൈ നെറ്റ്‌വർക്കിലേക്ക് മാറാനായില്ല" + "മൊബൈൽ നെറ്റ്‌വർക്കിൽത്തന്നെ വീഡിയോ കോൾ തുടരും. സാധാരണ ഡാറ്റ നിരക്കുകൾ ബാധകമാകാം." "ഇത് വീണ്ടും കാണിക്കരുത്" diff --git a/java/com/android/incallui/res/values-mn/strings.xml b/java/com/android/incallui/res/values-mn/strings.xml index 0e269170b..7757af9ac 100644 --- a/java/com/android/incallui/res/values-mn/strings.xml +++ b/java/com/android/incallui/res/values-mn/strings.xml @@ -33,8 +33,8 @@ "%s-н аваагүй дуудлага" "Хийгдэж буй дуудлага" "Залгаж буй албаны дуудлага" - "Ярьж буй Wi-Fi дуудлага" - "Залгаж буй Wi-Fi албаны дуудлага" + "Холбогдсон Wi-Fi дуудлага" + "Холбогдсон Wi-Fi албаны дуудлага" "Хүлээлгэнд" "Ирж буй дуудлага" "Зураг бүхий орж ирсэн дуудлага" @@ -55,8 +55,8 @@ "Зураг, зурвас, байршилтай орж ирсэн чухал дуудлага" "Хавсралт бүхий орж ирсэн чухал дуудлага" "Ирж буй албаны дуудлага" - "Орж ирсэн Wi-Fi дуудлага" - "Ирж буй Wi-Fi албаны дуудлага" + "Ирж буй Wi-Fi дуудлага" + "Ирж буй Wi-Fi албаны дуудлага" "Орж ирсэн сэжигтэй спам дуудлага" "Ирж буй видео хүсэлт" "Үйлчилгээ байхгүй" @@ -73,7 +73,7 @@ "Видео дуудлага авах" "Дуудлага хийхийн тулд юуны өмнө Нислэгийн төлвийг идэвхгүйжүүлнэ үү." "Сүлжээнд бүртгэгдээгүй." - "Үүрэн сүлжээ байхгүй." + "Мобайл сүлжээ байхгүй." "Дуудлага хийхийн тулд хүчин төгөлдөр дугаар оруулна уу." "Дуудлага хийх боломжгүй байна." "MMI дарааллыг эхлүүлж байна…" @@ -134,8 +134,8 @@ "Дуудлагыг таслах" "Хурлын дуудлага" "Ярьж байна" - "Үүрэн дата ашиглан дуудлагыг үргэлжлүүлж байна..." - "Wi-Fi сүлжээ рүү сэлгэж чадсангүй" - "Видео дуудлага үүрэн сүлжээнд үлдэнэ. Стандарт датаны төлбөр тооцогдож магадгүй." + "Мобайл дата ашиглан дуудлагыг үргэлжлүүлж байна…" + "Wi-Fi сүлжээ рүү сэлгэж чадсангүй" + "Видео дуудлага мобайл сүлжээнд үлдэнэ. Стандарт датаны төлбөр тооцогдож магадгүй." "Үүнийг дахин бүү үзүүл" diff --git a/java/com/android/incallui/res/values-mr/strings.xml b/java/com/android/incallui/res/values-mr/strings.xml index c56c61012..e422897b0 100644 --- a/java/com/android/incallui/res/values-mr/strings.xml +++ b/java/com/android/incallui/res/values-mr/strings.xml @@ -33,8 +33,8 @@ "%s कडील सुटलेला कॉल" "सुरू असलेला कॉल" "सुरु असलेला कार्य कॉल" - "सुरु असलेला वाय-फाय कॉल" - "सुरु असलेला वाय-फाय कार्य कॉल" + "सुरु असलेला वाय-फाय कॉल" + "सुरु असलेला वाय-फाय कार्य कॉल" "होल्ड वर" "येणारा कॉल" "फोटोसह येणारा कॉल" @@ -55,8 +55,8 @@ "फोटो, संदेश आणि स्थानासह महत्त्वाचा येणारा कॉल" "संलग्नकांसह महत्त्वाचा येणारा कॉल" "येणारा कार्य कॉल" - "येणारा वाय-फाय कॉल" - "येणारा वाय-फाय कार्य कॉल" + "येणारा वाय-फाय कॉल" + "येणारा वाय-फाय कार्य कॉल" "येणारा संशयित स्पॅम कॉल" "येणारी व्हिडिओ विनंती" "सेवा नाही" @@ -73,7 +73,7 @@ "व्हिडिओ कॉल घ्या" "कॉल करण्यासाठी, प्रथम विमान मोड बंद करा." "नेटवर्कवर नोंदणीकृत नाही." - "सेल्युलर नेटवर्क उपलब्ध नाही." + "मोबाइल नेटवर्क उपलब्ध नाही." "कॉल करण्यासाठी, एक वैध नंबर प्रविष्ट करा." "कॉल करू शकत नाही." "MMI क्रम प्रारंभ करीत आहे..." @@ -134,8 +134,8 @@ "कॉल समाप्त करा" "परिषद कॉल" "कॉल मध्ये" - "मोबाइल डेटा वापरून कॉल सुरू ठेवत आहेत…" - "वाय-फाय नेटवर्कवर स्विच करणे शक्य झाले नाही" - "व्हिडिओ कॉल मोबाईल नेटवर्कवर असेल. मानक डेटा शुल्क लागू होऊ शकतात." + "मोबाइल डेटा वापरून कॉल करणे सुरु ठेवत आहे..." + "वाय-फाय नेटवर्कवर स्विच करणे शक्य झाले नाही" + "व्हिडिओ कॉल मोबाइल नेटवर्कवर असेल. मानक डेटा शुल्क लागू शकतात." "हे पुन्हा दर्शवू नका" diff --git a/java/com/android/incallui/res/values-ms/strings.xml b/java/com/android/incallui/res/values-ms/strings.xml index a5be5934d..7a5900adb 100644 --- a/java/com/android/incallui/res/values-ms/strings.xml +++ b/java/com/android/incallui/res/values-ms/strings.xml @@ -33,8 +33,8 @@ "Panggilan tidak dijawab daripada %s" "Panggilan sedang berjalan" "Panggilan sedang berlangsung daripada tempat kerja" - "Panggilan Wi-Fi sedang berlangsung" - "Panggian Wi-Fi sedang berlangsung daripada tempat kerja" + "Panggilan Wi-Fi sedang berlangsung" + "Panggilan Wi-Fi daripada tempat kerja sedang berlangsung" "Ditunda" "Panggilan masuk" "Panggilan masuk dengan foto" @@ -55,15 +55,15 @@ "Panggilan masuk penting dengan foto, mesej dan lokasi" "Panggilan masuk penting dengan lampiran" "Panggilan masuk daripada tempat kerja" - "Panggilan Wi-Fi masuk" - "Panggilan masuk melalui Wi-Fi daripada tempat kerja" + "Panggilan masuk Wi-Fi" + "Panggilan masuk Wi-Fi daripada tempat kerja" "Disyaki panggilan spam masuk" "Permintaan video masuk" "Tiada perkhidmatan" "Rangkaian pilihan (%s) tidak tersedia" "Jawapan" "Letakkan gagang" - "Video dalam strim" + "Video" "Suara" "Terima" "Tolak" @@ -73,7 +73,7 @@ "Jawab Panggilan Video" "Untuk membuat panggilan, matikan mod Pesawat terlebih dahulu." "Tidak didaftarkan pada rangkaian." - "Rangkaian selular tidak tersedia." + "Rangkaian mudah alih tidak tersedia." "Untuk membuat panggilan, masukkan nombor yang sah." "Tidak dapat memanggil." "Memulakan jujukan MMI..." @@ -134,8 +134,8 @@ "Tamatkan panggilan" "Panggilan sidang" "Dalam panggilan" - "Meneruskan panggilan menggunakan data selular…" - "Tidak dapat beralih ke rangkaian Wi-Fi" - "Panggilan video akan menggunakan rangkaian selular. Caj data standard boleh dikenakan." + "Meneruskan panggilan menggunakan data mudah alih…" + "Tidak dapat beralih ke rangkaian Wi-Fi" + "Panggilan video akan menggunakan rangkaian mudah alih. Caj data standard boleh dikenakan." "Jangan tunjukkan ini lagi" diff --git a/java/com/android/incallui/res/values-my/strings.xml b/java/com/android/incallui/res/values-my/strings.xml index 5cca49874..5513b7975 100644 --- a/java/com/android/incallui/res/values-my/strings.xml +++ b/java/com/android/incallui/res/values-my/strings.xml @@ -33,8 +33,8 @@ "%s မှလွတ်သွားသော ခေါ်ဆိုမှု" "ဆက်သွားနေသော ဖုန်းခေါ်မှု" "ခေါ်နေဆဲ အလုပ်မှ ခေါ်ဆိုမှု" - "ခေါ်နေဆဲ ဝိုင်ဖိုင်ခေါ်ဆိုမှု" - "ခေါ်နေဆဲ Wi-Fi အလုပ်မှ ခေါ်ဆိုမှု" + "လက်ရှိ Wi-Fi ဖုန်းခေါ်ဆိုမှု" + "လက်ရှိ Wi-Fi အလုပ်ဖုန်းခေါ်ဆိုမှု" "ခဏ ကိုင်ထားစဉ်" "အဝင်ခေါ်ဆိုမှု" "ဓာတ်ပုံဖြင့် အဝင်ခေါ်ဆိုမှု" @@ -55,8 +55,8 @@ "ဓာတ်ပုံ၊မက်ဆေ့ဂျ်၊တည်နေရာဖြင့် အရေးကြီးခေါ်ဆိုမှု" "ပူးတွဲပါဖိုင်များဖြင့် အရေးကြီးသော အဝင်ခေါ်ဆိုမှု" "အဝင် ခေါ်ဆိုမှု" - "ဝင်လာသော ဝိုင်ဖိုင်ခေါ်ဆိုမှု" - "Wi-Fi အလုပ်မှ အဝင် ခေါ်ဆိုမှု" + "အဝင် Wi‑Fi ဖုန်းခေါ်ဆိုမှု" + "အဝင် Wi‑Fi အလုပ်ဖုန်းခေါ်ဆိုမှု" "ခေါ်နေသော မသင်္ကာဖွယ်ရာ စပမ်းခေါ်ဆိုမှု" "အသံ ခေါ်ဆိုမှုအဖြစ် တောင်းဆိုမှု" "ဝန်ဆောင်မှု မရှိပါ" @@ -73,7 +73,7 @@ "ဗီဒီယိုခေါ်ဆိုမှုလွှဲယူပါ" "ဖုန်းခေါ်ဆိုမှုပြုရန်, လေယာဥ်ပျံပေါ်အသုံးပြုသောစနစ်ကို ပိတ်ပါ" "ကွန်ယက်ပေါ်မှာ မှတ်ပုံတင်မှု မပြုလုပ်ထားပါ" - "ဆဲလ်လူလာ ကွန်ရက် မရှိပါ။" + "မိုဘိုင်းကွန်ရက် မရနိုင်ပါ" "ဖုန်းခေါ်ရန်အတွက်၊ သင့်လျော်သည့်နံပါတ် ရိုက်ထည့်ပါ။" "မခေါ်ဆိုနိုင်ပါ။" "MMI အမှတ်စဉ်ကို စတင်နေပါသည်…" @@ -134,8 +134,8 @@ "ခေါ်ဆိုမှုအပြီးသတ်ရန်" "အစည်းအဝေးခေါ်ဆိုမှု" "ဖုန်းပြောနေသည်" - "ဆယ်လူလာဒေတာသုံးပြီး ဆက်လက်ခေါ်ဆိုနေသည်…" - "Wi-Fi ကွန်ရက်သို့ မပြောင်းနိုင်ပါ" - "ဗီဒီယိုခေါ်ဆိုမှုသည် ဆယ်လူလာကွန်ရက်တွင် ဆက်ရှိနေပါမည်။ ပုံမှန်ဒေတာသုံးစွဲခများ ကျသင့်နိုင်ပါသည်။" + "မိုဘိုင်းဒေတာသုံးပြီး ဆက်လက်ခေါ်ဆိုနေသည်…" + "Wi‑Fi ကွန်ရက်သို့ မပြောင်းနိုင်ပါ" + "ဗီဒီယိုခေါ်ဆိုမှုသည် မိုဘိုင်းကွန်ရက်တွင် ဆက်ရှိနေပါမည်။ ပုံမှန်ဒေတာသုံးစွဲခများ ကျသင့်နိုင်ပါသည်။" "ဤသည်ကို ထပ်မပြပါနှင့်" diff --git a/java/com/android/incallui/res/values-nb/strings.xml b/java/com/android/incallui/res/values-nb/strings.xml index d0883a2cc..4e8d79668 100644 --- a/java/com/android/incallui/res/values-nb/strings.xml +++ b/java/com/android/incallui/res/values-nb/strings.xml @@ -33,8 +33,8 @@ "Tapt anrop fra %s" "Pågående samtale" "Pågående jobbanrop" - "Pågående Wi-Fi-anrop" - "Pågående jobbanrop via Wi-Fi" + "Pågående Wi-Fi-samtale" + "Pågående jobbsamtale via Wi-Fi" "Parkert" "Innkommende samtale" "Innkommende anrop med bilde" @@ -55,8 +55,8 @@ "Viktig anrop med bilde, melding og posisjon" "Viktig innkommende anrop med vedlegg" "Innkommende jobbanrop" - "Innkommende anrop via Wi-Fi" - "Innkommende jobbanrop via Wi-Fi" + "Innkommende anrop via Wi-Fi" + "Innkommende jobbanrop via Wi-Fi" "Innkommende anrop fra en mulig useriøs oppringer" "Innkommende videoforespørsel" "Ingen tjeneste" @@ -73,7 +73,7 @@ "Svar på videoanropet" "For å ringe, slå av flymodus først." "Ikke registrert på nettverket." - "Mobilnettverket er ikke tilgjengelig." + "Mobilnettverket er ikke tilgjengelig." "Skriv inn et gyldig nummer for å plassere en samtale." "Kan ikke ringe." "Begynner MMI-sekvens…" @@ -134,8 +134,8 @@ "Avslutt samtalen" "Telefonmøte" "Samtale pågår" - "Fortsetter samtalen via mobildata …" - "Kan ikke bytte til Wi-Fi-nettverk" - "Videosamtalen blir værende på mobilnettet. Standard datakostnader kan påløpe." + "Fortsetter samtalen via mobildata …" + "Kunne ikke bytte til Wi-Fi-nettverk" + "Videosamtalen blir værende på mobilnettverket. Standard datakostnader kan påløpe." "Ikke vis dette igjen" diff --git a/java/com/android/incallui/res/values-ne/strings.xml b/java/com/android/incallui/res/values-ne/strings.xml index b5894797c..b19c2ae80 100644 --- a/java/com/android/incallui/res/values-ne/strings.xml +++ b/java/com/android/incallui/res/values-ne/strings.xml @@ -33,8 +33,8 @@ "%s बाट आएको छुटेको कल" "चलिरहेको कल" "चालू रहेको कार्यको कल" - "चालु रहेको WI-Fi कल" - "चालू रहेको Wi-Fi कार्यको कल" + "जारी रहेको WI-Fi कल" + "Wi-Fi मार्फत जारी रहेको कार्यालयको कल" "होल्डमा" "आगमन कल" "तस्बिरसहितको आगमन कल" @@ -55,8 +55,8 @@ "तस्बिर, सन्देश र स्थानसहितको महत्त्वपूर्ण आगमन कल" "समावेश गरिएको वस्तुसहितको महत्त्वपूर्ण आगमन कल" "आगमन कार्यको कल" - "आगमन Wi-Fi कल" - "आगमन Wi-Fi कार्यको कल" + "Wi-Fi मार्फत आगमन कल" + "Wi-Fi मार्फत कार्यालयबाट आएको कल" "शंकास्पद आगमन स्प्याम कल" "आगमन भिडियो अनुरोध" "सेवा छैन" @@ -73,7 +73,7 @@ "भिडियो कल लिनुहोस्" "कल राख्नका लागि, पहिले हवाइजहाज मोड बन्द गर्नुहोस्।" "नेटवर्कमा दर्ता भएको छैन।" - "सेलुलर सञ्जाल उपलब्ध छैन।" + "मोबाइल नेटवर्क उपलब्ध छैन।" "एक कल गर्नको लागि, एक वैध नम्बर प्रविष्ट गर्नुहोस्।" "कल गर्न सक्दैन।" "MMI अनुक्रम सुरु गर्दै..." @@ -134,8 +134,8 @@ "कल अन्त्य गर्नुहोस्" "सम्मेलन कल" "कलमा" - "सेलुलर डेटा प्रयोग गरी कललाई निरन्तरता दिइँदै…" - "Wi-Fi नेटवर्कमा स्विच गर्न सकिएन" - "भिडियो कल सेलुलर नेटवर्कमा रहने छ। मानक डेटा शुल्क लाग्न सक्छ।" + "मोबाइल डेटा प्रयोग गरी कललाई निरन्तरता दिइँदै…" + "Wi-Fi नेटवर्कमा स्विच गर्न सकिएन" + "भिडियो कल मोबाइल नेटवर्कमा रहने छ। मानक डेटा शुल्क लाग्न सक्छ।" "यसलाई फेरि नदेखाउनुहोस्" diff --git a/java/com/android/incallui/res/values-nl/strings.xml b/java/com/android/incallui/res/values-nl/strings.xml index 930acdc86..73508818e 100644 --- a/java/com/android/incallui/res/values-nl/strings.xml +++ b/java/com/android/incallui/res/values-nl/strings.xml @@ -33,8 +33,8 @@ "Gemiste oproep van %s" "Actieve oproep" "Actieve zakelijke oproep" - "Actieve wifi-oproep" - "Actieve zakelijke oproep via wifi" + "Actieve wifi-oproep" + "Actieve zakelijke oproep via wifi" "In de wacht" "Inkomende oproep" "Inkomende oproep met foto" @@ -55,15 +55,15 @@ "Belangrijke oproep met foto, bericht en locatie" "Belangrijke inkomende oproep met bijlagen" "Inkomende zakelijke oproep" - "Inkomende wifi-oproep" - "Inkomende zakelijke oproep via wifi" + "Inkomende wifi-oproep" + "Inkomende zakelijke oproep via wifi" "Inkomende vermoedelijke spamoproep" "Binnenkomend videoverzoek" "Geen service" "Geselecteerd netwerk (%s) niet beschikbaar" "Antwoord" "Ophangen" - "InStream-video" + "Video" "Spraak" "Accepteren" "Weigeren" @@ -73,7 +73,7 @@ "Videogesprek beantwoorden" "Als je wilt bellen, moet je eerst de Vliegtuigmodus uitschakelen." "Niet geregistreerd op netwerk." - "Mobiel netwerk niet beschikbaar." + "Mobiel netwerk niet beschikbaar." "Als je wilt bellen, moet je een geldig nummer invoeren." "Kan niet bellen." "MMI-reeks starten..." @@ -134,8 +134,8 @@ "Oproep beëindigen" "Telefonische vergadering" "In gesprek" - "Gesprek voortzetten via mobiele data…" - "Overschakelen naar wifi-netwerk mislukt" - "Videogesprek loopt via mobiel netwerk. Er kunnen standaard datakosten in rekening worden gebracht." + "Gesprek voortzetten via mobiele data…" + "Overschakelen naar wifi-netwerk mislukt" + "Videogesprek loopt via mobiel netwerk. Er kunnen standaard datakosten in rekening worden gebracht." "Dit niet meer weergeven" diff --git a/java/com/android/incallui/res/values-no/strings.xml b/java/com/android/incallui/res/values-no/strings.xml index d0883a2cc..4e8d79668 100644 --- a/java/com/android/incallui/res/values-no/strings.xml +++ b/java/com/android/incallui/res/values-no/strings.xml @@ -33,8 +33,8 @@ "Tapt anrop fra %s" "Pågående samtale" "Pågående jobbanrop" - "Pågående Wi-Fi-anrop" - "Pågående jobbanrop via Wi-Fi" + "Pågående Wi-Fi-samtale" + "Pågående jobbsamtale via Wi-Fi" "Parkert" "Innkommende samtale" "Innkommende anrop med bilde" @@ -55,8 +55,8 @@ "Viktig anrop med bilde, melding og posisjon" "Viktig innkommende anrop med vedlegg" "Innkommende jobbanrop" - "Innkommende anrop via Wi-Fi" - "Innkommende jobbanrop via Wi-Fi" + "Innkommende anrop via Wi-Fi" + "Innkommende jobbanrop via Wi-Fi" "Innkommende anrop fra en mulig useriøs oppringer" "Innkommende videoforespørsel" "Ingen tjeneste" @@ -73,7 +73,7 @@ "Svar på videoanropet" "For å ringe, slå av flymodus først." "Ikke registrert på nettverket." - "Mobilnettverket er ikke tilgjengelig." + "Mobilnettverket er ikke tilgjengelig." "Skriv inn et gyldig nummer for å plassere en samtale." "Kan ikke ringe." "Begynner MMI-sekvens…" @@ -134,8 +134,8 @@ "Avslutt samtalen" "Telefonmøte" "Samtale pågår" - "Fortsetter samtalen via mobildata …" - "Kan ikke bytte til Wi-Fi-nettverk" - "Videosamtalen blir værende på mobilnettet. Standard datakostnader kan påløpe." + "Fortsetter samtalen via mobildata …" + "Kunne ikke bytte til Wi-Fi-nettverk" + "Videosamtalen blir værende på mobilnettverket. Standard datakostnader kan påløpe." "Ikke vis dette igjen" diff --git a/java/com/android/incallui/res/values-pa/strings.xml b/java/com/android/incallui/res/values-pa/strings.xml index 22cd7da3b..b21cbd3a6 100644 --- a/java/com/android/incallui/res/values-pa/strings.xml +++ b/java/com/android/incallui/res/values-pa/strings.xml @@ -33,8 +33,8 @@ "%s ਤੋਂ ਖੁੰਝੀ ਹੋਈ ਕਾਲ" "ਜਾਰੀ ਕਾਲ" "ਕੰਮ ਸਬੰਧਿਤ ਜਾਰੀ ਕਾਲ" - "ਜਾਰੀ Wi-Fi ਕਾਲ" - "ਕੰਮ ਸਬੰਧਿਤ ਜਾਰੀ Wi-Fi ਕਾਲ" + "ਜਾਰੀ Wi‑Fi ਕਾਲ" + "ਕੰਮ ਸਬੰਧੀ ਜਾਰੀ Wi‑Fi ਕਾਲ" "ਹੋਲਡ ਤੇ" "ਇਨਕਮਿੰਗ ਕਾਲ" "ਫ਼ੋਟੋ ਨਾਲ ਇਨਕਮਿੰਗ ਕਾਲ" @@ -55,8 +55,8 @@ "ਫ਼ੋਟੋ, ਸੁਨੇਹੇ ਅਤੇ ਟਿਕਾਣੇ ਨਾਲ ਮਹੱਤਵਪੂਰਨ ਇਨਕਮਿੰਗ ਕਾਲ" "ਅਟੈਚਮੈਂਟਾਂ ਨਾਲ ਮਹੱਤਵਪੂਰਨ ਇਨਕਮਿੰਗ ਕਾਲ" "ਕੰਮ ਸਬੰਧਿਤ ਆ ਰਹੀ ਕਾਲ" - "ਇਨਕਮਿੰਗ Wi-Fi ਕਾਲ" - "ਕੰਮ ਸਬੰਧਿਤ ਆ ਰਹੀ Wi-Fi ਕਾਲ" + "ਆ ਰਹੀ Wi‑Fi ਕਾਲ" + "ਕੰਮ ਸਬੰਧੀ ਆ ਰਹੀ Wi‑Fi ਕਾਲ" "ਸ਼ੱਕੀ ਸਪੈਮ ਕਾਲ ਆ ਰਹੀ ਹੈ" "ਇਨਕਮਿੰਗ ਵੀਡੀਓ ਬੇਨਤੀ" "ਕੋਈ ਸੇਵਾ ਨਹੀਂ" @@ -73,7 +73,7 @@ "ਵੀਡੀਓ ਕਾਲ ਲਓ" "ਇੱਕ ਕਾਲ ਕਰਨ ਲਈ, ਪਹਿਲਾਂ ਏਅਰਪਲੇਨ ਮੋਡ ਬੰਦ ਕਰੋ।" "ਨੈਟਵਰਕ ਤੇ ਰਜਿਸਟਰ ਨਹੀਂ ਕੀਤਾ।" - "ਸੈਲਿਊਲਰ ਨੈਟਵਰਕ ਉਪਲਬਧ ਨਹੀਂ" + "ਮੋਬਾਈਲ ਨੈੱਟਵਰਕ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।" "ਇੱਕ ਕਾਲ ਕਰਨ ਲਈ, ਇੱਕ ਪ੍ਰਮਾਣਿਕ ਨੰਬਰ ਦਰਜ ਕਰੋ।" "ਕਾਲ ਨਹੀਂ ਕਰ ਸਕਦਾ।" "MMI ਕੜੀ ਚਾਲੂ ਕਰ ਰਿਹਾ ਹੈ…" @@ -134,8 +134,8 @@ "ਕਾਲ ਸਮਾਪਤ ਕਰੋ" "ਕਾਨਫਰੰਸ ਕਾਲ" "ਕਾਲ ਵਿੱਚ" - "ਸੈਲਿਊਲਰ ਡੈਟੇ ਦੀ ਵਰਤੋਂ ਨਾਲ ਕਾਲ ਜਾਰੀ ਰੱਖੀ ਜਾ ਰਹੀ ਹੈ…" - "Wi-Fi ਨੈੱਟਵਰਕ \'ਤੇ ਬਦਲੀ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ" - "ਵੀਡੀਓ ਕਾਲ ਸੈਲਿਊਲਰ ਨੈੱਟਵਰਕ \'ਤੇ ਰਹੇਗੀ। ਸਧਾਰਨ ਡੈਟਾ ਖਰਚੇ ਲਾਗੂ ਹੋ ਸਕਦੇ ਹਨ।" + "ਮੋਬਾਈਲ ਡੈਟੇ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਕਾਲ ਜਾਰੀ ਰੱਖੀ ਜਾ ਰਹੀ ਹੈ…" + "Wi‑Fi ਨੈੱਟਵਰਕ \'ਤੇ ਬਦਲੀ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ" + "ਵੀਡੀਓ ਕਾਲ ਮੋਬਾਈਲ ਨੈੱਟਵਰਕ \'ਤੇ ਜਾਰੀ ਰਹੇਗੀ। ਮਿਆਰੀ ਡੈਟਾ ਖਰਚੇ ਲਾਗੂ ਹੋ ਸਕਦੇ ਹਨ।" "ਇਸ ਨੂੰ ਦੁਬਾਰਾ ਨਾ ਵਿਖਾਓ" diff --git a/java/com/android/incallui/res/values-pl/strings.xml b/java/com/android/incallui/res/values-pl/strings.xml index 77c83399f..451c8ba73 100644 --- a/java/com/android/incallui/res/values-pl/strings.xml +++ b/java/com/android/incallui/res/values-pl/strings.xml @@ -33,8 +33,8 @@ "Nieodebrane połączenie od: %s" "Trwa połączenie" "Trwa połączenie służbowe" - "Trwające połączenie przez Wi-Fi" - "Trwa połączenie służbowe przez Wi-Fi" + "Trwające połączenie przez Wi-Fi" + "Trwa połączenie służbowe przez Wi-Fi" "Oczekujące" "Połączenie" "Połączenie przychodzące ze zdjęciem" @@ -55,8 +55,8 @@ "Ważne połączenie przychodzące z załącznikami" "Ważne połączenie przychodzące z załącznikami" "Przychodzące połączenie służbowe" - "Przychodzące połączenie przez Wi-Fi" - "Przychodzące połączenie służbowe przez Wi-Fi" + "Przychodzące połączenie przez Wi-Fi" + "Przychodzące połączenie służbowe przez Wi-Fi" "Przychodzące połączenie podejrzanie o spam" "Przychodzące żądanie wideo" "Brak usługi" @@ -73,7 +73,7 @@ "Odbierz rozmowę wideo" "Aby rozpocząć połączenie, wyłącz najpierw tryb samolotowy" "Nie zarejestrowano w sieci" - "Sieć komórkowa jest niedostępna." + "Sieć komórkowa jest niedostępna." "Aby zadzwonić, wybierz prawidłowy numer." "Nie można dzwonić." "Rozpoczynanie sekwencji MMI..." @@ -134,8 +134,8 @@ "Zakończ połączenie" "Połączenie konferencyjne" "W trakcie rozmowy" - "Kontynuuję rozmowę przy użyciu transmisji danych komórkowych…" - "Nie udało się przełączyć na sieć Wi-Fi" - "Rozmowa wideo pozostanie w sieci komórkowej. Za transfer danych może zostać pobrana opłata." + "Kontynuuję rozmowę przy użyciu mobilnej transmisji danych…" + "Nie udało się przełączyć na sieć Wi-Fi" + "Rozmowa wideo będzie nadal prowadzona przez sieć komórkową. Za transfer danych może zostać pobrana opłata." "Nie pokazuj ponownie tego komunikatu" 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 b0e46dfa3..f3c1b2367 100644 --- a/java/com/android/incallui/res/values-pt-rBR/strings.xml +++ b/java/com/android/incallui/res/values-pt-rBR/strings.xml @@ -33,8 +33,8 @@ "Chamada perdida de %s" "Chamada em andamento" "Chamada de trabalho em andamento" - "Chamada Wi-Fi em andamento" - "Chamada trabalho por Wi-Fi em andamento" + "Chamada por Wi-Fi em andamento" + "Chamada de trabalho por Wi-Fi em andamento" "Em espera" "Chamada recebida" "Chamada recebida com foto" @@ -55,8 +55,8 @@ "Chamada recebida importante com foto, mensagem e local" "Chamada recebida importante com anexos" "Chamada de trabalho recebida" - "Chamada Wi-Fi recebida" - "Chamada de trabalho recebida por Wi-Fi" + "Chamada recebida por Wi-Fi" + "Chamada de trabalho recebida por Wi-Fi" "Chamada recebida suspeita (spam)" "Recebendo solicitação de vídeo" "Sem serviço" @@ -73,7 +73,7 @@ "Atender à videochamada" "Para fazer uma chamada, primeiro desative o modo avião." "Não registrado na rede." - "Rede celular não disponível." + "Rede móvel indisponível." "Para realizar uma chamada, digite um número válido." "Não é possível realizar chamadas." "Iniciando sequência MMI…" @@ -134,8 +134,8 @@ "Encerrar chamada" "Teleconferência" "Em chamada" - "Continuando a chamada com dados da rede celular…" - "Não foi possível alternar para a rede Wi-Fi" - "A videochamada continuará via rede celular. Sujeito a cobranças por uso de dados." + "Continuando chamada por dados móveis…" + "Não foi possível alternar para a rede Wi-Fi" + "A videochamada continuará via rede móvel. O uso de dados está sujeito a cobranças padrão." "Não exibir novamente" 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 b42b0e56c..104043229 100644 --- a/java/com/android/incallui/res/values-pt-rPT/strings.xml +++ b/java/com/android/incallui/res/values-pt-rPT/strings.xml @@ -33,8 +33,8 @@ "Chamada não atendida de %s" "Chamada em curso" "Chamada de trabalho em curso" - "Chamada Wi-Fi em curso" - "Chamada de trabalho por Wi-Fi em curso" + "Chamada por Wi-Fi em curso" + "Chamada de trabalho por Wi-Fi em curso" "Em espera" "Chamada recebida" "Chamada recebida com foto" @@ -55,8 +55,8 @@ "." "Chamada recebida importante com anexos" "Chamada de trabalho recebida" - "Chamada Wi-Fi recebida" - "Chamada de trabalho recebida por Wi-Fi" + "Chamada por Wi-Fi recebida" + "Chamada de trabalho por Wi-Fi recebida" "A receber chamada spam suspeita" "Pedido de vídeo recebido" "Nenhum serviço" @@ -73,7 +73,7 @@ "Aceitar videochamada" "Para efectuar uma chamada, desactive primeiro o modo para Avião." "Sem registo na rede." - "Rede móvel não disponível." + "Rede móvel não disponível." "Para telefonar, introduza um número válido." "Não é possível telefonar." "A iniciar sequência de MMI..." @@ -134,8 +134,8 @@ "Terminar chamada" "Chamada de conferência" "Numa chamada" - "A continuar a chamada com dados móveis…" - "Não foi possível mudar para a rede Wi-Fi" - "As videochamadas continuarão a ser efetuadas através de rede móvel. Poderão ser aplicados custos de dados." + "A continuar a chamada com dados móveis…" + "Não foi possível mudar para a rede Wi-Fi." + "As videochamadas irão continuar a ser efetuadas através da rede móvel. Poderão ser aplicados custos de dados padrão." "Não voltar a mostrar este aviso" diff --git a/java/com/android/incallui/res/values-pt/strings.xml b/java/com/android/incallui/res/values-pt/strings.xml index b0e46dfa3..f3c1b2367 100644 --- a/java/com/android/incallui/res/values-pt/strings.xml +++ b/java/com/android/incallui/res/values-pt/strings.xml @@ -33,8 +33,8 @@ "Chamada perdida de %s" "Chamada em andamento" "Chamada de trabalho em andamento" - "Chamada Wi-Fi em andamento" - "Chamada trabalho por Wi-Fi em andamento" + "Chamada por Wi-Fi em andamento" + "Chamada de trabalho por Wi-Fi em andamento" "Em espera" "Chamada recebida" "Chamada recebida com foto" @@ -55,8 +55,8 @@ "Chamada recebida importante com foto, mensagem e local" "Chamada recebida importante com anexos" "Chamada de trabalho recebida" - "Chamada Wi-Fi recebida" - "Chamada de trabalho recebida por Wi-Fi" + "Chamada recebida por Wi-Fi" + "Chamada de trabalho recebida por Wi-Fi" "Chamada recebida suspeita (spam)" "Recebendo solicitação de vídeo" "Sem serviço" @@ -73,7 +73,7 @@ "Atender à videochamada" "Para fazer uma chamada, primeiro desative o modo avião." "Não registrado na rede." - "Rede celular não disponível." + "Rede móvel indisponível." "Para realizar uma chamada, digite um número válido." "Não é possível realizar chamadas." "Iniciando sequência MMI…" @@ -134,8 +134,8 @@ "Encerrar chamada" "Teleconferência" "Em chamada" - "Continuando a chamada com dados da rede celular…" - "Não foi possível alternar para a rede Wi-Fi" - "A videochamada continuará via rede celular. Sujeito a cobranças por uso de dados." + "Continuando chamada por dados móveis…" + "Não foi possível alternar para a rede Wi-Fi" + "A videochamada continuará via rede móvel. O uso de dados está sujeito a cobranças padrão." "Não exibir novamente" diff --git a/java/com/android/incallui/res/values-ro/strings.xml b/java/com/android/incallui/res/values-ro/strings.xml index db8be10e2..b78be2e6a 100644 --- a/java/com/android/incallui/res/values-ro/strings.xml +++ b/java/com/android/incallui/res/values-ro/strings.xml @@ -33,8 +33,8 @@ "Apel nepreluat de la %s" "Apel în desfășurare" "Apel de serviciu în desfășurare" - "Apel Wi-Fi în desfășurare" - "Apel de serviciu prin Wi-Fi în desfășurare" + "Apel Wi-Fi în desfășurare" + "Apel de serviciu prin Wi-Fi în desfășurare" "În așteptare" "Apel de intrare" "Apel primit cu fotografie" @@ -55,8 +55,8 @@ "Apel primit important cu poză, mesaj și locație" "Apel primit important cu atașamente" "Apel de serviciu primit" - "Apel prin Wi-Fi primit" - "Apel de serviciu prin Wi-Fi primit" + "Apel primit prin Wi-Fi" + "Apel de serviciu primit prin Wi-Fi" "Un apel primit posibil spam" "Solicitare de trecere la apel video" "Fără serviciu" @@ -73,7 +73,7 @@ "Preluați apelul video" "Pentru a efectua un apel, mai întâi dezactivați modul Avion." "Neînregistrat în rețea." - "Rețeaua mobilă nu este disponibilă" + "Rețeaua mobilă nu este disponibilă." "Pentru a apela, introduceți un număr valid." "Nu se poate apela." "Se pornește secvența MMI..." @@ -134,8 +134,8 @@ "Încheiați apelul" "Teleconferință" "Apel în desfășurare" - "Se continuă apelul folosind datele mobile…" - "Nu s-a putut comuta la rețeaua Wi-Fi" - "Apelul video rămâne în rețeaua mobilă. Se pot aplica tarife standard pentru date." + "Se continuă apelul folosind datele mobile…" + "Nu s-a putut comuta la rețeaua Wi-Fi" + "Apelul video continuă prin rețeaua mobilă. Se pot aplica tarife standard pentru date." "Nu mai afișa acest mesaj" diff --git a/java/com/android/incallui/res/values-ru/strings.xml b/java/com/android/incallui/res/values-ru/strings.xml index 8fd924ec6..06276c601 100644 --- a/java/com/android/incallui/res/values-ru/strings.xml +++ b/java/com/android/incallui/res/values-ru/strings.xml @@ -33,8 +33,8 @@ "Пропущенные вызовы от абонента %s" "Текущий вызов" "Текущий звонок (работа)" - "Текущий Wi-Fi-звонок" - "Текущий Wi-Fi-звонок (работа)" + "Текущий вызов по Wi-Fi" + "Текущий вызов по Wi-Fi (работа)" "Ждет ответа" "Входящий вызов" "Входящий вызов с фотографией" @@ -55,8 +55,8 @@ "Важный вызов с фото, сообщением и геоданными" "Важный входящий вызов с прикрепленными файлами" "Входящий звонок (работа)" - "Входящий Wi-Fi-звонок" - "Входящий Wi-Fi-звонок (работа)" + "Входящий вызов по Wi-Fi" + "Входящий вызов по Wi-Fi (работа)" "Входящий вызов: подозрение на спам" "Входящий видеовызов" "Сеть не найдена" @@ -73,7 +73,7 @@ "Продолжить на этом устройстве" "Перед тем как звонить, отключите режим полета." "Нет регистрации в сети." - "Мобильная сеть недоступна." + "Мобильная сеть недоступна." "Недействительный номер." "Не удалось позвонить." "Запуск последовательности MMI..." @@ -134,8 +134,8 @@ "Завершить вызов" "Конференц-вызов" "Вызов" - "Переключение на мобильные данные…" - "Не удалось подключиться к сети Wi-Fi" - "Видеовызов будет выполняться по мобильной сети. Может взиматься стандартная плата за передачу данных." + "Переключение на мобильный Интернет…" + "Не удалось переключиться на сеть Wi-Fi" + "Видеовызов будет выполняться по мобильной сети. Может взиматься стандартная плата за передачу данных." "Больше не показывать" diff --git a/java/com/android/incallui/res/values-si/strings.xml b/java/com/android/incallui/res/values-si/strings.xml index 989879ae0..0497b7831 100644 --- a/java/com/android/incallui/res/values-si/strings.xml +++ b/java/com/android/incallui/res/values-si/strings.xml @@ -33,8 +33,8 @@ "%s වෙතින් මඟ හැරුණු ඇමතුම" "කරගෙනය යන ඇමතුම" "කරගෙන යන කාර්යාල ඇමතුම" - "දැනට ක්‍රියාත්මක Wi-Fi ඇමතුම" - "කරගෙන යන Wi-Fi කාර්යාල ඇමතුම" + "කරගෙන යන Wi-Fi ඇමතුම" + "කරගෙන යන Wi-Fi කාර්යාල ඇමතුම" "රඳවා ගනිමින්" "එන ඇමතුම" "ඡායාරූපය සමග එන ඇමතුම" @@ -55,8 +55,8 @@ "ඡායාරූපය, පණිවිඩය සහ ස්ථානය සමග වැදගත් එන ඇමතුම" "ඇමුණුම් සමග වැදගත් එන ඇමතුම" "පැමිණෙන කාර්යාල ඇමතුම" - "පැමිණෙන Wi-Fi ඇමතුම" - "පැමිණෙන Wi-Fi කාර්යාල ඇමතුම" + "එන Wi-Fi ඇමතුම" + "එන Wi-Fi කාර්යාල ඇමතුම" "එන සැකසහිත අයාචිත තැපැල් ඇමතුම" "පැමිණෙන වීඩියෝ ඉල්ලීම" "සේවාව නැත" @@ -73,7 +73,7 @@ "වීඩියෝ ඇමතුම ගන්න" "ඇමතුමක් ගැනීමට, මුලින්ම ගුවන්යානා ආකාරය අක්‍රිය කරන්න." "ජාලය මත ලියාපදිංචි වී නැත." - "සෙලියුලර් ජාලය නොමැත" + "ජංගම ජාලය නොමැත." "ඇමතුමක් ලබාගැනීමට, වලංගු අංකයක් ලබාගන්න." "ඇමතුම් ගැනීමට නොහැක." "MMI අනුපිළිවෙල ආරම්භ කරමින්…" @@ -134,8 +134,8 @@ "ඇමතුම අවසන් කරන්න" "සම්මන්ත්‍රණ ඇමතුම" "ඇමතුමක" - "සෙලියුලර් දත්ත භාවිතයෙන් ඇමතුම දිගටම කරගෙන යමින්…" - "Wi-Fi ජාලය වෙත මාරු කිරීමට නොහැකි විය" - "වීඩියෝ ඇමතුම සෙලියුලර් ජාලයේ පවතිනු ඇත. සම්මත දත්ත ගාස්තු අදාළ විය හැකිය." + "ජංගම දත්ත භාවිතයෙන් ඇමතුම දිගටම කරගෙන යමින්…" + "Wi-Fi ජාලය වෙත මාරු කිරීමට නොහැකි විය" + "වීඩියෝ ඇමතුම ජංගම ජාලයේ පවතිනු ඇත. සම්මත දත්ත ගාස්තු අදාළ විය හැකිය." "නැවත මෙය නොපෙන්වන්න" diff --git a/java/com/android/incallui/res/values-sk/strings.xml b/java/com/android/incallui/res/values-sk/strings.xml index d09ba44d0..b83cd949b 100644 --- a/java/com/android/incallui/res/values-sk/strings.xml +++ b/java/com/android/incallui/res/values-sk/strings.xml @@ -33,8 +33,8 @@ "Zmeškaný hovor od volajúceho %s" "Prebiehajúci hovor" "Prebiehajúci pracovný hovor" - "Odchádzajúci hovor prostredníctvom siete Wi-Fi" - "Prebiehajúci pracovný hovor cez Wi-Fi" + "Prebiehajúci hovor cez Wi‑Fi" + "Prebiehajúci pracovný hovor cez Wi‑Fi" "Podržaný hovor" "Prichádzajúci hovor" "Prichádzajúci hovor s fotkou" @@ -55,8 +55,8 @@ "Dôležitý prich. hovor s fotkou, správou a polohou" "Dôležitý prichádzajúci hovor s prílohami" "Prichádzajúci pracovný hovor" - "Prichádzajúci hovor prostredníctvom siete Wi-Fi" - "Prichádzajúci pracovný hovor cez Wi-Fi" + "Prichádzajúci hovor cez Wi‑Fi" + "Prichádzajúci pracovný hovor cez Wi‑Fi" "Prichádzajúci hovor, pri ktorom je podozrenie, že ide o spam" "Prichádzajúca žiadosť o video" "Žiadny signál" @@ -73,7 +73,7 @@ "Prevziať videohovor" "Ak chcete telefonovať, vypnite najprv režim v lietadle." "Prihlásenie do siete nebolo úspešné." - "Mobilná sieť nie je k dispozícii." + "Mobilná sieť nie je k dispozícii." "Ak chcete volať, zadajte platné číslo" "Hovor nie je možné uskutočniť" "Prebieha spúšťanie sekvencie MMI..." @@ -134,8 +134,8 @@ "Ukončiť hovor" "Konferenčný hovor" "Prebieha hovor" - "Pokračuje sa v hovore pomocou mobilných dát…" - "Nepodarilo sa prepnúť na sieť Wi-Fi" - "Videohovor bude pokračovať v mobilnej sieti. Môžu sa účtovať štandardné poplatky za prenos dát." + "Pokračuje sa v hovore pomocou mobilných dát…" + "Nepodarilo sa prepnúť na sieť Wi‑Fi" + "Videohovor bude pokračovať v mobilnej sieti. Môžu sa účtovať štandardné poplatky za prenos dát." "Informácie nabudúce nezobrazovať" diff --git a/java/com/android/incallui/res/values-sl/strings.xml b/java/com/android/incallui/res/values-sl/strings.xml index b083e1bae..cf51ff55b 100644 --- a/java/com/android/incallui/res/values-sl/strings.xml +++ b/java/com/android/incallui/res/values-sl/strings.xml @@ -33,8 +33,8 @@ "Neodgovorjeni klic od: %s" "Aktivni klic" "Aktivni delovni klic" - "Odhodni klic prek Wi-Fi-ja" - "Aktivni delovni klic prek omrežja Wi-Fi" + "Aktivni klic prek omrežja Wi-Fi" + "Aktivni delovni klic prek omrežja Wi-Fi" "Zadržano" "Dohodni klic" "Dohodni klic s fotografijo" @@ -55,8 +55,8 @@ "Pomemben klic s fotografijo, sporočilom, lokacijo" "Pomemben dohodni klic s prilogami" "Dohodni delovni klic" - "Dohodni klic prek Wi-Fi-ja" - "Dohodni delovni klic prek omrežja Wi-Fi" + "Dohodni klic prek omrežja Wi-Fi" + "Dohodni delovni klic prek omrežja Wi-Fi" "Domnevno neželeni dohodni klic" "Dohodna zahteva za video" "Ni storitve" @@ -73,7 +73,7 @@ "Sprejmi videoklic" "Če želite poklicati, najprej izklopite način za letalo." "Ni registrirano v omrežju." - "Mobilno omrežje ni na voljo." + "Mobilno omrežje ni na voljo." "Če želite opraviti klic, vnesite veljavno številko." "Klicanje ni mogoče." "Začetek zaporedja MMI ..." @@ -134,8 +134,8 @@ "Končaj klic" "Konferenčni klic" "Poteka klic" - "Nadaljevanje klica prek prenosa podatkov v mobilnih omrežjih …" - "Ni bilo mogoče preklopiti v omrežje Wi-Fi" - "Videoklic bo še naprej potekal v mobilnem omrežju. Morda boste morali plačati standardne stroške prenosa podatkov." + "Nadaljevanje klica prek prenosa podatkov v mobilnem omrežju …" + "Ni bilo mogoče preklopiti v omrežje Wi-Fi" + "Videoklic bo še naprej potekal v mobilnem omrežju. Morda boste morali plačati standardne stroške prenosa podatkov." "Tega ne kaži več" diff --git a/java/com/android/incallui/res/values-sq/strings.xml b/java/com/android/incallui/res/values-sq/strings.xml index fd1964266..76bb87b80 100644 --- a/java/com/android/incallui/res/values-sq/strings.xml +++ b/java/com/android/incallui/res/values-sq/strings.xml @@ -33,8 +33,8 @@ "Telefonatë e humbur nga %s" "Telefonatë në vazhdim" "Telefonatë pune dalëse" - "Telefonatë në vazhdim me Wi-Fi" - "Telefonatë pune dalëse përmes Wi-Fi" + "Telefonatë në vazhdim me Wi-Fi" + "Telefonatë pune dalëse me Wi-Fi" "Në pritje" "Telefonatë hyrëse" "Telefonatë hyrëse me fotografi" @@ -55,8 +55,8 @@ "Tel. e rëndësishme me foto, mesazh e vendndodhje" "Telefonatë hyrëse e rëndësishme me bashkëngjitje" "Telefonatë pune hyrëse" - "Telefonatë hyrëse Wi-Fi" - "Telefonatë pune hyrëse përmes Wi-Fi" + "Telefonatë hyrëse me Wi-Fi" + "Telefonatë pune hyrëse me Wi-Fi" "Telefonatë e dyshuar si e padëshiruar" "Kërkesë për video hyrëse" "Nuk ka shërbim" @@ -73,7 +73,7 @@ "Prano telefonatën me video" "Për të kryer telefonatë, së pari çaktivizo modalitetin e aeroplanit." "I paregjistruar në rrjet." - "Rrjeti celular nuk mundësohet." + "Rrjeti celular nuk mundësohet." "Për të kryer një telefonatë, fut një numër të vlefshëm." "Nuk mund të telefonojë." "Po fillon sekuencën MMI…" @@ -134,8 +134,8 @@ "Mbylle telefonatën" "Telefonatë konferencë" "Në telefonatë" - "Po vazhdon telefonatën duke përdorur të dhënat celulare…" - "Nuk mund të kalonte në rrjetin Wi-Fi" - "Telefonata me video do të mbetet në rrjetin celular. Mund të zbatohen tarifat standarde." + "Po vazhdon telefonatën duke përdorur të dhënat celulare…" + "Nuk mund të kalonte në rrjetin Wi-Fi" + "Telefonata me video do të mbetet në rrjetin celular. Mund të zbatohen tarifat standarde të të dhënave." "Mos e shfaq më këtë" diff --git a/java/com/android/incallui/res/values-sr/strings.xml b/java/com/android/incallui/res/values-sr/strings.xml index 4fa7a6133..85e76a9e9 100644 --- a/java/com/android/incallui/res/values-sr/strings.xml +++ b/java/com/android/incallui/res/values-sr/strings.xml @@ -33,8 +33,8 @@ "Пропуштен позив од: %s" "Актуелни позив" "Текући позив за Work" - "Текући Wi-Fi позив" - "Текући позив за Work преко Wi-Fi-ја" + "Wi‑Fi позив у току" + "Wi‑Fi пословни позив у току" "На чекању" "Долазни позив" "Долазни позив са сликом" @@ -55,8 +55,8 @@ "Важан долазни позив са сликом, поруком и локацијом" "Важан долазни позив са прилозима" "Долазни позив за Work" - "Долазни Wi-Fi позив" - "Долазни позив за Work преко Wi-Fi-ја" + "Долазни Wi‑Fi позив" + "Долазни Wi‑Fi пословни позив" "Сумња на непожељан долазни позив" "Захтев за долазни видео позив" "Нема услуге" @@ -73,7 +73,7 @@ "Преузми видео позив" "Да бисте упутили позив, прво искључите режим рада у авиону." "Није регистровано на мрежи." - "Мобилна мрежа није доступна." + "Мобилна мрежа није доступна." "Да бисте упутили позив, унесите важећи број." "Позив није успео." "Покретање MMI секвенце" @@ -134,8 +134,8 @@ "Завршите позив" "Конференцијски позив" "У позиву" - "Позив се наставља помоћу мобилних података…" - "Пребацивање на Wi-Fi мрежу није успело" - "Видео позив ће остати на мобилној мрежи. Могу да важе стандардне накнаде за пренос података." + "Позив се наставља помоћу мобилних података…" + "Пребацивање на Wi‑Fi мрежу није успело" + "Видео позив ће остати на мобилној мрежи. Важе стандардне накнаде за пренос података." "Не приказуј ово поново" diff --git a/java/com/android/incallui/res/values-sv/strings.xml b/java/com/android/incallui/res/values-sv/strings.xml index 6d58d90f3..4bbce1d6a 100644 --- a/java/com/android/incallui/res/values-sv/strings.xml +++ b/java/com/android/incallui/res/values-sv/strings.xml @@ -33,8 +33,8 @@ "Missat samtal från %s" "Pågående samtal" "Pågående jobbsamtal" - "Pågående Wi-Fi-samtal" - "Pågående jobbsamtal via Wi-Fi" + "Pågående Wi-Fi-samtal" + "Pågående jobbsamtal på Wi-Fi" "Parkerat" "Inkommande samtal" "Inkommande samtal med foto" @@ -55,8 +55,8 @@ "Viktigt inkommande samtal med foto, meddelande och plats" "Viktigt inkommande samtal med bilagor" "Inkommande jobbsamtal" - "Inkommande Wi-Fi-samtal" - "Inkommande jobbsamtal via Wi-Fi" + "Inkommande Wi-Fi-samtal" + "Inkommande jobbsamtal på Wi-Fi" "Inkommande misstänkt spamsamtal" "Inkommande begäran om videosamtal" "Ingen tjänst" @@ -73,7 +73,7 @@ "Svara på videosamtal" "Om du vill ringa ett samtal måste du först inaktivera flygplansläge." "Inte registrerat på nätverk." - "Det finns inget mobilnät tillgängligt." + "Inga tillgängliga mobilnätverk." "Ange ett giltigt nummer om du vill ringa ett samtal." "Det gick inte att ringa." "Startar sekvens för MMI-kod…" @@ -134,8 +134,8 @@ "Avsluta samtal" "Konferenssamtal" "I samtal" - "Samtalet fortsätter med mobildata …" - "Det gick inte att växla till Wi-Fi-nätverk" - "Videosamtalet förblir i mobilnätverket. Vanliga dataavgifter kan tillkomma." + "Samtalet fortsätter med mobildata …" + "Det gick inte att växla till Wi-Fi-nätverk" + "Videosamtalet förblir i mobilnätverket. Vanliga dataavgifter kan tillkomma." "Visa inte detta igen" diff --git a/java/com/android/incallui/res/values-sw/strings.xml b/java/com/android/incallui/res/values-sw/strings.xml index 0bb1b8cf0..17c3a52ab 100644 --- a/java/com/android/incallui/res/values-sw/strings.xml +++ b/java/com/android/incallui/res/values-sw/strings.xml @@ -33,8 +33,8 @@ "Simu ambayo hukujibu kutoka %s" "Simu inayoendelea" "Simu ya kazi inayoendelea" - "Simu ya Wi-Fi inayoendelea" - "Simu ya Wi-Fi ya kazi inayoendelea" + "Simu ya Wi-Fi inaendelea" + "Simu ya Wi-Fi ya kazi inaendelea" "Inangoja" "Unapigiwa simu" "Simu inayoingia yenye picha" @@ -55,8 +55,8 @@ "Simu muhimu yenye picha, ujumbe na mahali" "Simu muhimu inayoingia yenye viambatisho" "Simu ya kazi inayoingia" - "Simu ya Wi-Fi inayoingia" - "Simu ya Wi-Fi ya kazi inayoingia" + "Simu ya Wi-Fi inaingia" + "Simu ya Wi-Fi ya kazi inaingia" "Simu inayoingia inashukiwa kuwa taka" "Ombi linaloingia la video" "Hakuna huduma" @@ -73,7 +73,7 @@ "Pokea Simu ya Video" "Kupiga simu, kwanza zima hali ya ndegeni." "Haijasajiliwa kwa mitandao" - "Mitandao ya simu za mkononi haipatikani" + "Mtandao wa simu haupatikani." "Ili upige simu, weka nambari sahihi." "Haiwezi kupiga simu." "Inaanzisha msururu wa MMI…" @@ -134,8 +134,8 @@ "Kata simu" "Simu ya kongamano" "Mazungumzo ya simu yanaendelea" - "Endelea na mazungumzo ya simu ukitumia data ya kifaa cha mkononi…" - "Imeshindwa kuhamia mtandao wa Wi-Fi" - "Hangout ya video itaendelea kwenye mtandao wa simu. Huenda ukatozwa gharama za kawaida za data." + "Endelea na mazungumzo ya simu ukitumia data ya simu…" + "Imeshindwa kuhamia mtandao wa Wi-Fi" + "Hangout ya video itaendelea kwenye mtandao wa simu. Huenda ukatozwa gharama za kawaida za data." "Usiionyeshe tena" diff --git a/java/com/android/incallui/res/values-ta/strings.xml b/java/com/android/incallui/res/values-ta/strings.xml index bae8d6a67..bb228a0e2 100644 --- a/java/com/android/incallui/res/values-ta/strings.xml +++ b/java/com/android/incallui/res/values-ta/strings.xml @@ -33,8 +33,8 @@ "%s இடமிருந்து தவறிய அழைப்பு" "செயலில் இருக்கும் அழைப்பு" "வெளிச்செல்லும் அழைப்பு (பணி)" - "வெளிச்செல்லும் வைஃபை அழைப்பு" - "வெளிச்செல்லும் வைஃபை அழைப்பு (பணி)" + "செயலில் இருக்கும் வைஃபை அழைப்பு" + "செயலில் இருக்கும் வைஃபை அழைப்பு (பணி)" "காத்திருப்பில்" "உள்வரும் அழைப்பு" "படத்துடன் உள்வரும் அழைப்பு" @@ -55,8 +55,8 @@ "படம், செய்தி, இருப்பிடத்துடன் உள்வரும் முக்கியமான அழைப்பு" "இணைப்புகளுடன் உள்வரும் முக்கியமான அழைப்பு" "உள்வரும் அழைப்பு (பணி)" - "உள்வரும் வைஃபை அழைப்பு" - "உள்வரும் வைஃபை அழைப்பு (பணி)" + "உள்வரும் வைஃபை அழைப்பு" + "உள்வரும் வைஃபை அழைப்பு (பணி)" "உள்வரும் சந்தேகத்திற்குரிய ஸ்பேம் அழைப்பு" "உள்வரும் வீடியோ கோரிக்கை" "சேவை இல்லை" @@ -73,7 +73,7 @@ "வீடியோ அழைப்பை எடு" "அழைப்பதற்கு, முதலில் விமானப் பயன்முறையை முடக்கவும்." "நெட்வொர்க்கில் பதிவுசெய்யப்படவில்லை." - "செல்லுலார் நெட்வொர்க் கிடைக்கவில்லை." + "மொபைல் நெட்வொர்க் கிடைக்கவில்லை." "அழைக்க, சரியான எண்ணை உள்ளிடவும்." "அழைக்க முடியாது." "MMI வரிசையைத் தொடங்குகிறது..." @@ -134,8 +134,8 @@ "அழைப்பைத் துண்டிக்கும்" "குழு அழைப்பு" "அழைப்பில்" - "செல்லுலார் தரவைப் பயன்படுத்தி அழைப்பைத் தொடர்கிறது…" - "வைஃபை நெட்வொர்க்கிற்கு மாற முடியவில்லை" - "செல்லுலார் நெட்வொர்க்கைப் பயன்படுத்தி தொடர்ந்து வீடியோ அழைப்பைச் செய்யலாம். வழக்கமான தரவுக் கட்டணங்கள் விதிக்கப்படக்கூடும்." + "மொபைல் தரவைப் பயன்படுத்தி அழைப்பைத் தொடர்கிறது…" + "வைஃபை நெட்வொர்க்கிற்கு மாற முடியவில்லை" + "மொபைல் நெட்வொர்க்கைப் பயன்படுத்தி தொடர்ந்து வீடியோ அழைப்பைச் செய்யலாம். வழக்கமான தரவுக் கட்டணங்கள் விதிக்கப்படக்கூடும்." "இதை மீண்டும் காட்டாதே" diff --git a/java/com/android/incallui/res/values-te/strings.xml b/java/com/android/incallui/res/values-te/strings.xml index 6b833886b..a5da32a01 100644 --- a/java/com/android/incallui/res/values-te/strings.xml +++ b/java/com/android/incallui/res/values-te/strings.xml @@ -33,8 +33,8 @@ "%s నుండి సమాధానం ఇవ్వని కాల్" "కాల్ కొనసాగుతోంది" "కార్యాలయ కాల్ కొనసాగుతోంది" - "Wi-Fi కాల్ కొనసాగుతోంది" - "Wi-Fi కార్యాలయ కాల్ కొనసాగుతోంది" + "మాట్లాడుతున్న Wi‑Fi కాల్" + "మాట్లాడుతున్న Wi‑Fi కార్యాలయ కాల్" "హోల్డ్‌లో ఉంది" "ఇన్‌కమింగ్ కాల్" "ఫోటోతో ఇన్‌కమింగ్ కాల్" @@ -55,8 +55,8 @@ "ఫోటో, సందేశం, స్థానంతో ముఖ్యమైన ఇన్‌కమింగ్ కాల్" "జోడింపులతో ముఖ్యమైన ఇన్‌కమింగ్ కాల్" "ఇన్‌కమింగ్ కార్యాలయ కాల్" - "Wi-Fi కాల్ వస్తోంది" - "ఇన్‌కమింగ్ Wi-Fi కార్యాలయ కాల్" + "ఇన్‌కమింగ్ Wi-Fi కాల్" + "ఇన్‌కమింగ్ Wi-Fi కార్యాలయ కాల్" "అనుమానాస్పద స్పామ్ కాల్ వస్తోంది" "ఇన్‌కమింగ్ వీడియో అభ్యర్థన" "సేవ లేదు" @@ -73,7 +73,7 @@ "వీడియో కాల్‌ను తీయి" "కాల్ చేయడానికి, మొదట ఎయిర్‌ప్లైన్ మోడ్‌ను ఆపివేయండి." "నెట్‌వర్క్‌లో నమోదు కాలేదు." - "సెల్యులార్ నెట్‌వర్క్ అందుబాటులో లేదు." + "మొబైల్ నెట్‌వర్క్ అందుబాటులో లేదు." "కాల్ చేయడానికి, చెల్లుబాటు అయ్యే నంబర్‌ను నమోదు చేయండి." "కాల్ చేయలేరు." "MMI శ్రేణిని ప్రారంభిస్తోంది…" @@ -134,8 +134,8 @@ "కాల్‌ను ముగిస్తుంది" "కాన్ఫరెన్స్ కాల్" "కాల్‌లో ఉన్నారు" - "సెల్యులార్ డేటాను ఉపయోగించి కాల్‌ను కొనసాగిస్తోంది…" - "Wi-Fi నెట్‌వర్క్‌కి మార్చలేకపోయింది" - "వీడియో కాల్ సెల్యులార్ నెట్‌వర్క్‌లో కొనసాగుతుంది. ప్రామాణిక డేటా ఛార్జీలు వర్తించవచ్చు." + "మొబైల్ డేటాను ఉపయోగించి కాల్‌ను కొనసాగిస్తోంది…" + "Wi-Fi నెట్‌వర్క్‌కి మార్చడం సాధ్యపడలేదు" + "వీడియో కాల్ మొబైల్ నెట్‌వర్క్‌లో కొనసాగుతుంది. ప్రామాణిక డేటా ఛార్జీలు వర్తించవచ్చు." "దీన్ని మళ్లీ చూపవద్దు" diff --git a/java/com/android/incallui/res/values-th/strings.xml b/java/com/android/incallui/res/values-th/strings.xml index 11023b93a..102faf20a 100644 --- a/java/com/android/incallui/res/values-th/strings.xml +++ b/java/com/android/incallui/res/values-th/strings.xml @@ -33,8 +33,8 @@ "สายที่ไม่ได้รับจาก %s" "โทรต่อเนื่อง" "กำลังอยู่ในสายจากที่ทำงาน" - "กำลังโทรผ่าน Wi-Fi" - "กำลังอยู่ในสายจากที่ทำงานผ่าน Wi-Fi" + "กำลังโทรผ่าน Wi-Fi" + "กำลังอยู่ในสายจากที่ทำงานผ่าน Wi-Fi" "พักสาย" "สายเรียกเข้า" "สายเรียกเข้าพร้อมรูปภาพ" @@ -55,8 +55,8 @@ "สายเรียกเข้าที่สำคัญพร้อมรูปภาพ ข้อความ และตำแหน่ง" "สายเรียกเข้าที่สำคัญพร้อมไฟล์แนบ" "มีสายเรียกเข้าจากที่ทำงาน" - "สายโทรเข้าผ่าน Wi-Fi" - "มีสายเรียกเข้าจากที่ทำงานผ่าน Wi-Fi" + "สายโทรเข้าผ่าน Wi-Fi" + "มีสายเรียกเข้าจากที่ทำงานผ่าน Wi-Fi" "สายเรียกเข้าที่สงสัยว่าเป็นสแปม" "คำขอโทรเข้าเป็นวิดีโอ" "ไม่มีบริการ" @@ -73,7 +73,7 @@ "รับสายแฮงเอาท์วิดีโอ" "หากต้องการโทรออก ให้ปิดโหมดใช้งานบนเครื่องบินก่อน" "ยังไม่ได้ลงทะเบียนบนเครือข่าย" - "เครือข่ายมือถือใช้งานไม่ได้" + "เครือข่ายมือถือใช้งานไม่ได้" "หากต้องการโทรออก โปรดป้อนหมายเลขที่ถูกต้อง" "ไม่สามารถโทรได้" "กำลังเริ่มต้นลำดับ MMI..." @@ -134,8 +134,8 @@ "วางสาย" "การประชุมสาย" "อยู่ในสาย" - "กำลังทำการโทรต่อโดยใช้ข้อมูลเครือข่ายมือถือ…" - "ไม่สามารถเปลี่ยนไปใช้เครือข่าย Wi-Fi" - "แฮงเอาท์วิดีโอจะยังคงอยู่ในเครือข่ายมือถือ อาจมีการเรียกเก็บค่าบริการข้อมูลมาตรฐาน" + "โทรต่อโดยใช้อินเทอร์เน็ตมือถือ..." + "ไม่สามารถเปลี่ยนไปใช้เครือข่าย Wi-Fi" + "แฮงเอาท์วิดีโอจะยังคงอยู่ในเครือข่ายมือถือ อาจมีการเรียกเก็บค่าบริการข้อมูลมาตรฐาน" "อย่าแสดงสิ่งนี้อีก" diff --git a/java/com/android/incallui/res/values-tl/strings.xml b/java/com/android/incallui/res/values-tl/strings.xml index 00a4623b5..9cc2f543e 100644 --- a/java/com/android/incallui/res/values-tl/strings.xml +++ b/java/com/android/incallui/res/values-tl/strings.xml @@ -33,8 +33,8 @@ "Hindi nasagot ang tawag mula kay %s" "Kasalukuyang tawag" "Kasalukuyang tawag sa trabaho" - "Isinasagawang tawag sa Wi-Fi" - "Kasalukuyang tawag sa trabaho sa pamamagitan ng Wi-Fi" + "Kasalukuyang isinasagawang tawag sa Wi-Fi" + "Kasalukuyang isinasagawang tawag sa trabaho gamit ang Wi-Fi" "Naka-hold" "Papasok na tawag" "Papasok na tawag na may larawan" @@ -55,8 +55,8 @@ "Mahalagang papasok na tawag na may larawan, mensahe, at lokasyon" "Mahalagang papasok na tawag na may mga attachment" "Papasok na tawag sa trabaho" - "Papasok na tawag sa Wi-Fi" - "Papasok na tawag sa trabaho sa pamamagitan ng Wi-Fi" + "Papasok na tawag sa Wi-Fi" + "Papasok na tawag sa trabaho gamit ang Wi-Fi" "Papasok na pinaghihinalaang spam na tawag" "Papasok na kahilingan ng video" "Walang serbisyo" @@ -73,7 +73,7 @@ "Sagutin ang Video Call" "Upang tumawag, paki-off ang Airplane mode." "Hindi nakarehistro sa network." - "Hindi available ang cellular network" + "Hindi available ang mobile network." "Upang tumawag, maglagay ng wastong numero." "Hindi makatawag." "Sinisimulan ang pagkakasunud-sunod ng MMI…" @@ -134,8 +134,8 @@ "Tapusin ang tawag" "Conference call" "Nasa tawag" - "Ipinagpapatuloy ang tawag gamit ang cellular data…" - "Hindi makalipat sa Wi-Fi network" - "Mananatili sa cellular network ang video call. Maaaring may mga babayaran sa data." + "Ipinagpapatuloy ang tawag gamit ang mobile data…" + "Hindi makalipat sa Wi-Fi network" + "Mananatili sa mobile network ang video call. Maaaring may mga babayaran sa data." "Huwag itong ipakitang muli" diff --git a/java/com/android/incallui/res/values-tr/strings.xml b/java/com/android/incallui/res/values-tr/strings.xml index 9820a6989..9126624cf 100644 --- a/java/com/android/incallui/res/values-tr/strings.xml +++ b/java/com/android/incallui/res/values-tr/strings.xml @@ -33,8 +33,8 @@ "Cevapsız çağrı: %s" "Devam eden çağrılar" "Süren iş çağrısı" - "Giden kablosuz çağrı" - "Süren kablosuz iş çağrısı" + "Devam eden kablosuz çağrı" + "İşle ilgili devam eden kablosuz çağrı" "Beklemede" "Gelen çağrı" "Fotoğraf eklenmiş gelen çağrı" @@ -55,8 +55,8 @@ "Fotoğraf, mesaj ve konum eklenmiş önemli çağrı" "Ek iliştirilmiş önemli gelen çağrı" "Gelen iş çağrısı" - "Gelen kablosuz çağrı" - "Gelen kablosuz iş çağrısı" + "Gelen kablosuz çağrı" + "İşle ilgili gelen kablosuz çağrı" "Spam olabilecek gelen arama" "Gelen video isteği" "Hizmet yok" @@ -73,7 +73,7 @@ "Video Görüşmesini Al" "Bir çağrı yapmak için öncelikle Uçak modunu kapatın." "Ağda kayıtlı değil." - "Hücresel ağ kullanılamıyor." + "Mobil ağ kullanılamıyor." "Telefon etmek için geçerli bir numara girin." "Arama yapılamıyor." "MMI dizisi başlatılıyor..." @@ -134,8 +134,8 @@ "Çağrı sonlandırılır" "Konferans çağrısı" "Konferans çağrısında" - "Görüşmeye hücresel veri kullanılarak devam ediliyor…" - "Kablosuz ağa geçilemedi" - "Video görüşmesi hücresel ağda devam edecek. Standart veri ücretleri alınabilir." + "Görüşmeye mobil veri kullanılarak devam ediliyor…" + "Kablosuz ağa geçilemedi" + "Görüntülü görüşme mobil ağda devam edecek. Standart veri ücretleri alınabilir." "Bunu bir daha gösterme" diff --git a/java/com/android/incallui/res/values-uk/strings.xml b/java/com/android/incallui/res/values-uk/strings.xml index b3b297dc7..30c202c76 100644 --- a/java/com/android/incallui/res/values-uk/strings.xml +++ b/java/com/android/incallui/res/values-uk/strings.xml @@ -33,8 +33,8 @@ "Пропущений виклик: %s" "Поточний виклик" "Поточний дзвінок на робочий телефон" - "Активний дзвінок через Wi-Fi" - "Поточний дзвінок на робочий телефон через Wi-Fi" + "Поточний дзвінок через Wi-Fi" + "Поточний дзвінок на робочий телефон через Wi-Fi" "Очікує" "Вхідний виклик" "Вхідний дзвінок із фото" @@ -55,8 +55,8 @@ "Важливий дзвінок із фото, повідомленням і адресою" "Важливий вхідний дзвінок із вкладеними файлами" "Вхідний дзвінок на робочий телефон" - "Вхідний дзвінок через Wi-Fi" - "Вхідний дзвінок на робочий телефон через Wi-Fi" + "Вхідний дзвінок через Wi-Fi" + "Вхідний дзвінок на робочий телефон через Wi-Fi" "Цей дзвінок може бути спамом" "Запит на вхідний відеодзвінок" "Нема служби" @@ -73,7 +73,7 @@ "Прийняти відеодзвінок" "Щоб установ. з\'єднання, споч. вимк. режим польоту." "Не зареєстровано в мережі." - "Мобільна мережа недоступна." + "Мобільна мережа недоступна." "Щоб зателефонувати, введіть дійсний номер." "Неможливо зателефонувати." "Запуск ряду MMI..." @@ -134,8 +134,8 @@ "Завершити виклик" "Конференц-зв’язок" "Триває виклик" - "Продовження виклику через мобільний трафік…" - "Не вдалося перейти в мережу Wi-Fi" - "Відеодзвінок продовжиться в мобільній мережі. Діють стандартні тарифи." + "Продовження виклику з використанням мобільного Інтернету…" + "Не вдалося перейти на мережу Wi-Fi" + "Відеодзвінок продовжиться з використанням мобільного Інтернету. Діють стандартні тарифи." "Більше не показувати це" diff --git a/java/com/android/incallui/res/values-ur/strings.xml b/java/com/android/incallui/res/values-ur/strings.xml index e3326a27e..8e70bad8b 100644 --- a/java/com/android/incallui/res/values-ur/strings.xml +++ b/java/com/android/incallui/res/values-ur/strings.xml @@ -33,8 +33,8 @@ "%s کی جانب سے چھوٹی ہوئی کال" "جاری کال" "کام سے متعلق جاری کال" - "‏Wi-Fi کال جاری ہے" - "‏کام سے متعلق جاری Wi-Fi کال" + "‏جاری Wi-Fi کال" + "‏کام سے متعلق جاری Wi-Fi کال" "ہولڈ پر" "آنے والی کال" "تصویر کے ساتھ آنے والی کال" @@ -55,8 +55,8 @@ "تصویر، پیغام اور مقام کے ساتھ آنے والی اہم کال" "منسلکات کے ساتھ آنے والی اہم کال" "کام سے متعلق آنے والی کال" - "‏Wi-Fi کال آ رہی ہے" - "‏کام سے متعلق آنے والی Wi-Fi کال" + "‏Wi-Fi کال آ رہی ہے" + "‏کام سے متعلق آنے والی Wi-Fi کال" "آنے والی مشتبہ سپام کال" "اِن کمنگ ویڈیو درخواست" "کوئی سروس نہیں ہے" @@ -73,7 +73,7 @@ "ویڈیو کال لیں" "کال کرنے کیلئے، پہلے ہوائی جہاز طرز کو آف کریں۔" "نیٹ ورک پر رجسٹرڈ نہیں ہے۔" - "سیلولر نیٹ ورک دستیاب نہیں ہے۔" + "موبائل نیٹ ورک دستیاب نہیں ہے۔" "کال کرنے کیلئے، ایک درست نمبر درج کریں۔" "کال نہیں کر سکتے۔" "‏MMI ترتیب شروع ہو رہی ہے…" @@ -134,8 +134,8 @@ "کال ختم کریں" "کانفرنس کال" "کال میں" - "سیلولر ڈیٹا استعمال کرکے کال جاری ہے" - "‏Wi-Fi نیٹ ورک پر سوئچ نہیں ہو سکا" - "ویڈیو کال سیلولر نیٹ ورک پر رہے گی۔ ڈیٹا کے معیاری چارجز کا اطلاق ہو سکتا ہے۔" + "موبائل ڈیٹا استعمال کرکے کال جاری ہے" + "‏Wi-Fi نیٹ ورک پر سوئچ نہیں ہو سکا" + "ویڈیو کال موبائل نیٹ ورک پر رہے گی۔ ڈیٹا کے معیاری چارجز کا اطلاق ہو سکتا ہے۔" "اسے دوبارہ مت دکھائیں" diff --git a/java/com/android/incallui/res/values-uz/strings.xml b/java/com/android/incallui/res/values-uz/strings.xml index 38285015a..c460f9504 100644 --- a/java/com/android/incallui/res/values-uz/strings.xml +++ b/java/com/android/incallui/res/values-uz/strings.xml @@ -33,10 +33,10 @@ "%s chaqiruvi javobsiz qoldi" "Joriy qo‘ng‘iroq" "Chiquvchi ishchi qo‘ng‘irog‘i" - "Chiquvchi Wi-Fi qo‘ng‘irog‘i" - "Chiquvchi Wi-Fi ishchi qo‘ng‘irog‘i" + "Joriy Wi-Fi qo‘ng‘iroq" + "Joriy Wi-Fi qo‘ng‘iroq (ish)" "Kutmoqda" - "Kiruvchi qo‘ng‘iroq" + "Kiruvchi chaqiruv" "Suratga ega kiruvchi chaqiruv" "Xabarga ega kiruvchi chaqiruv" "Joylashuv axborotiga ega kiruvchi chaqiruv" @@ -55,8 +55,8 @@ "Surat, xabar va joy. ax. ega muhim kiruv. chaqiruv" "Biriktirmalarga ega muhim kiruvchi chaqiruv" "Kiruvchi ishchi qo‘ng‘irog‘i" - "Kiruvchi Wi-Fi qo‘ng‘irog‘i" - "Kiruvchi Wi-Fi ishchi qo‘ng‘irog‘i" + "Kiruvchi Wi-Fi qo‘ng‘iroq" + "Kiruvchi Wi-Fi qo‘ng‘iroq (ish)" "Shubhali kiruvchi qo‘ng‘iroq" "Kiruvchi video so\'rovi" "Xizmat mavjud emas" @@ -73,7 +73,7 @@ "Video qo‘ng‘iroq. qabul qilish" "Qo‘ng‘iroq qilish uchun, avval \"Parvoz rejimi\" o‘chirilishi kerak." "Tarmoqda ro‘yxatdan o‘tmagan." - "Mobil tarmoq mavjud emas." + "Uyali aloqa tarmog‘i mavjud emas." "Qo‘ng‘iroq qilish uchun raqamni to‘g‘ri kiriting." "Qo‘ng‘iroq qilib bo‘lmadi." "MMI tartibi ishga tushmoqda..." @@ -134,8 +134,8 @@ "Qo‘ng‘iroqni tugatish" "Konferens-aloqa" "Qo‘ng‘iroq davom etmoqda" - "Qo‘ng‘iroq mobil internet orqali davom ettirilmoqda…" - "Wi-Fi tarmog‘iga o‘tib bo‘lmadi" - "Video qo‘ng‘iroq uyali tarmoqda davom etilaveradi. Internet uchun operator tarifi bo‘yicha haq olinishi mumkin." + "Qo‘ng‘iroq mobil internetga o‘tkazilmoqda…" + "Wi-Fi tarmog‘iga o‘tib bo‘lmadi" + "Video qo‘ng‘iroq mobil internet orqali davom ettiriladi. Internet uchun operator tarifi bo‘yicha haq olinishi mumkin." "Bu xabar boshqa ko‘rsatilmasin" diff --git a/java/com/android/incallui/res/values-vi/strings.xml b/java/com/android/incallui/res/values-vi/strings.xml index b466b020d..8c0dbceeb 100644 --- a/java/com/android/incallui/res/values-vi/strings.xml +++ b/java/com/android/incallui/res/values-vi/strings.xml @@ -33,8 +33,8 @@ "Cuộc gọi nhỡ từ %s" "Cuộc gọi đang thực hiện" "Cuộc gọi đang diễn ra về công việc" - "Cuộc gọi đang diễn ra qua Wi-Fi" - "Cuộc gọi đang diễn ra qua Wi-Fi về công việc" + "Cuộc gọi đang diễn ra qua Wi-Fi" + "Cuộc gọi về công việc đang diễn ra qua Wi-Fi" "Đang chờ" "Cuộc gọi đến" "Cuộc gọi đến có ảnh" @@ -55,8 +55,8 @@ "Cuộc gọi đến quan trọng có ảnh, tin nhắn và vị trí" "Cuộc gọi đến quan trọng có tệp đính kèm" "Cuộc gọi đến về công việc" - "Cuộc gọi đến qua Wi-Fi" - "Cuộc gọi đến qua Wi-Fi về công việc" + "Cuộc gọi đến qua Wi-Fi" + "Cuộc gọi đến về công việc qua Wi-Fi" "Cuộc gọi spam đến bị nghi ngờ" "Yêu cầu video đến" "Không có dịch vụ nào" @@ -73,7 +73,7 @@ "Nhận cuộc gọi điện video" "Để thực hiện cuộc gọi, trước tiên, hãy tắt chế độ trên Máy bay." "Chưa được đăng ký trên mạng." - "Không có mạng di động." + "Mạng di động không khả dụng." "Để thực hiện cuộc gọi, hãy nhập một số hợp lệ." "Không thực hiện được cuộc gọi." "Khởi động chuỗi MMI…" @@ -134,8 +134,8 @@ "Kết thúc cuộc gọi" "Cuộc gọi nhiều bên" "Đang trong cuộc gọi" - "Đang tiếp tục cuộc gọi bằng cách sử dụng dữ liệu di động…" - "Không thể chuyển sang mạng Wi-Fi" - "Cuộc gọi điện video sẽ duy trì trên mạng di động. Có thể áp dụng phí dữ liệu chuẩn." + "Đang tiếp tục cuộc gọi bằng cách sử dụng dữ liệu di động…" + "Không thể chuyển sang mạng Wi-Fi" + "Cuộc gọi điện video sẽ tiếp tục trên mạng di động. Bạn có thể phải trả phí dữ liệu chuẩn." "Không hiển thị lại" 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 e26ab0ca2..4ede0cb3e 100644 --- a/java/com/android/incallui/res/values-zh-rCN/strings.xml +++ b/java/com/android/incallui/res/values-zh-rCN/strings.xml @@ -33,8 +33,8 @@ "来自%s的未接电话" "当前通话" "工作通话进行中" - "正在进行 WLAN 通话" - "WLAN 工作通话进行中" + "正在进行 WLAN 通话" + "正在进行 WLAN 工作通话" "保持" "来电" "包含照片的来电" @@ -55,8 +55,8 @@ "包含照片、讯息和位置信息的重要来电" "包含附件的重要来电" "工作来电" - "WLAN 来电" - "WLAN 工作来电" + "WLAN 来电" + "WLAN 工作来电" "有疑似骚扰来电" "收到视频通话邀请" "无服务" @@ -73,7 +73,7 @@ "接通视频通话" "要进行呼叫,请先关闭飞行模式。" "尚未注册网络。" - "无法连接到移动网络。" + "无法连接到移动网络。" "要拨打电话,请输入有效的电话号码。" "无法拨打该电话。" "正在启动 MMI 序列..." @@ -134,8 +134,8 @@ "结束通话" "电话会议" "正在通话" - "正在使用移动数据网络继续通话…" - "无法切换到 WLAN 网络" - "系统将使用移动网络继续视频通话。这可能会产生标准数据流量费。" + "正在使用移动数据继续通话…" + "无法切换到 WLAN 网络" + "系统将使用移动网络继续视频通话。这可能会产生标准数据流量费。" "不再显示" 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 5eb8892e9..c4934eade 100644 --- a/java/com/android/incallui/res/values-zh-rHK/strings.xml +++ b/java/com/android/incallui/res/values-zh-rHK/strings.xml @@ -33,8 +33,8 @@ "來自 %s 的未接來電" "通話中" "正在進行工作通話" - "正在進行 Wi-Fi 通話" - "正在進行 Wi-Fi 工作通話" + "正在進行 Wi-Fi 通話" + "正在進行 Wi-Fi 工作通話" "保留通話" "來電" "附有相片的來電" @@ -55,8 +55,8 @@ "附有相片、訊息和位置的重要來電" "附有附件的重要來電" "工作來電" - "Wi-Fi 來電" - "Wi-Fi 工作來電" + "Wi-Fi 來電" + "Wi-Fi 工作來電" "疑似收到垃圾來電" "收到視像要求" "沒有服務" @@ -73,7 +73,7 @@ "接受視像通話" "請先關閉飛行模式後再撥打電話。" "未在網絡上完成註冊。" - "無法連線至流動網絡。" + "無法使用流動網絡。" "要撥打電話,請輸入有效的號碼。" "無法通話。" "開始 MMI 序列..." @@ -134,8 +134,8 @@ "結束通話" "會議通話" "正在通話" - "使用流動數據繼續通話…" - "無法切換為 Wi-Fi 網絡" - "視像通話仍會使用流動網絡 (可能需要支付標準數據用量費用)。" + "使用流動數據繼續通話…" + "無法切換為 Wi-Fi 網絡" + "視像通話仍會使用流動網絡 (可能需要支付標準數據用量費用)。" "不要再顯示此訊息" 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 9f028661e..9b85a2862 100644 --- a/java/com/android/incallui/res/values-zh-rTW/strings.xml +++ b/java/com/android/incallui/res/values-zh-rTW/strings.xml @@ -33,8 +33,8 @@ "來自 %s 的未接來電" "通話中" "進行中的公司通話" - "撥出的 Wi-Fi 電話" - "進行中的公司通話 (透過 Wi-Fi)" + "進行中的通話 (透過 Wi-Fi)" + "進行中的公司通話 (透過 Wi-Fi)" "通話保留" "來電" "包含相片的來電" @@ -55,8 +55,8 @@ "包含相片、訊息和位置資訊的重要來電" "包含附件的重要來電" "公司來電" - "撥入的 Wi-Fi 電話" - "公司來電 (透過 Wi-Fi)" + "來電 (透過 Wi-Fi)" + "公司來電 (透過 Wi-Fi)" "可疑的騷擾/廣告來電" "收到視訊要求" "沒有服務" @@ -73,7 +73,7 @@ "接聽視訊通話" "撥號前,請先關閉飛航模式。" "尚未註冊網路。" - "無法連線到行動網路。" + "無法使用行動網路。" "如要撥打電話,請輸入有效的號碼。" "無法通話。" "開始 MMI 序列…" @@ -134,8 +134,8 @@ "結束通話" "電話會議" "通話中" - "使用行動數據繼續進行通話…" - "無法切換至 Wi-Fi 網路" - "視訊通話將繼續透過行動網路進行 (可能需支付一般數據傳輸費用)。" + "使用行動網路繼續進行通話…" + "無法切換至 Wi-Fi 網路" + "視訊通話將繼續透過行動網路進行 (可能需支付一般數據傳輸費用)。" "不要再顯示這項說明" diff --git a/java/com/android/incallui/res/values-zu/strings.xml b/java/com/android/incallui/res/values-zu/strings.xml index db415cc45..bc5a92735 100644 --- a/java/com/android/incallui/res/values-zu/strings.xml +++ b/java/com/android/incallui/res/values-zu/strings.xml @@ -33,8 +33,8 @@ "Uphuthelwe ikholi kusukela ku-%s" "Ikholi eqhubekayo" "Ikholi yomsebenzi eqhubekayo" - "Ikholi ye-Wi-Fi eqhubekayo" - "Ikholi yomsebenzi eqhubekayo ye-Wi-Fi" + "Ikholi ye-Wi-Fi eqhubekayo" + "Ikholi yomsebenzi eqhubekayo ye-Wi-Fi" "Ibambile" "Ikholi engenayo" "Ikholi engenayo enesithombe" @@ -55,8 +55,8 @@ "Ikholi engenayo ebalulekile enesithombe, umlayezo nendawo" "Ikholi engenayo ebalulekile enokunamathiselwe kwi-imeyili" "Ikholi engenayo yomsebenzi" - "Ikholi ye-Wi-Fi engenayo" - "Ikholi engenayo yomsebenzi ye-Wi-Fi" + "Ikholi ye-Wi-Fi engenayo" + "Ikholi engenayo yomsebenzi ye-Wi-Fi" "Ikholi engenayo osolisayo kagaxekile" "Isicelo sevidiyo engenayo" "Ayikho isevisi" @@ -73,7 +73,7 @@ "Thatha ikholi yevidiyo" "Ukwenza ikholi, vala kuqala imodi Yendiza." "Ayibhalisiwe kwinethiwekhi." - "Inethiwekhi yeselula ayitholakali." + "Inethiwekhi yefoni ayitholakali" "Ukuze wenze ikholi, faka inombolo evumelekile." "Ayikwazi ukushaya." "Iqalisa ukulandelana kwe-MMI..." @@ -134,8 +134,8 @@ "Qeda ikholi" "Ikholi yengqungquthela" "Isecingweni" - "Iqhuba ikholi isebenzisa idatha yeselula…" - "Ayikwazanga ukushintshela kunethiwekhi ye-Wi-Fi" - "Ikholi yevidiyo izohlala kunethiwekhi yeselula. Izindleko zedatha ejwayelekile zingasebenza." + "Iqhubekisa ikholi isebenzisa idatha yeselula…" + "Ayikwazanga ukushintshela kunethiwekhi ye-Wi-Fi" + "Ikholi yevidiyo izohlala ikunethiwekhi yeselula. Amashaji edatha avamile angasebenza." "Ungabonisi lokhu futhi" diff --git a/java/com/android/incallui/res/values/dimens.xml b/java/com/android/incallui/res/values/dimens.xml index 18816f645..56b9ae158 100644 --- a/java/com/android/incallui/res/values/dimens.xml +++ b/java/com/android/incallui/res/values/dimens.xml @@ -38,7 +38,7 @@ 0dp 20sp 50dp - 36sp + 36dp 10dp @@ -58,6 +58,8 @@ 48dp + 120dp + false diff --git a/java/com/android/incallui/res/values/strings.xml b/java/com/android/incallui/res/values/strings.xml index aede4289b..4113313df 100644 --- a/java/com/android/incallui/res/values/strings.xml +++ b/java/com/android/incallui/res/values/strings.xml @@ -78,10 +78,10 @@ Ongoing work call - Ongoing Wi-Fi call + Ongoing Wi\u2011Fi call - Ongoing Wi-Fi work call + Ongoing Wi\u2011Fi work call On hold @@ -126,10 +126,10 @@ Incoming work call - Incoming Wi-Fi call + Incoming Wi\u2011Fi call - Incoming Wi-Fi work call + Incoming Wi\u2011Fi work call Incoming suspected spam call @@ -190,7 +190,7 @@ This string is currently unused (see comments in InCallActivity.java.) --> Not registered on network. - Cellular network not available. + Mobile network not available. To place a call, enter a valid number. @@ -349,11 +349,11 @@ In call - Continuing call using cellular data… + Continuing call using mobile data\u2026 - Couldn\'t switch to Wi-Fi network - Video call will remain on cellular network. Standard + Couldn\'t switch to Wi\u2011Fi network + Video call will remain on the mobile network. Standard data charges may apply. Do not show this again diff --git a/java/com/android/incallui/res/values/styles.xml b/java/com/android/incallui/res/values/styles.xml index 68a38f0b2..3c036c95f 100644 --- a/java/com/android/incallui/res/values/styles.xml +++ b/java/com/android/incallui/res/values/styles.xml @@ -78,4 +78,13 @@ @color/dialer_theme_color + + diff --git a/java/com/android/incallui/sessiondata/MultimediaFragment.java b/java/com/android/incallui/sessiondata/MultimediaFragment.java index 85a60b6e3..3e6cdbbe0 100644 --- a/java/com/android/incallui/sessiondata/MultimediaFragment.java +++ b/java/com/android/incallui/sessiondata/MultimediaFragment.java @@ -107,6 +107,7 @@ public class MultimediaFragment extends Fragment implements AvatarPresenter { public View onCreateView( LayoutInflater layoutInflater, @Nullable ViewGroup viewGroup, @Nullable Bundle bundle) { if (isSpam) { + LogUtil.i("MultimediaFragment.onCreateView", "show spam layout"); return layoutInflater.inflate(R.layout.fragment_spam, viewGroup, false); } @@ -116,23 +117,30 @@ public class MultimediaFragment extends Fragment implements AvatarPresenter { if (hasMap && MapsComponent.get(getContext()).getMaps().isAvailable()) { if (hasImage) { if (hasSubject) { + LogUtil.i("MultimediaFragment.onCreateView", "show text, image, location layout"); return layoutInflater.inflate( R.layout.fragment_composer_text_image_frag, viewGroup, false); } else { + LogUtil.i("MultimediaFragment.onCreateView", "show image, location layout"); return layoutInflater.inflate(R.layout.fragment_composer_image_frag, viewGroup, false); } } else if (hasSubject) { + LogUtil.i("MultimediaFragment.onCreateView", "show text, location layout"); return layoutInflater.inflate(R.layout.fragment_composer_text_frag, viewGroup, false); } else { + LogUtil.i("MultimediaFragment.onCreateView", "show location layout"); return layoutInflater.inflate(R.layout.fragment_composer_frag, viewGroup, false); } } else if (hasImage) { if (hasSubject) { + LogUtil.i("MultimediaFragment.onCreateView", "show text, image layout"); return layoutInflater.inflate(R.layout.fragment_composer_text_image, viewGroup, false); } else { + LogUtil.i("MultimediaFragment.onCreateView", "show image layout"); return layoutInflater.inflate(R.layout.fragment_composer_image, viewGroup, false); } } else { + LogUtil.i("MultimediaFragment.onCreateView", "show text layout"); return layoutInflater.inflate(R.layout.fragment_composer_text, viewGroup, false); } } @@ -155,11 +163,11 @@ public class MultimediaFragment extends Fragment implements AvatarPresenter { ((TextView) view.findViewById(R.id.spam_text)).setText(R.string.spam_message_text); } - TextView messageText = (TextView) view.findViewById(R.id.answer_message_text); + TextView messageText = view.findViewById(R.id.answer_message_text); if (messageText != null) { messageText.setText(getSubject()); } - ImageView mainImage = (ImageView) view.findViewById(R.id.answer_message_image); + ImageView mainImage = view.findViewById(R.id.answer_message_image); if (mainImage != null) { Glide.with(this) .load(getImageUri()) @@ -185,6 +193,7 @@ public class MultimediaFragment extends Fragment implements AvatarPresenter { Target target, DataSource dataSource, boolean isFirstResource) { + LogUtil.enterBlock("MultimediaFragment.onResourceReady"); view.findViewById(R.id.loading_spinner).setVisibility(View.GONE); return false; } @@ -192,7 +201,7 @@ public class MultimediaFragment extends Fragment implements AvatarPresenter { .into(mainImage); mainImage.setClipToOutline(true); } - FrameLayout fragmentHolder = (FrameLayout) view.findViewById(R.id.answer_message_frag); + FrameLayout fragmentHolder = view.findViewById(R.id.answer_message_frag); if (fragmentHolder != null) { fragmentHolder.setClipToOutline(true); Fragment mapFragment = @@ -202,7 +211,7 @@ public class MultimediaFragment extends Fragment implements AvatarPresenter { .replace(R.id.answer_message_frag, mapFragment) .commitNow(); } - avatarImageView = ((ImageView) view.findViewById(R.id.answer_message_avatar)); + avatarImageView = view.findViewById(R.id.answer_message_avatar); if (avatarImageView != null) { avatarImageView.setVisibility(showAvatar ? View.VISIBLE : View.GONE); } diff --git a/java/com/android/incallui/sessiondata/res/layout/fragment_composer_image.xml b/java/com/android/incallui/sessiondata/res/layout/fragment_composer_image.xml index ed29e78c4..3b3327d4f 100644 --- a/java/com/android/incallui/sessiondata/res/layout/fragment_composer_image.xml +++ b/java/com/android/incallui/sessiondata/res/layout/fragment_composer_image.xml @@ -24,8 +24,8 @@ + android:scaleType="centerCrop"/> = " - + thresholdForShowing); + "SpamCallListListener.shouldThrottleSpamNotification", + "not showing %d >= %d", + randomNumber, + thresholdForShowing); return true; } } @@ -257,15 +252,23 @@ public class SpamCallListListener implements CallList.Listener { int randomNumber = random.nextInt(100); int thresholdForShowing = Spam.get(context).percentOfNonSpamNotificationsToShow(); if (thresholdForShowing == 0) { - LogUtil.d(TAG, "Not showing non spam notification: percentOfNonSpamNotificationsToShow is 0"); + LogUtil.d( + "SpamCallListListener.shouldThrottleNonSpamNotification", + "not showing non spam notification: percentOfNonSpamNotificationsToShow is 0"); return true; } else if (randomNumber < thresholdForShowing) { LogUtil.d( - TAG, "Showing non spam notification: " + randomNumber + " < " + thresholdForShowing); + "SpamCallListListener.shouldThrottleNonSpamNotification", + "showing non spam notification: %d < %d", + randomNumber, + thresholdForShowing); return false; } else { LogUtil.d( - TAG, "Not showing non spam notification:" + randomNumber + " >= " + thresholdForShowing); + "SpamCallListListener.shouldThrottleNonSpamNotification", + "not showing non spam notification: %d >= %d", + randomNumber, + thresholdForShowing); return true; } } diff --git a/java/com/android/incallui/speakerbuttonlogic/AndroidManifest.xml b/java/com/android/incallui/speakerbuttonlogic/AndroidManifest.xml new file mode 100644 index 000000000..9557d0362 --- /dev/null +++ b/java/com/android/incallui/speakerbuttonlogic/AndroidManifest.xml @@ -0,0 +1,18 @@ + + + diff --git a/java/com/android/incallui/speakerbuttonlogic/SpeakerButtonInfo.java b/java/com/android/incallui/speakerbuttonlogic/SpeakerButtonInfo.java new file mode 100644 index 000000000..5ab821be0 --- /dev/null +++ b/java/com/android/incallui/speakerbuttonlogic/SpeakerButtonInfo.java @@ -0,0 +1,91 @@ +/* + * 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.incallui.speakerbuttonlogic; + +import android.support.annotation.DrawableRes; +import android.support.annotation.IntDef; +import android.support.annotation.StringRes; +import android.telecom.CallAudioState; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** Info about how a "Speaker" button should be displayed */ +public class SpeakerButtonInfo { + + // Testing note: most of this is exercised in ReturnToCallTest.java + + /** Preferred size for icons */ + @Retention(RetentionPolicy.SOURCE) + @IntDef({IconSize.SIZE_24_DP, IconSize.SIZE_36_DP}) + public @interface IconSize { + int SIZE_24_DP = 1; + int SIZE_36_DP = 2; + } + + @DrawableRes public final int icon; + @StringRes public final int contentDescription; + @StringRes public final int label; + public final boolean checkable; + public final boolean isChecked; + + public SpeakerButtonInfo(CallAudioState audioState, @IconSize int iconSize) { + if ((audioState.getSupportedRouteMask() & CallAudioState.ROUTE_BLUETOOTH) + == CallAudioState.ROUTE_BLUETOOTH) { + checkable = false; + isChecked = false; + label = R.string.incall_label_audio; + + if ((audioState.getRoute() & CallAudioState.ROUTE_BLUETOOTH) + == CallAudioState.ROUTE_BLUETOOTH) { + icon = + iconSize == IconSize.SIZE_36_DP + ? R.drawable.quantum_ic_bluetooth_audio_white_36 + : R.drawable.quantum_ic_bluetooth_audio_white_24; + contentDescription = R.string.incall_content_description_bluetooth; + } else if ((audioState.getRoute() & CallAudioState.ROUTE_SPEAKER) + == CallAudioState.ROUTE_SPEAKER) { + icon = + iconSize == IconSize.SIZE_36_DP + ? R.drawable.quantum_ic_volume_up_white_36 + : R.drawable.quantum_ic_volume_up_white_24; + contentDescription = R.string.incall_content_description_speaker; + } else if ((audioState.getRoute() & CallAudioState.ROUTE_WIRED_HEADSET) + == CallAudioState.ROUTE_WIRED_HEADSET) { + icon = + iconSize == IconSize.SIZE_36_DP + ? R.drawable.quantum_ic_headset_white_36 + : R.drawable.quantum_ic_headset_white_24; + contentDescription = R.string.incall_content_description_headset; + } else { + icon = + iconSize == IconSize.SIZE_36_DP + ? R.drawable.quantum_ic_phone_in_talk_white_36 + : R.drawable.quantum_ic_phone_in_talk_white_24; + contentDescription = R.string.incall_content_description_earpiece; + } + } else { + checkable = true; + isChecked = audioState.getRoute() == CallAudioState.ROUTE_SPEAKER; + label = R.string.incall_label_speaker; + icon = + iconSize == IconSize.SIZE_36_DP + ? R.drawable.quantum_ic_volume_up_white_36 + : R.drawable.quantum_ic_volume_up_white_24; + contentDescription = R.string.incall_content_description_speaker; + } + } +} diff --git a/java/com/android/incallui/video/impl/SpeakerButtonController.java b/java/com/android/incallui/video/impl/SpeakerButtonController.java index e12032abf..d98545feb 100644 --- a/java/com/android/incallui/video/impl/SpeakerButtonController.java +++ b/java/com/android/incallui/video/impl/SpeakerButtonController.java @@ -88,7 +88,7 @@ public class SpeakerButtonController implements OnCheckedChangeListener, OnClick icon = R.drawable.quantum_ic_headset_white_36; contentDescriptionResId = R.string.incall_content_description_headset; } else { - icon = R.drawable.ic_phone_audio_white_36dp; + icon = R.drawable.quantum_ic_phone_in_talk_white_36; contentDescriptionResId = R.string.incall_content_description_earpiece; } } else { diff --git a/java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java b/java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java index b7a960e35..489f72b7d 100644 --- a/java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java +++ b/java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java @@ -495,7 +495,7 @@ public class SurfaceViewVideoCallFragment extends Fragment } private View[] getAllPreviewRelatedViews() { - return new View[] {previewRoot}; + return new View[] {previewRoot, mutePreviewOverlay}; } private int getOffsetTop(View view) { @@ -644,12 +644,6 @@ public class SurfaceViewVideoCallFragment extends Fragment updateVideoOffViews(); } - /** - * This method scales the video feed inside the texture view, it doesn't change the texture view's - * size. In the old UI we would change the view size to match the aspect ratio of the video. In - * the new UI the view is always square (with the circular clip) so we have to do additional work - * to make sure the non-square video doesn't look squished. - */ @Override public void onLocalVideoDimensionsChanged() { LogUtil.i("SurfaceViewVideoCallFragment.onLocalVideoDimensionsChanged", null); @@ -833,6 +827,9 @@ public class SurfaceViewVideoCallFragment extends Fragment inCallButtonUiDelegate.setAudioRoute(audioRoute); } + @Override + public void onAudioRouteSelectorDismiss() {} + @Override public void setPrimary(@NonNull PrimaryInfo primaryInfo) { LogUtil.i("SurfaceViewVideoCallFragment.setPrimary", primaryInfo.toString()); diff --git a/java/com/android/incallui/video/impl/VideoCallFragment.java b/java/com/android/incallui/video/impl/VideoCallFragment.java index 8e2f5aefd..609cb691e 100644 --- a/java/com/android/incallui/video/impl/VideoCallFragment.java +++ b/java/com/android/incallui/video/impl/VideoCallFragment.java @@ -59,6 +59,7 @@ import android.widget.TextView; import com.android.dialer.common.Assert; import com.android.dialer.common.FragmentUtils; import com.android.dialer.common.LogUtil; +import com.android.dialer.common.concurrent.ThreadUtil; import com.android.dialer.compat.ActivityCompat; import com.android.incallui.audioroute.AudioRouteSelectorDialogFragment; import com.android.incallui.audioroute.AudioRouteSelectorDialogFragment.AudioRouteSelectorPresenter; @@ -121,6 +122,10 @@ public class VideoCallFragment extends Fragment outline.setOval(x - radius, y - radius, x + radius, y + radius); } }; + + // Must use a named method reference as otherwise they do not match. + // https://stackoverflow.com/questions/28190304/two-exact-method-references-are-not-equal + private final Runnable updatePreviewVideoIfSafe = this::updatePreviewVideoScaling; private InCallScreenDelegate inCallScreenDelegate; private VideoCallScreenDelegate videoCallScreenDelegate; private InCallButtonUiDelegate inCallButtonUiDelegate; @@ -349,6 +354,9 @@ public class VideoCallFragment extends Fragment super.onPause(); LogUtil.i("VideoCallFragment.onPause", null); inCallScreenDelegate.onInCallScreenPaused(); + + // If this is scheduled we should remove it + ThreadUtil.getUiThreadHandler().removeCallbacks(updatePreviewVideoIfSafe); } @Override @@ -665,22 +673,14 @@ public class VideoCallFragment extends Fragment updateRemoteVideoScaling(); } - /** - * This method scales the video feed inside the texture view, it doesn't change the texture view's - * size. In the old UI we would change the view size to match the aspect ratio of the video. In - * the new UI the view is always square (with the circular clip) so we have to do additional work - * to make sure the non-square video doesn't look squished. - */ @Override public void onLocalVideoDimensionsChanged() { LogUtil.i("VideoCallFragment.onLocalVideoDimensionsChanged", null); - updatePreviewVideoScaling(); } @Override public void onLocalVideoOrientationChanged() { LogUtil.i("VideoCallFragment.onLocalVideoOrientationChanged", null); - updatePreviewVideoScaling(); } /** Called when the remote video's dimensions change. */ @@ -852,6 +852,9 @@ public class VideoCallFragment extends Fragment inCallButtonUiDelegate.setAudioRoute(audioRoute); } + @Override + public void onAudioRouteSelectorDismiss() {} + @Override public void setPrimary(@NonNull PrimaryInfo primaryInfo) { LogUtil.i("VideoCallFragment.setPrimary", primaryInfo.toString()); @@ -1045,7 +1048,6 @@ public class VideoCallFragment extends Fragment params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); previewTextureView.setLayoutParams(params); previewTextureView.setOutlineProvider(circleOutlineProvider); - updatePreviewVideoScaling(); updateOverlayBackground(); contactGridManager.setIsMiddleRowVisible(false); updateMutePreviewOverlayVisibility(); @@ -1053,6 +1055,9 @@ public class VideoCallFragment extends Fragment previewOffBlurredImageView.setLayoutParams(params); previewOffBlurredImageView.setOutlineProvider(circleOutlineProvider); previewOffBlurredImageView.setClipToOutline(true); + + // Wait until the layout pass has finished before updating the scaling + ThreadUtil.postOnUiThread(updatePreviewVideoIfSafe); } private void updateVideoOffViews() { 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 c67246675..1a2bc2429 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 @@ -14,7 +14,7 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License --> - - - + + - + 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 a53fb6404..e9e7f9e8b 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 @@ -19,5 +19,5 @@ 72dp 88dp 88dp - 104dp + 116dp 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 index 6485735e2..d0a5e409a 100644 --- a/java/com/android/incallui/video/impl/res/values-land/dimens.xml +++ b/java/com/android/incallui/video/impl/res/values-land/dimens.xml @@ -15,5 +15,5 @@ ~ limitations under the License --> - 92dp + 96dp 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 index a809708df..f60dbd1d6 100644 --- a/java/com/android/incallui/video/impl/res/values-land/styles.xml +++ b/java/com/android/incallui/video/impl/res/values-land/styles.xml @@ -16,7 +16,8 @@ -->